summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--basebmp/test/makefile.mk6
-rw-r--r--basegfx/inc/basegfx/color/bcolortools.hxx76
-rw-r--r--basegfx/prj/d.lst1
-rw-r--r--basegfx/source/color/bcolortools.cxx272
-rw-r--r--basegfx/source/color/makefile.mk1
-rw-r--r--basegfx/test/basegfx2d.cxx175
-rw-r--r--basegfx/test/makefile.mk1
-rw-r--r--canvas/source/cairo/cairo_canvasfont.cxx3
-rw-r--r--canvas/source/cairo/cairo_textlayout.cxx6
-rw-r--r--canvas/source/cairo/makefile.mk9
-rwxr-xr-xcanvas/source/directx/dx_textlayout_drawhelper.cxx3
-rwxr-xr-xcanvas/source/directx/dx_winstuff.hxx25
-rw-r--r--canvas/source/directx/makefile.mk4
-rw-r--r--canvas/source/factory/makefile.mk4
-rw-r--r--canvas/source/null/makefile.mk4
-rw-r--r--canvas/source/simplecanvas/makefile.mk3
-rw-r--r--canvas/source/tools/makefile.mk4
-rw-r--r--canvas/source/vcl/canvasfont.cxx19
-rw-r--r--canvas/source/vcl/makefile.mk2
-rw-r--r--canvas/source/vcl/textlayout.cxx100
-rw-r--r--comphelper/inc/comphelper/docpasswordhelper.hxx212
-rw-r--r--comphelper/inc/comphelper/docpasswordrequest.hxx91
-rw-r--r--comphelper/inc/comphelper/mediadescriptor.hxx2
-rw-r--r--comphelper/inc/comphelper/stlunosequence.hxx482
-rw-r--r--comphelper/source/misc/docpasswordhelper.cxx152
-rw-r--r--comphelper/source/misc/docpasswordrequest.cxx153
-rw-r--r--comphelper/source/misc/makefile.mk2
-rw-r--r--comphelper/source/misc/mediadescriptor.cxx12
-rw-r--r--comphelper/source/misc/uieventslogger.cxx14
-rw-r--r--comphelper/source/property/genericpropertyset.cxx3
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx4
-rw-r--r--cppcanvas/util/makefile.mk2
-rw-r--r--dtrans/prj/build.lst2
-rw-r--r--dtrans/prj/d.lst1
-rw-r--r--dtrans/source/X11/X11_service.cxx303
-rw-r--r--dtrans/source/X11/dtransX11.xml50
-rw-r--r--dtrans/source/X11/exports.map10
-rw-r--r--dtrans/source/aqua/dtransaqua.xml47
-rw-r--r--dtrans/source/aqua/service_entry.cxx210
-rw-r--r--dtrans/source/generic/makefile.mk3
-rw-r--r--dtrans/util/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/egif/makefile.mk7
-rw-r--r--goodies/source/filter.vcl/eos2met/makefile.mk8
-rw-r--r--goodies/source/filter.vcl/epbm/makefile.mk8
-rw-r--r--goodies/source/filter.vcl/epgm/makefile.mk8
-rw-r--r--goodies/source/filter.vcl/epict/makefile.mk8
-rw-r--r--goodies/source/filter.vcl/eppm/makefile.mk7
-rw-r--r--goodies/source/filter.vcl/eps/makefile.mk6
-rw-r--r--goodies/source/filter.vcl/eras/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/etiff/makefile.mk4
-rw-r--r--goodies/source/filter.vcl/expm/makefile.mk4
-rw-r--r--goodies/source/filter.vcl/icgm/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/idxf/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/ieps/makefile.mk4
-rw-r--r--goodies/source/filter.vcl/ios2met/makefile.mk4
-rw-r--r--goodies/source/filter.vcl/ipbm/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/ipcd/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/ipcx/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/ipict/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/ipsd/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/iras/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/itga/makefile.mk3
-rw-r--r--goodies/source/filter.vcl/itiff/makefile.mk3
-rw-r--r--goodies/source/inv/makefile.mk14
-rw-r--r--goodies/util/makefile.mk5
-rw-r--r--i18npool/inc/defaultnumberingprovider.hxx1
-rw-r--r--i18npool/inc/i18npool/lang.h2
-rw-r--r--i18npool/inc/i18npool/mslangid.hxx10
-rw-r--r--i18npool/inc/xdictionary.hxx4
-rw-r--r--i18npool/source/breakiterator/breakiteratorImpl.cxx22
-rw-r--r--i18npool/source/breakiterator/breakiterator_cjk.cxx4
-rw-r--r--i18npool/source/breakiterator/xdictionary.cxx77
-rw-r--r--i18npool/source/collator/makefile.mk2
-rw-r--r--i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx11
-rw-r--r--i18npool/source/isolang/inunx.cxx14
-rw-r--r--i18npool/source/isolang/isolang.cxx4
-rwxr-xr-xi18npool/source/isolang/langid.pl124
-rw-r--r--i18npool/source/isolang/mslangid.cxx57
-rw-r--r--i18npool/source/localedata/LocaleNode.cxx22
-rw-r--r--i18npool/source/localedata/data/ar_OM.xml357
-rw-r--r--i18npool/source/localedata/data/ast_ES.xml359
-rw-r--r--i18npool/source/localedata/data/az_AZ.xml7
-rw-r--r--i18npool/source/localedata/data/gl_ES.xml52
-rw-r--r--i18npool/source/localedata/data/locale.dtd6
-rw-r--r--i18npool/source/localedata/data/localedata_euro.map34
-rw-r--r--i18npool/source/localedata/data/localedata_others.map51
-rw-r--r--i18npool/source/localedata/data/makefile.mk8
-rw-r--r--i18npool/source/localedata/data/oc_FR.xml2
-rw-r--r--i18npool/source/localedata/data/om_ET.xml358
-rw-r--r--i18npool/source/localedata/data/ro_RO.xml764
-rw-r--r--i18npool/source/localedata/data/sc_IT.xml358
-rw-r--r--i18npool/source/localedata/data/so_SO.xml125
-rw-r--r--i18npool/source/localedata/data/ug_CN.xml364
-rw-r--r--i18npool/source/localedata/localedata.cxx6
-rw-r--r--i18npool/source/nativenumber/nativenumbersupplier.cxx3
-rw-r--r--i18npool/source/registerservices/registerservices.cxx2
-rw-r--r--o3tl/qa/makefile.mk7
-rw-r--r--padmin/source/adddlg.cxx34
-rw-r--r--padmin/source/adddlg.hxx2
-rw-r--r--padmin/source/makefile.mk3
-rw-r--r--padmin/source/newppdlg.cxx4
-rw-r--r--padmin/source/newppdlg.hxx5
-rw-r--r--rsc/source/parser/rscibas.cxx16
-rw-r--r--rsc/source/parser/rscicpx.cxx4
-rw-r--r--sax/inc/sax/fshelper.hxx12
-rw-r--r--sax/source/expatwrap/sax_expat.cxx31
-rw-r--r--sax/source/expatwrap/saxwriter.cxx25
-rw-r--r--sax/source/tools/fastserializer.cxx87
-rw-r--r--sax/source/tools/fastserializer.hxx34
-rw-r--r--sax/source/tools/fshelper.cxx10
-rw-r--r--svtools/inc/dialogcontrolling.hxx38
-rw-r--r--svtools/inc/docmspasswdrequest.hxx72
-rw-r--r--svtools/inc/docpasswdrequest.hxx71
-rw-r--r--svtools/inc/eventcfg.hxx33
-rw-r--r--svtools/inc/sfxecode.hxx1
-rw-r--r--svtools/inc/svtools/embedhlp.hxx1
-rw-r--r--svtools/inc/svtools/loginerr.hxx156
-rw-r--r--svtools/inc/svtools/optionsdrawinglayer.hxx9
-rw-r--r--svtools/inc/svtools/saveopt.hxx10
-rw-r--r--svtools/inc/svtools/table/abstracttablecontrol.hxx130
-rw-r--r--svtools/inc/svtools/table/defaultinputhandler.hxx67
-rw-r--r--svtools/inc/svtools/table/gridtablerenderer.hxx103
-rw-r--r--svtools/inc/svtools/table/tablecontrol.hxx174
-rw-r--r--svtools/inc/svtools/table/tabledatawindow.hxx75
-rw-r--r--svtools/inc/svtools/table/tableinputhandler.hxx77
-rw-r--r--svtools/inc/svtools/table/tablemodel.hxx454
-rw-r--r--svtools/inc/svtools/table/tablerenderer.hxx241
-rw-r--r--svtools/inc/svtools/table/tabletypes.hxx75
-rw-r--r--svtools/prj/build.lst3
-rw-r--r--svtools/prj/d.lst2
-rw-r--r--svtools/source/brwbox/brwbox1.cxx2
-rw-r--r--svtools/source/config/eventcfg.cxx88
-rw-r--r--svtools/source/config/lingucfg.cxx54
-rw-r--r--svtools/source/config/optionsdrawinglayer.cxx197
-rw-r--r--svtools/source/config/saveopt.cxx13
-rw-r--r--svtools/source/contnr/imivctl1.cxx8
-rw-r--r--svtools/source/contnr/svtabbx.cxx11
-rw-r--r--svtools/source/contnr/svtreebx.cxx16
-rw-r--r--svtools/source/control/ctrltool.cxx6
-rw-r--r--svtools/source/control/roadmap.cxx19
-rw-r--r--svtools/source/control/valueacc.cxx36
-rw-r--r--svtools/source/control/valueimp.hxx13
-rw-r--r--svtools/source/control/valueset.cxx21
-rw-r--r--svtools/source/dialogs/addresstemplate.cxx25
-rw-r--r--svtools/source/dialogs/wizdlg.cxx5
-rw-r--r--svtools/source/filter.vcl/filter/filter.cxx11
-rw-r--r--svtools/source/filter.vcl/wmf/wmfwr.cxx11
-rw-r--r--svtools/source/inc/passwordcontainer.hxx28
-rw-r--r--svtools/source/items1/itemset.cxx2
-rw-r--r--svtools/source/misc/dialogcontrolling.cxx27
-rw-r--r--svtools/source/misc/embedhlp.cxx26
-rw-r--r--svtools/source/misc/errtxt.src4
-rw-r--r--svtools/source/misc/langtab.src8
-rw-r--r--svtools/source/misc1/docmspasswdrequest.cxx143
-rw-r--r--svtools/source/misc1/docpasswdrequest.cxx142
-rw-r--r--svtools/source/misc1/makefile.mk5
-rw-r--r--svtools/source/numbers/numfmuno.cxx2
-rw-r--r--svtools/source/numbers/zforscan.cxx13
-rw-r--r--svtools/source/passwordcontainer/makefile.mk3
-rw-r--r--svtools/source/passwordcontainer/passwordcontainer.cxx151
-rw-r--r--svtools/source/passwordcontainer/syscreds.cxx298
-rw-r--r--svtools/source/passwordcontainer/syscreds.hxx95
-rw-r--r--svtools/source/syslocale/syslocale.cxx22
-rw-r--r--svtools/source/table/defaultinputhandler.cxx210
-rw-r--r--svtools/source/table/gridtablerenderer.cxx234
-rw-r--r--svtools/source/table/makefile.mk59
-rw-r--r--svtools/source/table/tablecontrol.cxx179
-rw-r--r--svtools/source/table/tablecontrol_impl.cxx2003
-rw-r--r--svtools/source/table/tablecontrol_impl.hxx342
-rw-r--r--svtools/source/table/tabledatawindow.cxx81
-rw-r--r--svtools/source/table/tablegeometry.cxx130
-rw-r--r--svtools/source/table/tablegeometry.hxx161
-rw-r--r--svtools/source/uno/makefile.mk3
-rw-r--r--svtools/source/uno/unocontroltablemodel.cxx812
-rw-r--r--svtools/source/uno/unocontroltablemodel.hxx179
-rw-r--r--svtools/source/uno/unoiface.cxx22
-rw-r--r--svtools/uno/makefile.mk2
-rw-r--r--svtools/util/makefile.mk1
-rw-r--r--toolkit/inc/toolkit/helper/listenermultiplexer.hxx2
-rw-r--r--toolkit/inc/toolkit/helper/property.hxx8
-rw-r--r--toolkit/inc/toolkit/helper/servicenames.hxx6
-rw-r--r--toolkit/inc/toolkit/helper/vclunohelper.hxx16
-rw-r--r--toolkit/prj/build.lst3
-rw-r--r--toolkit/source/awt/makefile.mk1
-rw-r--r--toolkit/source/awt/vclxmenu.cxx2
-rw-r--r--toolkit/source/awt/vclxwindow.cxx76
-rw-r--r--toolkit/source/controls/dialogcontrol.cxx4
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.cxx242
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.hxx96
-rw-r--r--toolkit/source/controls/grid/defaultgriddatamodel.cxx310
-rw-r--r--toolkit/source/controls/grid/defaultgriddatamodel.hxx99
-rw-r--r--toolkit/source/controls/grid/gridcolumn.cxx166
-rw-r--r--toolkit/source/controls/grid/gridcolumn.hxx85
-rw-r--r--toolkit/source/controls/grid/gridcontrol.cxx273
-rw-r--r--toolkit/source/controls/grid/gridcontrol.hxx124
-rw-r--r--toolkit/source/controls/grid/makefile.mk54
-rw-r--r--toolkit/source/controls/roadmapcontrol.cxx1
-rw-r--r--toolkit/source/helper/property.cxx9
-rw-r--r--toolkit/source/helper/registerservices.cxx17
-rw-r--r--toolkit/source/helper/servicenames.cxx6
-rw-r--r--toolkit/source/helper/unowrapper.cxx8
-rw-r--r--toolkit/source/helper/vclunohelper.cxx55
-rw-r--r--toolkit/util/makefile.mk17
-rw-r--r--toolkit/util/toolkit.xml46
-rw-r--r--tools/inc/tools/errcode.hxx1
-rw-r--r--tools/inc/tools/poly.hxx1
-rw-r--r--tools/inc/tools/rc.h1
-rw-r--r--tools/source/fsys/urlobj.cxx7
-rw-r--r--tools/source/generic/makefile.mk4
-rw-r--r--tools/source/generic/poly2.cxx114
-rw-r--r--tools/util/makefile.mk7
-rw-r--r--tools/workben/solar.c2
-rw-r--r--transex3/prj/build.lst5
-rw-r--r--transex3/prj/d.lst19
-rw-r--r--transex3/source/filter/merge/FCFGMerge.cfg125
-rw-r--r--transex3/source/filter/merge/FCFGMerge.java131
-rw-r--r--transex3/source/filter/merge/Manifest.mf1
-rw-r--r--transex3/source/filter/merge/Merger.java364
-rw-r--r--transex3/source/filter/merge/makefile.mk96
-rw-r--r--transex3/source/filter/utils/AnalyzeStartupLog.java328
-rw-r--r--transex3/source/filter/utils/Cache.java2449
-rw-r--r--transex3/source/filter/utils/ConfigHelper.java303
-rw-r--r--transex3/source/filter/utils/FileHelper.java766
-rw-r--r--transex3/source/filter/utils/Logger.java177
-rw-r--r--transex3/source/filter/utils/MalformedCommandLineException.java (renamed from svtools/source/misc1/loginerr.cxx)35
-rw-r--r--transex3/source/filter/utils/XMLHelper.java825
-rw-r--r--transex3/source/filter/utils/makefile.mk57
-rw-r--r--transex3/source/help/HelpCompiler.cxx593
-rw-r--r--transex3/source/help/HelpCompiler.hxx320
-rw-r--r--transex3/source/help/HelpFileDocument.java89
-rw-r--r--transex3/source/help/HelpIndexerTool.java372
-rw-r--r--transex3/source/help/HelpLinker.cxx1161
-rw-r--r--transex3/source/help/MANIFEST.MF2
-rw-r--r--transex3/source/help/compilehelp.hxx80
-rw-r--r--transex3/source/help/helplinker.pmk35
-rw-r--r--transex3/source/help/makefile.mk139
-rw-r--r--ucbhelper/inc/ucbhelper/interactionrequest.hxx40
-rw-r--r--ucbhelper/inc/ucbhelper/simpleauthenticationrequest.hxx49
-rw-r--r--ucbhelper/source/provider/interactionrequest.cxx32
-rw-r--r--ucbhelper/source/provider/simpleauthenticationrequest.cxx125
-rw-r--r--unotools/inc/unotools/idhelper.hxx13
-rw-r--r--vcl/aqua/inc/saldata.hxx5
-rw-r--r--vcl/aqua/inc/salframe.h86
-rw-r--r--vcl/aqua/inc/salinst.h7
-rwxr-xr-xvcl/aqua/inc/vclnsapp.h4
-rw-r--r--vcl/aqua/source/a11y/aqua11yfactory.mm13
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapper.mm13
-rw-r--r--vcl/aqua/source/app/makefile.mk2
-rw-r--r--vcl/aqua/source/app/salinst.cxx100
-rwxr-xr-xvcl/aqua/source/app/vclnsapp.mm96
-rw-r--r--vcl/aqua/source/dtrans/DataFlavorMapping.cxx (renamed from dtrans/source/aqua/DataFlavorMapping.cxx)15
-rw-r--r--vcl/aqua/source/dtrans/DataFlavorMapping.hxx (renamed from dtrans/source/aqua/DataFlavorMapping.hxx)3
-rw-r--r--vcl/aqua/source/dtrans/DragActionConversion.cxx (renamed from dtrans/source/aqua/DragActionConversion.cxx)0
-rw-r--r--vcl/aqua/source/dtrans/DragActionConversion.hxx (renamed from dtrans/source/aqua/DragActionConversion.hxx)0
-rw-r--r--vcl/aqua/source/dtrans/DragSource.cxx (renamed from dtrans/source/aqua/DragSource.cxx)12
-rw-r--r--vcl/aqua/source/dtrans/DragSource.hxx (renamed from dtrans/source/aqua/DragSource.hxx)4
-rw-r--r--vcl/aqua/source/dtrans/DragSourceContext.cxx (renamed from dtrans/source/aqua/DragSourceContext.cxx)8
-rw-r--r--vcl/aqua/source/dtrans/DragSourceContext.hxx (renamed from dtrans/source/aqua/DragSourceContext.hxx)0
-rw-r--r--vcl/aqua/source/dtrans/DropTarget.cxx (renamed from dtrans/source/aqua/DropTarget.cxx)16
-rw-r--r--vcl/aqua/source/dtrans/DropTarget.hxx (renamed from dtrans/source/aqua/DropTarget.hxx)3
-rw-r--r--vcl/aqua/source/dtrans/HtmlFmtFlt.cxx (renamed from dtrans/source/aqua/HtmlFmtFlt.cxx)0
-rw-r--r--vcl/aqua/source/dtrans/HtmlFmtFlt.hxx (renamed from dtrans/source/aqua/HtmlFmtFlt.hxx)0
-rw-r--r--vcl/aqua/source/dtrans/OSXTransferable.cxx (renamed from dtrans/source/aqua/OSXTransferable.cxx)6
-rw-r--r--vcl/aqua/source/dtrans/OSXTransferable.hxx (renamed from dtrans/source/aqua/OSXTransferable.hxx)4
-rw-r--r--vcl/aqua/source/dtrans/PictToBmpFlt.cxx (renamed from dtrans/source/aqua/PictToBmpFlt.cxx)0
-rw-r--r--vcl/aqua/source/dtrans/PictToBmpFlt.hxx (renamed from dtrans/source/aqua/PictToBmpFlt.hxx)0
-rw-r--r--vcl/aqua/source/dtrans/aqua_clipboard.cxx (renamed from dtrans/source/aqua/aqua_clipboard.cxx)20
-rw-r--r--vcl/aqua/source/dtrans/aqua_clipboard.hxx (renamed from dtrans/source/aqua/aqua_clipboard.hxx)4
-rw-r--r--vcl/aqua/source/dtrans/aqua_service.cxx (renamed from dtrans/source/aqua/aqua_service.cxx)2
-rw-r--r--vcl/aqua/source/dtrans/makefile.mk (renamed from dtrans/source/aqua/makefile.mk)38
-rw-r--r--vcl/aqua/source/dtrans/service_entry.cxx67
-rw-r--r--vcl/aqua/source/dtrans/test_aquacb.cxx (renamed from dtrans/source/aqua/test_aquacb.cxx)2
-rw-r--r--vcl/aqua/source/gdi/salatsuifontutils.cxx15
-rw-r--r--vcl/aqua/source/gdi/salbmp.cxx24
-rw-r--r--vcl/aqua/source/gdi/salgdi.cxx122
-rw-r--r--vcl/aqua/source/window/salframe.cxx23
-rwxr-xr-xvcl/aqua/source/window/salframeview.mm4
-rw-r--r--vcl/inc/list.h5
-rw-r--r--vcl/inc/sft.hxx28
-rw-r--r--vcl/inc/vcl/floatwin.hxx2
-rw-r--r--vcl/inc/vcl/fontmanager.hxx14
-rw-r--r--vcl/inc/vcl/fontsubset.hxx97
-rw-r--r--vcl/inc/vcl/glyphcache.hxx3
-rw-r--r--vcl/inc/vcl/graph.hxx2
-rw-r--r--vcl/inc/vcl/graphite_adaptors.hxx154
-rw-r--r--vcl/inc/vcl/graphite_cache.hxx265
-rw-r--r--vcl/inc/vcl/graphite_features.hxx77
-rw-r--r--vcl/inc/vcl/graphite_layout.hxx167
-rw-r--r--vcl/inc/vcl/graphite_serverfont.hxx103
-rw-r--r--vcl/inc/vcl/impfont.hxx44
-rw-r--r--vcl/inc/vcl/lazydelete.hxx4
-rw-r--r--vcl/inc/vcl/outfont.hxx17
-rw-r--r--vcl/inc/vcl/ppdparser.hxx2
-rw-r--r--vcl/inc/vcl/printergfx.hxx8
-rw-r--r--vcl/inc/vcl/salframe.hxx2
-rw-r--r--vcl/inc/vcl/salgdi.hxx2
-rw-r--r--vcl/inc/vcl/salinst.hxx9
-rwxr-xr-xvcl/inc/vcl/sallayout.hxx3
-rw-r--r--vcl/inc/vcl/settings.hxx5
-rw-r--r--vcl/inc/vcl/svapp.hxx14
-rw-r--r--vcl/inc/vcl/vclevent.hxx5
-rw-r--r--vcl/inc/vcl/wintypes.hxx1
-rw-r--r--vcl/os2/inc/salinst.h1
-rw-r--r--vcl/os2/source/app/salinst.cxx4
-rw-r--r--vcl/os2/source/window/salframe.cxx1
-rw-r--r--vcl/prj/build.lst9
-rw-r--r--vcl/prj/d.lst5
-rw-r--r--vcl/source/app/settings.cxx3
-rw-r--r--vcl/source/app/svapp.cxx10
-rw-r--r--vcl/source/components/dtranscomp.cxx556
-rw-r--r--vcl/source/components/factory.cxx52
-rw-r--r--vcl/source/components/makefile.mk1
-rw-r--r--vcl/source/control/button.cxx13
-rw-r--r--vcl/source/control/combobox.cxx15
-rw-r--r--vcl/source/control/field.cxx3
-rw-r--r--vcl/source/control/fixed.cxx14
-rw-r--r--vcl/source/control/ilstbox.cxx17
-rw-r--r--vcl/source/control/imgctrl.cxx8
-rw-r--r--vcl/source/control/lstbox.cxx3
-rw-r--r--vcl/source/fontsubset/cff.cxx2482
-rw-r--r--vcl/source/fontsubset/fontsubset.cxx185
-rw-r--r--vcl/source/fontsubset/makefile.mk2
-rw-r--r--vcl/source/fontsubset/sft.cxx196
-rw-r--r--vcl/source/fontsubset/ttcr.cxx19
-rw-r--r--vcl/source/fontsubset/ttcr.hxx6
-rw-r--r--vcl/source/fontsubset/u2big5.inc1756
-rw-r--r--vcl/source/fontsubset/u2johab.inc2174
-rw-r--r--vcl/source/fontsubset/u2prc.inc3036
-rw-r--r--vcl/source/fontsubset/u2shiftjis.inc967
-rw-r--r--vcl/source/fontsubset/u2wansung.inc1071
-rw-r--r--vcl/source/fontsubset/xlat.cxx247
-rw-r--r--vcl/source/fontsubset/xlat.hxx2
-rw-r--r--vcl/source/gdi/graph.cxx2
-rw-r--r--vcl/source/gdi/impimagetree.cxx11
-rw-r--r--vcl/source/gdi/makefile.mk3
-rw-r--r--vcl/source/gdi/metric.cxx194
-rw-r--r--vcl/source/gdi/outdev3.cxx203
-rw-r--r--vcl/source/gdi/outdev6.cxx144
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx123
-rw-r--r--vcl/source/gdi/pdfwriter_impl.hxx5
-rwxr-xr-xvcl/source/gdi/sallayout.cxx140
-rw-r--r--vcl/source/gdi/wall.cxx2
-rw-r--r--vcl/source/glyphs/gcach_ftyp.cxx98
-rw-r--r--vcl/source/glyphs/gcach_ftyp.hxx5
-rw-r--r--[-rwxr-xr-x]vcl/source/glyphs/gcach_layout.cxx3
-rw-r--r--[-rwxr-xr-x]vcl/source/glyphs/gcach_rbmp.cxx3
-rw-r--r--vcl/source/glyphs/gcach_vdev.cxx3
-rw-r--r--vcl/source/glyphs/gcach_vdev.hxx3
-rw-r--r--vcl/source/glyphs/glyphcache.cxx29
-rw-r--r--vcl/source/glyphs/graphite_adaptors.cxx327
-rw-r--r--vcl/source/glyphs/graphite_cache.cxx198
-rw-r--r--vcl/source/glyphs/graphite_features.cxx289
-rw-r--r--vcl/source/glyphs/graphite_layout.cxx1367
-rw-r--r--vcl/source/glyphs/graphite_serverfont.cxx88
-rw-r--r--vcl/source/glyphs/graphite_textsrc.cxx172
-rw-r--r--vcl/source/glyphs/graphite_textsrc.hxx131
-rw-r--r--vcl/source/glyphs/makefile.mk25
-rw-r--r--vcl/source/helper/lazydelete.cxx3
-rw-r--r--vcl/source/window/brdwin.cxx2
-rw-r--r--vcl/source/window/dlgctrl.cxx65
-rw-r--r--vcl/source/window/dockmgr.cxx4
-rw-r--r--vcl/source/window/floatwin.cxx14
-rw-r--r--vcl/source/window/menu.cxx28
-rw-r--r--vcl/source/window/msgbox.cxx6
-rw-r--r--vcl/source/window/taskpanelist.cxx28
-rw-r--r--vcl/source/window/toolbox.cxx75
-rw-r--r--vcl/source/window/toolbox2.cxx4
-rw-r--r--vcl/source/window/window.cxx16
-rw-r--r--vcl/unx/gtk/a11y/atklistener.cxx26
-rw-r--r--vcl/unx/gtk/a11y/atktext.cxx76
-rw-r--r--vcl/unx/gtk/a11y/atktextattributes.cxx13
-rw-r--r--vcl/unx/gtk/a11y/atktextattributes.hxx1
-rw-r--r--vcl/unx/gtk/a11y/atkutil.cxx31
-rw-r--r--vcl/unx/gtk/a11y/atkwrapper.cxx2
-rw-r--r--vcl/unx/gtk/a11y/atkwrapper.hxx2
-rw-r--r--vcl/unx/gtk/app/gtkinst.cxx38
-rw-r--r--vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx39
-rw-r--r--vcl/unx/gtk/window/gtkframe.cxx5
-rw-r--r--vcl/unx/headless/svpinst.cxx4
-rw-r--r--vcl/unx/headless/svpinst.hxx2
-rw-r--r--vcl/unx/headless/svpprn.cxx6
-rw-r--r--vcl/unx/headless/svppspgraphics.cxx81
-rw-r--r--vcl/unx/headless/svppspgraphics.hxx7
-rw-r--r--vcl/unx/headless/svptext.cxx35
-rw-r--r--vcl/unx/inc/plugins/gtk/gtkinst.hxx1
-rw-r--r--vcl/unx/inc/pspgraphics.h10
-rw-r--r--vcl/unx/inc/salgdi.h2
-rw-r--r--vcl/unx/inc/salinst.h7
-rw-r--r--vcl/unx/kde/kdedata.cxx15
-rw-r--r--vcl/unx/kde/salnativewidgets-kde.cxx8
-rw-r--r--vcl/unx/kde4/KDEData.cxx2
-rw-r--r--vcl/unx/kde4/KDESalFrame.cxx1
-rw-r--r--vcl/unx/kde4/KDESalGraphics.cxx129
-rw-r--r--vcl/unx/kde4/main.cxx10
-rw-r--r--vcl/unx/source/app/salinst.cxx29
-rw-r--r--vcl/unx/source/app/sm.cxx40
-rw-r--r--vcl/unx/source/desktopdetect/desktopdetector.cxx346
-rw-r--r--vcl/unx/source/desktopdetect/makefile.mk61
-rw-r--r--vcl/unx/source/dtrans/X11_clipboard.cxx (renamed from dtrans/source/X11/X11_clipboard.cxx)2
-rw-r--r--vcl/unx/source/dtrans/X11_clipboard.hxx (renamed from dtrans/source/X11/X11_clipboard.hxx)0
-rw-r--r--vcl/unx/source/dtrans/X11_dndcontext.cxx (renamed from dtrans/source/X11/X11_dndcontext.cxx)2
-rw-r--r--vcl/unx/source/dtrans/X11_dndcontext.hxx (renamed from dtrans/source/X11/X11_dndcontext.hxx)0
-rw-r--r--vcl/unx/source/dtrans/X11_droptarget.cxx (renamed from dtrans/source/X11/X11_droptarget.cxx)2
-rw-r--r--vcl/unx/source/dtrans/X11_selection.cxx (renamed from dtrans/source/X11/X11_selection.cxx)40
-rw-r--r--vcl/unx/source/dtrans/X11_selection.hxx (renamed from dtrans/source/X11/X11_selection.hxx)0
-rw-r--r--vcl/unx/source/dtrans/X11_service.cxx138
-rw-r--r--vcl/unx/source/dtrans/X11_transferable.cxx (renamed from dtrans/source/X11/X11_transferable.cxx)2
-rw-r--r--vcl/unx/source/dtrans/X11_transferable.hxx (renamed from dtrans/source/X11/X11_transferable.hxx)0
-rw-r--r--vcl/unx/source/dtrans/bmp.cxx (renamed from dtrans/source/X11/bmp.cxx)2
-rw-r--r--vcl/unx/source/dtrans/bmp.hxx (renamed from dtrans/source/X11/bmp.hxx)0
-rw-r--r--vcl/unx/source/dtrans/config.cxx (renamed from dtrans/source/X11/config.cxx)2
-rw-r--r--vcl/unx/source/dtrans/copydata_curs.h (renamed from dtrans/source/X11/copydata_curs.h)0
-rw-r--r--vcl/unx/source/dtrans/copydata_mask.h (renamed from dtrans/source/X11/copydata_mask.h)0
-rw-r--r--vcl/unx/source/dtrans/linkdata_curs.h (renamed from dtrans/source/X11/linkdata_curs.h)0
-rw-r--r--vcl/unx/source/dtrans/linkdata_mask.h (renamed from dtrans/source/X11/linkdata_mask.h)0
-rw-r--r--vcl/unx/source/dtrans/makefile.mk (renamed from dtrans/source/X11/makefile.mk)28
-rw-r--r--vcl/unx/source/dtrans/movedata_curs.h (renamed from dtrans/source/X11/movedata_curs.h)0
-rw-r--r--vcl/unx/source/dtrans/movedata_mask.h (renamed from dtrans/source/X11/movedata_mask.h)0
-rw-r--r--vcl/unx/source/dtrans/nodrop_curs.h (renamed from dtrans/source/X11/nodrop_curs.h)0
-rw-r--r--vcl/unx/source/dtrans/nodrop_mask.h (renamed from dtrans/source/X11/nodrop_mask.h)0
-rw-r--r--vcl/unx/source/fontmanager/fontcache.cxx3
-rw-r--r--vcl/unx/source/fontmanager/fontmanager.cxx108
-rw-r--r--vcl/unx/source/gdi/cdeint.cxx1
-rw-r--r--vcl/unx/source/gdi/makefile.mk4
-rw-r--r--vcl/unx/source/gdi/pspgraphics.cxx136
-rw-r--r--vcl/unx/source/gdi/salgdi.cxx90
-rw-r--r--vcl/unx/source/gdi/salgdi3.cxx69
-rw-r--r--vcl/unx/source/plugadapt/salplug.cxx328
-rw-r--r--vcl/unx/source/printer/ppdparser.cxx8
-rw-r--r--vcl/unx/source/printergfx/glyphset.cxx51
-rw-r--r--vcl/unx/source/printergfx/text_gfx.cxx14
-rw-r--r--vcl/unx/source/window/salframe.cxx7
-rw-r--r--vcl/util/makefile.mk59
-rw-r--r--vcl/util/makefile2.pmk1
-rw-r--r--vcl/win/inc/salgdi.h6
-rw-r--r--vcl/win/inc/salinst.h1
-rw-r--r--vcl/win/source/app/salinst.cxx34
-rw-r--r--vcl/win/source/gdi/MAKEFILE.MK4
-rw-r--r--vcl/win/source/gdi/salgdi3.cxx127
-rw-r--r--[-rwxr-xr-x]vcl/win/source/gdi/winlayout.cxx309
-rw-r--r--vcl/win/source/window/MAKEFILE.MK4
-rw-r--r--vcl/win/source/window/salframe.cxx5
-rw-r--r--vcl/workben/makefile.mk3
443 files changed, 31841 insertions, 13589 deletions
diff --git a/basebmp/test/makefile.mk b/basebmp/test/makefile.mk
index 7d0dc6e3967a..3ea13868aeb4 100644
--- a/basebmp/test/makefile.mk
+++ b/basebmp/test/makefile.mk
@@ -65,6 +65,7 @@ CDEFS+=-xalias_level=compatible
.ENDIF
# --- Common ----------------------------------------------------------
+.IF "$(L10N_framework)"==""
# BEGIN ----------------------------------------------------------------
# auto generated Target:tests by codegen.pl
@@ -85,7 +86,6 @@ SHL1OBJS= \
# here, because not yet delivered. Need the functionality to test, so
# we're linking it in statically. Need to keep this in sync with
# source/makefile.mk
-
SHL1TARGET= tests
SHL1STDLIBS= $(SALLIB) \
$(CPPUNITLIB) \
@@ -95,7 +95,7 @@ SHL1IMPLIB= i$(SHL1TARGET)
DEF1NAME =$(SHL1TARGET)
SHL1VERSIONMAP = export.map
-
+.ENDIF
# END ------------------------------------------------------------------
#APP2TARGET= bmpdemo
@@ -127,6 +127,7 @@ SLOFILES=$(SHL1OBJS)
.INCLUDE : _cppunit.mk
# --- Enable test execution in normal build ------------------------
+.IF "$(L10N_framework)"==""
unittest : $(SHL1TARGETN)
@echo ----------------------------------------------------------
@@ -135,3 +136,4 @@ unittest : $(SHL1TARGETN)
$(TESTSHL2) -sf $(mktmp ) $(SHL1TARGETN)
ALLTAR : unittest
+.ENDIF
diff --git a/basegfx/inc/basegfx/color/bcolortools.hxx b/basegfx/inc/basegfx/color/bcolortools.hxx
new file mode 100644
index 000000000000..b4906727d08b
--- /dev/null
+++ b/basegfx/inc/basegfx/color/bcolortools.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: bcolor.hxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _BGFX_COLOR_BCOLORTOOLS_HXX
+#define _BGFX_COLOR_BCOLORTOOLS_HXX
+
+#include <sal/types.h>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx
+{
+ class BColor;
+
+ namespace tools
+ {
+ /// Transform from RGB to HSL
+ BColor rgb2hsl(const BColor& rRGBColor);
+ /// Transform from HSL to RGB
+ BColor hsl2rgb(const BColor& rHSLColor);
+
+ /// Transform from RGB to HSV
+ BColor rgb2hsv(const BColor& rRGBColor);
+ /// Transform from HSV to RGB
+ BColor hsv2rgb(const BColor& rHSVColor);
+
+ /// Transform from R'G'B' to YIQ (NTSC color model - Y is used in monochrome mode)
+ BColor rgb2yiq(const BColor& rRGBColor);
+ /// Transform from YIQ to R'G'B' (NTSC color model - Y is used in monochrome mode)
+ BColor yiq2rgb(const BColor& rYIQColor);
+
+ /// Transform from R'G'B' to Y'PbPr (the [0,1]x[-.5,.5]x[-.5,.5] equivalent of Y'CbCr (which is scaled into 8bit))
+ BColor rgb2ypbpr(const BColor& rRGBColor);
+ /// Transform from Y'PbPr (the [0,1]x[-.5,.5]x[-.5,.5] equivalent of Y'CbCr (which is scaled into 8bit)) into R'G'B'
+ BColor ypbpr2rgb(const BColor& rYPbPrColor);
+
+ /// Transform from CIE XYZ into Rec. 709 RGB (D65 white point)
+ BColor ciexyz2rgb( const BColor& rXYZColor );
+ /// Transform from Rec. 709 RGB (D65 white point) into CIE XYZ
+ BColor rgb2ciexyz( const BColor& rRGBColor );
+
+ }
+} // end of namespace basegfx
+
+#endif /* _BGFX_COLOR_BCOLORTOOLS_HXX */
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/prj/d.lst b/basegfx/prj/d.lst
index 9dd6085bbc7f..a58cd33e4f9c 100644
--- a/basegfx/prj/d.lst
+++ b/basegfx/prj/d.lst
@@ -96,6 +96,7 @@ mkdir: %_DEST%\inc%_EXT%\basegfx\tools
mkdir: %_DEST%\inc%_EXT%\basegfx\color
..\inc\basegfx\color\bcolor.hxx %_DEST%\inc%_EXT%\basegfx\color\bcolor.hxx
+..\inc\basegfx\color\bcolortools.hxx %_DEST%\inc%_EXT%\basegfx\color\bcolortools.hxx
..\inc\basegfx\color\bcolormodifier.hxx %_DEST%\inc%_EXT%\basegfx\color\bcolormodifier.hxx
mkdir: %_DEST%\inc%_EXT%\basegfx\pixel
diff --git a/basegfx/source/color/bcolortools.cxx b/basegfx/source/color/bcolortools.cxx
new file mode 100644
index 000000000000..1c7d2b222fff
--- /dev/null
+++ b/basegfx/source/color/bcolortools.cxx
@@ -0,0 +1,272 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: bcolor.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_basegfx.hxx"
+
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/color/bcolortools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace basegfx { namespace tools
+{
+ BColor rgb2hsl(const BColor& rRGBColor)
+ {
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ const double minVal = ::std::min( ::std::min( r, g ), b );
+ const double maxVal = ::std::max( ::std::max( r, g ), b );
+ const double d = maxVal - minVal;
+
+ double h=0, s=0, l=0;
+
+ l = (maxVal + minVal) / 2.0;
+
+ if( ::basegfx::fTools::equalZero(d) )
+ {
+ s = h = 0; // hue undefined (achromatic case)
+ }
+ else
+ {
+ s = l > 0.5 ? d/(2.0-maxVal-minVal) :
+ d/(maxVal + minVal);
+
+ if( r == maxVal )
+ h = (g - b)/d;
+ else if( g == maxVal )
+ h = 2.0 + (b - r)/d;
+ else
+ h = 4.0 + (r - h)/d;
+
+ h *= 60.0;
+
+ if( h < 0.0 )
+ h += 360.0;
+ }
+
+ return BColor(h,s,l);
+ }
+
+ static inline double hsl2rgbHelper( double nValue1, double nValue2, double nHue )
+ {
+ // clamp hue to [0,360]
+ nHue = fmod( nHue, 360.0 );
+
+ // cope with wrap-arounds
+ if( nHue < 0.0 )
+ nHue += 360.0;
+
+ if( nHue < 60.0 )
+ return nValue1 + (nValue2 - nValue1)*nHue/60.0;
+ else if( nHue < 180.0 )
+ return nValue2;
+ else if( nHue < 240.0 )
+ return nValue1 + (nValue2 - nValue1)*(240.0 - nHue)/60.0;
+ else
+ return nValue1;
+ }
+
+ BColor hsl2rgb(const BColor& rHSLColor)
+ {
+ const double h=rHSLColor.getRed(), s=rHSLColor.getGreen(), l=rHSLColor.getBlue();
+
+ if( fTools::equalZero(s) )
+ return BColor(l, l, l ); // achromatic case
+
+ const double nVal1( l <= 0.5 ? l*(1.0 + s) : l + s - l*s );
+ const double nVal2( 2.0*l - nVal1 );
+
+ return BColor(
+ hsl2rgbHelper(nVal2,
+ nVal1,
+ h + 120.0),
+ hsl2rgbHelper(nVal2,
+ nVal1,
+ h),
+ hsl2rgbHelper(nVal2,
+ nVal1,
+ h - 120.0) );
+ }
+
+ BColor rgb2hsv(const BColor& rRGBColor)
+ {
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ const double maxVal = std::max(std::max(r,g),b);
+ const double minVal = std::min(std::min(r,g),b);
+ const double delta = maxVal-minVal;
+
+ double h=0, s=0, v=0;
+
+ v = maxVal;
+ if( fTools::equalZero(v) )
+ s = 0;
+ else
+ s = delta / v;
+
+ if( !fTools::equalZero(s) )
+ {
+ if( maxVal == r )
+ {
+ h = (g - b) / delta;
+ }
+ else if( maxVal == g )
+ {
+ h = 2.0 + (b - r) / delta;
+ }
+ else
+ {
+ h = 4.0 + (r - g) / delta;
+ }
+
+ h *= 60.0;
+
+ if( h < 0 )
+ h += 360;
+ }
+
+ return BColor(h,s,v);
+ }
+
+ BColor hsv2rgb(const BColor& rHSVColor)
+ {
+ double h=rHSVColor.getRed();
+ const double s=rHSVColor.getGreen(), v=rHSVColor.getBlue();
+
+ if( fTools::equalZero(s) )
+ {
+ // achromatic case: no hue.
+ return BColor(v,v,v);
+ }
+ else
+ {
+ if( fTools::equal(h,360) )
+ h = 0; // 360 degrees is equivalent to 0 degrees
+
+ h /= 60.0;
+ const sal_Int32 intval = static_cast< sal_Int32 >( h );
+ const double f = h - intval;
+ const double p = v*(1.0-s);
+ const double q = v*(1.0-(s*f));
+ const double t = v*(1.0-(s*(1.0-f)));
+
+ /* which hue area? */
+ switch( intval )
+ {
+ case 0:
+ return BColor(v,t,p);
+
+ case 1:
+ return BColor(q,v,p);
+
+ case 2:
+ return BColor(p,v,t);
+
+ case 3:
+ return BColor(p,q,v);
+
+ case 4:
+ return BColor(t,p,v);
+
+ case 5:
+ return BColor(v,p,q);
+
+ default:
+ // hue overflow
+ return BColor();
+ }
+ }
+ }
+
+ BColor rgb2yiq(const BColor& rRGBColor)
+ {
+ // from Foley, van Dam, Computer Graphics
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ return BColor(
+ 0.299*r + 0.587*g + 0.114*b,
+ 0.596*r - 0.274*g - 0.322*b,
+ 0.211*r - 0.522*g + 0.311*b);
+ }
+
+ BColor yiq2rgb(const BColor& rYIQColor)
+ {
+ // from Foley, van Dam, Computer Graphics
+ const double y=rYIQColor.getRed(), i=rYIQColor.getGreen(), q=rYIQColor.getBlue();
+ return BColor(
+ y + 0.956*i + 0.623*q,
+ y - 0.272*i - 0.648*q,
+ y - 1.105*i + 1.705*q );
+ }
+
+ BColor ciexyz2rgb( const BColor& rXYZColor )
+ {
+ // from Poynton color faq, and SMPTE RP 177-1993, Derivation
+ // of Basic Television Color Equations
+ const double x=rXYZColor.getRed(), y=rXYZColor.getGreen(), z=rXYZColor.getBlue();
+ return BColor(
+ 3.240479*x - 1.53715*y - 0.498535*z,
+ -0.969256*x + 1.875991*y + 0.041556*z,
+ 0.055648*x - 0.204043*y + 1.057311*z );
+ }
+
+ BColor rgb2ciexyz( const BColor& rRGBColor )
+ {
+ // from Poynton color faq, and SMPTE RP 177-1993, Derivation
+ // of Basic Television Color Equations
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ return BColor(
+ 0.412453*r + 0.35758*g + 0.180423*b,
+ 0.212671*r + 0.71516*g + 0.072169*b,
+ 0.019334*r + 0.119193*g + 0.950227*b);
+ }
+
+ BColor rgb2ypbpr(const BColor& rRGBColor)
+ {
+ const double r=rRGBColor.getRed(), g=rRGBColor.getGreen(), b=rRGBColor.getBlue();
+ return BColor(
+ 0.299*r + 0.587*g + 0.114*b,
+ -0.168736*r - 0.331264*g + 0.5*b,
+ 0.5*r - 0.418688*g - 0.081312*b);
+ }
+
+ BColor ypbpr2rgb(const BColor& rYPbPrColor)
+ {
+ const double y=rYPbPrColor.getRed(), pb=rYPbPrColor.getGreen(), pr=rYPbPrColor.getBlue();
+ return BColor(
+ 1.*y + 0.*pb + 1.402*pr,
+ 1.*y - 0.344136*pb - 0.714136*pr,
+ 1.*y + 1.772*pb + 0.*pr);
+ }
+
+} } // end of namespace basegfx
+
+//////////////////////////////////////////////////////////////////////////////
+// eof
diff --git a/basegfx/source/color/makefile.mk b/basegfx/source/color/makefile.mk
index 9fd79701d65a..77b91a82f3ac 100644
--- a/basegfx/source/color/makefile.mk
+++ b/basegfx/source/color/makefile.mk
@@ -45,6 +45,7 @@ TARGET=color
SLOFILES= \
$(SLO)$/bcolor.obj \
+ $(SLO)$/bcolortools.obj \
$(SLO)$/bcolormodifier.obj
# --- Targets ----------------------------------
diff --git a/basegfx/test/basegfx2d.cxx b/basegfx/test/basegfx2d.cxx
index 8b732e465a51..4f0305df953f 100644
--- a/basegfx/test/basegfx2d.cxx
+++ b/basegfx/test/basegfx2d.cxx
@@ -43,6 +43,8 @@
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/range/b2dmultirange.hxx>
#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/color/bcolortools.hxx>
#include <basegfx/tools/debugplotter.hxx>
@@ -1443,6 +1445,178 @@ public:
CPPUNIT_TEST_SUITE_END();
}; // class b2dvector
+class bcolor : public CppUnit::TestFixture
+{
+ BColor maWhite;
+ BColor maBlack;
+ BColor maRed;
+ BColor maGreen;
+ BColor maBlue;
+ BColor maYellow;
+ BColor maMagenta;
+ BColor maCyan;
+
+public:
+ bcolor() :
+ maWhite(1,1,1),
+ maBlack(0,0,0),
+ maRed(1,0,0),
+ maGreen(0,1,0),
+ maBlue(0,0,1),
+ maYellow(1,1,0),
+ maMagenta(1,0,1),
+ maCyan(0,1,1)
+ {}
+
+
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ // insert your test code here.
+ void hslTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE("white",
+ tools::rgb2hsl(maWhite) == BColor(0,0,1));
+ CPPUNIT_ASSERT_MESSAGE("black",
+ tools::rgb2hsl(maBlack) == BColor(0,0,0));
+ CPPUNIT_ASSERT_MESSAGE("red",
+ tools::rgb2hsl(maRed) == BColor(0,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("green",
+ tools::rgb2hsl(maGreen) == BColor(120,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("blue",
+ tools::rgb2hsl(maBlue) == BColor(240,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("yellow",
+ tools::rgb2hsl(maYellow) == BColor(60,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("magenta",
+ tools::rgb2hsl(maMagenta) == BColor(300,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("cyan",
+ tools::rgb2hsl(maCyan) == BColor(180,1,0.5));
+
+ CPPUNIT_ASSERT_MESSAGE("roundtrip white",
+ tools::hsl2rgb(tools::rgb2hsl(maWhite)) == maWhite);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip black",
+ tools::hsl2rgb(tools::rgb2hsl(maBlack)) == maBlack);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip red",
+ tools::hsl2rgb(tools::rgb2hsl(maRed)) == maRed);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip green",
+ tools::hsl2rgb(tools::rgb2hsl(maGreen)) == maGreen);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip blue",
+ tools::hsl2rgb(tools::rgb2hsl(maBlue)) == maBlue);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip yellow",
+ tools::hsl2rgb(tools::rgb2hsl(maYellow)) == maYellow);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip magenta",
+ tools::hsl2rgb(tools::rgb2hsl(maMagenta)) == maMagenta);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip cyan",
+ tools::hsl2rgb(tools::rgb2hsl(maCyan)) == maCyan);
+
+ CPPUNIT_ASSERT_MESSAGE("grey10",
+ tools::rgb2hsl(maWhite*.1) == BColor(0,0,.1));
+ CPPUNIT_ASSERT_MESSAGE("grey90",
+ tools::rgb2hsl(maWhite*.9) == BColor(0,0,.9));
+ CPPUNIT_ASSERT_MESSAGE("red/2",
+ tools::rgb2hsl(maRed*.5) == BColor(0,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("green/2",
+ tools::rgb2hsl(maGreen*.5) == BColor(120,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("blue/2",
+ tools::rgb2hsl(maBlue*.5) == BColor(240,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("yellow/2",
+ tools::rgb2hsl(maYellow*.5) == BColor(60,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("magenta/2",
+ tools::rgb2hsl(maMagenta*.5) == BColor(300,1,0.25));
+ CPPUNIT_ASSERT_MESSAGE("cyan/2",
+ tools::rgb2hsl(maCyan*.5) == BColor(180,1,0.25));
+
+ CPPUNIT_ASSERT_MESSAGE("pastel",
+ tools::rgb2hsl(BColor(.75,.25,.25)) == BColor(0,.5,.5));
+ }
+
+ // insert your test code here.
+ void hsvTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE("white",
+ tools::rgb2hsv(maWhite) == BColor(0,0,1));
+ CPPUNIT_ASSERT_MESSAGE("black",
+ tools::rgb2hsv(maBlack) == BColor(0,0,0));
+ CPPUNIT_ASSERT_MESSAGE("red",
+ tools::rgb2hsv(maRed) == BColor(0,1,1));
+ CPPUNIT_ASSERT_MESSAGE("green",
+ tools::rgb2hsv(maGreen) == BColor(120,1,1));
+ CPPUNIT_ASSERT_MESSAGE("blue",
+ tools::rgb2hsv(maBlue) == BColor(240,1,1));
+ CPPUNIT_ASSERT_MESSAGE("yellow",
+ tools::rgb2hsv(maYellow) == BColor(60,1,1));
+ CPPUNIT_ASSERT_MESSAGE("magenta",
+ tools::rgb2hsv(maMagenta) == BColor(300,1,1));
+ CPPUNIT_ASSERT_MESSAGE("cyan",
+ tools::rgb2hsv(maCyan) == BColor(180,1,1));
+
+ CPPUNIT_ASSERT_MESSAGE("roundtrip white",
+ tools::hsv2rgb(tools::rgb2hsv(maWhite)) == maWhite);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip black",
+ tools::hsv2rgb(tools::rgb2hsv(maBlack)) == maBlack);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip red",
+ tools::hsv2rgb(tools::rgb2hsv(maRed)) == maRed);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip green",
+ tools::hsv2rgb(tools::rgb2hsv(maGreen)) == maGreen);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip blue",
+ tools::hsv2rgb(tools::rgb2hsv(maBlue)) == maBlue);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip yellow",
+ tools::hsv2rgb(tools::rgb2hsv(maYellow)) == maYellow);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip magenta",
+ tools::hsv2rgb(tools::rgb2hsv(maMagenta)) == maMagenta);
+ CPPUNIT_ASSERT_MESSAGE("roundtrip cyan",
+ tools::hsv2rgb(tools::rgb2hsv(maCyan)) == maCyan);
+
+ CPPUNIT_ASSERT_MESSAGE("grey10",
+ tools::rgb2hsv(maWhite*.1) == BColor(0,0,.1));
+ CPPUNIT_ASSERT_MESSAGE("grey90",
+ tools::rgb2hsv(maWhite*.9) == BColor(0,0,.9));
+ CPPUNIT_ASSERT_MESSAGE("red/2",
+ tools::rgb2hsv(maRed*.5) == BColor(0,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("green/2",
+ tools::rgb2hsv(maGreen*.5) == BColor(120,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("blue/2",
+ tools::rgb2hsv(maBlue*.5) == BColor(240,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("yellow/2",
+ tools::rgb2hsv(maYellow*.5) == BColor(60,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("magenta/2",
+ tools::rgb2hsv(maMagenta*.5) == BColor(300,1,0.5));
+ CPPUNIT_ASSERT_MESSAGE("cyan/2",
+ tools::rgb2hsv(maCyan*.5) == BColor(180,1,0.5));
+
+ CPPUNIT_ASSERT_MESSAGE("pastel",
+ tools::rgb2hsv(BColor(.5,.25,.25)) == BColor(0,.5,.5));
+ }
+
+ void ciexyzTest()
+ {
+ tools::rgb2ciexyz(maWhite);
+ tools::rgb2ciexyz(maBlack);
+ tools::rgb2ciexyz(maRed);
+ tools::rgb2ciexyz(maGreen);
+ tools::rgb2ciexyz(maBlue);
+ tools::rgb2ciexyz(maYellow);
+ tools::rgb2ciexyz(maMagenta);
+ tools::rgb2ciexyz(maCyan);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(bcolor);
+ CPPUNIT_TEST(hslTest);
+ CPPUNIT_TEST(hsvTest);
+ CPPUNIT_TEST(ciexyzTest);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dvector
+
// -----------------------------------------------------------------------------
//CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::b2dmultirange, "basegfx2d");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::b2dsvgdimpex, "basegfx2d");
@@ -1458,6 +1632,7 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::b2dquadraticbezier, "basegfx2d"
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::b2drange, "basegfx2d");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::b2dtuple, "basegfx2d");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::b2dvector, "basegfx2d");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(basegfx2d::bcolor, "basegfx2d");
} // namespace basegfx2d
diff --git a/basegfx/test/makefile.mk b/basegfx/test/makefile.mk
index 8e47a13defdd..1bd4d59b98d5 100644
--- a/basegfx/test/makefile.mk
+++ b/basegfx/test/makefile.mk
@@ -58,6 +58,7 @@ SHL1LIBS=\
$(SLB)$/range.lib \
$(SLB)$/tuple.lib \
$(SLB)$/tools.lib \
+ $(SLB)$/color.lib \
$(SLB)$/vector.lib
SHL1TARGET= basegfx_tests
diff --git a/canvas/source/cairo/cairo_canvasfont.cxx b/canvas/source/cairo/cairo_canvasfont.cxx
index 3ef5db762c60..c6fa0847e660 100644
--- a/canvas/source/cairo/cairo_canvasfont.cxx
+++ b/canvas/source/cairo/cairo_canvasfont.cxx
@@ -37,6 +37,7 @@
#include <basegfx/numeric/ftools.hxx>
#include <vcl/metric.hxx>
+#include <i18npool/mslangid.hxx>
#include "cairo_canvasfont.hxx"
#include "cairo_textlayout.hxx"
@@ -86,6 +87,8 @@ namespace cairocanvas
maFont->SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
+ maFont->SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale));
+
// adjust to stretched/shrinked font
if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) )
{
diff --git a/canvas/source/cairo/cairo_textlayout.cxx b/canvas/source/cairo/cairo_textlayout.cxx
index f822749cab20..08a4e7a70fa1 100644
--- a/canvas/source/cairo/cairo_textlayout.cxx
+++ b/canvas/source/cairo/cairo_textlayout.cxx
@@ -44,6 +44,12 @@
#include <tools/prewin.h>
#include <windows.h>
#include <tools/postwin.h>
+#ifdef max
+#undef max
+#endif
+#ifdef min
+#undef min
+#endif
#endif
#include <vcl/sysdata.hxx>
diff --git a/canvas/source/cairo/makefile.mk b/canvas/source/cairo/makefile.mk
index bd54254abf7e..27a1aeb6dcd7 100644
--- a/canvas/source/cairo/makefile.mk
+++ b/canvas/source/cairo/makefile.mk
@@ -49,7 +49,7 @@ DLLPRE =
# --- X11 Mac build currently doesn't work with cairo -----------
.IF "$(OS)" == "MACOSX" && "$(GUIBASE)" == "unx"
@all:
- @echo "Cannot build cairocanvas with X11..."
+ @echo "Cannot build cairocanvas with X11..."
.ENDIF
.ENDIF
@@ -65,7 +65,7 @@ CFLAGS+=-I$(SOLARINCDIR)/cairo
.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
CDEFS+= -DVERBOSE
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/cairo_cachedbitmap.obj \
$(SLO)$/cairo_cairo.obj \
$(SLO)$/cairo_canvas.obj \
@@ -84,7 +84,7 @@ SLOFILES = $(SLO)$/cairo_cachedbitmap.obj \
SHL1TARGET=$(TARGET).uno
-SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(TOOLSLIB)
+SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(TOOLSLIB) $(I18NISOLANGLIB)
.IF "$(GUI)"=="UNX"
@@ -97,7 +97,6 @@ SHL1STDLIBS+= -lcairo
.IF "$(GUIBASE)"=="aqua"
# native Mac OS X (Quartz)
SLOFILES+= $(SLO)$/cairo_quartz_cairo.obj
-OBJCXXFLAGS=-x objective-c++ -fobjc-exceptions
CFLAGSCXX+=$(OBJCXXFLAGS)
.ELSE # "$(GUIBASE)"=="aqua"
@@ -131,7 +130,7 @@ SHL1VERSIONMAP=exports.map
DEF1NAME=$(SHL1TARGET)
DEF1EXPORTFILE=exports.dxp
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/canvas/source/directx/dx_textlayout_drawhelper.cxx b/canvas/source/directx/dx_textlayout_drawhelper.cxx
index f44d8aa4a518..358bd1e9d74f 100755
--- a/canvas/source/directx/dx_textlayout_drawhelper.cxx
+++ b/canvas/source/directx/dx_textlayout_drawhelper.cxx
@@ -52,6 +52,7 @@
#include <canvas/debug.hxx>
#include "dx_impltools.hxx"
#include <vcl/sysdata.hxx>
+#include <i18npool/mslangid.hxx>
#include "dx_textlayout_drawhelper.hxx"
#include "dx_bitmap.hxx"
#include "dx_canvasfont.hxx"
@@ -135,6 +136,8 @@ namespace dxcanvas
aFont.SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
aFont.SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
+ aFont.SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale));
+
// setup font color
aFont.SetColor( aColor );
aFont.SetFillColor( aColor );
diff --git a/canvas/source/directx/dx_winstuff.hxx b/canvas/source/directx/dx_winstuff.hxx
index e5e7e4ffb4ae..1c64506c0f21 100755
--- a/canvas/source/directx/dx_winstuff.hxx
+++ b/canvas/source/directx/dx_winstuff.hxx
@@ -97,25 +97,18 @@
#undef DrawText
-// Needed for #?$&/@ gdiplus header
-#ifndef max
-#define max(a,b) (((a) > (b)) ? (a) : (b))
-#define __WORKAROUND_MAX_DEFINED__
-#endif
-
-#ifndef min
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#define __WORKAROUND_MIN_DEFINED__
-#endif
-
+#ifdef __MINGW32__
+using ::std::max;
+using ::std::min;
+#endif
+
#include <gdiplus.h>
-#ifdef __WORKAROUND_MAX_DEFINED__
-#undef max
+#ifdef min
+# undef min
#endif
-
-#ifdef __WORKAROUND_MIN_DEFINED__
-#undef min
+#ifdef max
+# undef max
#endif
namespace dxcanvas
diff --git a/canvas/source/directx/makefile.mk b/canvas/source/directx/makefile.mk
index c1d210dfcf64..1a9db2ec51c0 100644
--- a/canvas/source/directx/makefile.mk
+++ b/canvas/source/directx/makefile.mk
@@ -96,7 +96,7 @@ GDIPLUS_SLOFILES = \
$(SLO)$/dx_canvas.obj
GDIPLUS_SLOFILES += $(SHARED_SLOFILES)
-STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB)
+STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) $(I18NISOLANGLIB)
########################################################
@@ -194,7 +194,7 @@ LIB3OBJFILES = $(GDIPLUS_SLOFILES)
SHL3TARGET=$(TARGET3).uno
# Links import libraries.
-SHL3STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB)
+SHL3STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) $(I18NISOLANGLIB)
# Specifies an import library to create. For Win32 only.
SHL3IMPLIB=i$(TARGET3).lib
diff --git a/canvas/source/factory/makefile.mk b/canvas/source/factory/makefile.mk
index 3e9611412463..1051b953ae81 100644
--- a/canvas/source/factory/makefile.mk
+++ b/canvas/source/factory/makefile.mk
@@ -37,7 +37,7 @@ ENABLE_EXCEPTIONS = TRUE
.INCLUDE : settings.mk
DLLPRE =
-
+.IF "$(L10N_framework)"==""
SLOFILES = \
$(SLO)$/cf_service.obj
@@ -55,6 +55,6 @@ SHL1LIBS = $(SLB)$/$(TARGET).lib
SHL1DEF = $(MISC)$/$(SHL1TARGET).def
DEF1NAME = $(SHL1TARGET)
-
+.ENDIF
.INCLUDE : target.mk
diff --git a/canvas/source/null/makefile.mk b/canvas/source/null/makefile.mk
index 76e372c56fd7..99a6bbab93a4 100644
--- a/canvas/source/null/makefile.mk
+++ b/canvas/source/null/makefile.mk
@@ -45,7 +45,7 @@ DLLPRE =
.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
CDEFS+= -DVERBOSE
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/null_canvasbitmap.obj \
$(SLO)$/null_canvascustomsprite.obj \
$(SLO)$/null_canvasfont.obj \
@@ -68,7 +68,7 @@ SHL1VERSIONMAP=exports.map
DEF1NAME=$(SHL1TARGET)
DEF1EXPORTFILE=exports.dxp
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/canvas/source/simplecanvas/makefile.mk b/canvas/source/simplecanvas/makefile.mk
index 6417ddb0c650..c0a60250ab85 100644
--- a/canvas/source/simplecanvas/makefile.mk
+++ b/canvas/source/simplecanvas/makefile.mk
@@ -45,7 +45,7 @@ DLLPRE =
.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
CDEFS+= -DVERBOSE
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/simplecanvasimpl.obj
SHL1TARGET=$(TARGET).uno
@@ -60,6 +60,7 @@ SHL1VERSIONMAP=exports.map
DEF1NAME=$(SHL1TARGET)
DEF1EXPORTFILE=exports.dxp
+.ENDIF
# ==========================================================================
diff --git a/canvas/source/tools/makefile.mk b/canvas/source/tools/makefile.mk
index bf99a00febfc..9dc9967fac82 100644
--- a/canvas/source/tools/makefile.mk
+++ b/canvas/source/tools/makefile.mk
@@ -51,7 +51,7 @@ CDEFS+= -DPROFILER
#CFLAGS +:= /Ox /Ot # THIS IS IMPORTANT
-
+.IF "$(L10N_framework)"==""
SLOFILES = \
$(SLO)$/cachedprimitivebase.obj \
$(SLO)$/canvascustomspritehelper.obj \
@@ -95,7 +95,7 @@ DEFLIB1NAME =$(TARGET)
.IF "$(GUI)" == "WNT"
SHL1STDLIBS += $(WINMMLIB) $(KERNEL32LIB)
.ENDIF
-
+.ENDIF
# ==========================================================================
diff --git a/canvas/source/vcl/canvasfont.cxx b/canvas/source/vcl/canvasfont.cxx
index 9fb69875ecde..d5b276901594 100644
--- a/canvas/source/vcl/canvasfont.cxx
+++ b/canvas/source/vcl/canvasfont.cxx
@@ -35,7 +35,7 @@
#include <rtl/math.hxx>
#include <basegfx/numeric/ftools.hxx>
-
+#include <i18npool/mslangid.hxx>
#include <vcl/metric.hxx>
#include "canvasfont.hxx"
@@ -67,6 +67,8 @@ namespace vclcanvas
maFont->SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
+ maFont->SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale));
+
// adjust to stretched/shrinked font
if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) )
{
@@ -125,8 +127,19 @@ namespace vclcanvas
{
tools::LocalGuard aGuard;
- // TODO(F1)
- return rendering::FontMetrics();
+ OutputDevice& rOutDev = mpOutDevProvider->getOutDev();
+ VirtualDevice aVDev( rOutDev );
+ aVDev.SetFont(getVCLFont());
+ const ::FontMetric& aMetric( aVDev.GetFontMetric() );
+
+ return rendering::FontMetrics(
+ aMetric.GetAscent(),
+ aMetric.GetDescent(),
+ aMetric.GetIntLeading(),
+ aMetric.GetExtLeading(),
+ 0,
+ aMetric.GetDescent() / 2.0,
+ aMetric.GetAscent() / 2.0);
}
uno::Sequence< double > SAL_CALL CanvasFont::getAvailableSizes( ) throw (uno::RuntimeException)
diff --git a/canvas/source/vcl/makefile.mk b/canvas/source/vcl/makefile.mk
index 781cd58d8b91..fdfdd62d16b8 100644
--- a/canvas/source/vcl/makefile.mk
+++ b/canvas/source/vcl/makefile.mk
@@ -73,7 +73,7 @@ SLOFILES = $(SLO)$/backbuffer.obj \
SHL1TARGET=$(TARGET).uno
-SHL1STDLIBS= $(TOOLSLIB) $(TKLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(GOODIESLIB)
+SHL1STDLIBS= $(TOOLSLIB) $(TKLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(GOODIESLIB) $(I18NISOLANGLIB)
SHL1IMPLIB=i$(TARGET)
SHL1LIBS=$(SLB)$/$(TARGET).lib
diff --git a/canvas/source/vcl/textlayout.cxx b/canvas/source/vcl/textlayout.cxx
index f9fa6f6dc4d2..5787f32cf4bf 100644
--- a/canvas/source/vcl/textlayout.cxx
+++ b/canvas/source/vcl/textlayout.cxx
@@ -35,6 +35,7 @@
#include <tools/diagnose_ex.h>
#include <canvas/canvastools.hxx>
+#include <com/sun/star/rendering/CompositeOperation.hpp>
#include <com/sun/star/rendering/TextDirection.hpp>
#include <vcl/metric.hxx>
@@ -42,6 +43,7 @@
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/tools/canvastools.hxx>
#include "impltools.hxx"
#include "textlayout.hxx"
@@ -116,16 +118,104 @@ namespace vclcanvas
{
tools::LocalGuard aGuard;
- // TODO(F1)
- return uno::Sequence< uno::Reference< rendering::XPolyPolygon2D > >();
+ OutputDevice& rOutDev = mpOutDevProvider->getOutDev();
+ VirtualDevice aVDev( rOutDev );
+ aVDev.SetFont( mpFont->getVCLFont() );
+
+ setupLayoutMode( aVDev, mnTextDirection );
+
+ const rendering::ViewState aViewState(
+ geometry::AffineMatrix2D(1,0,0, 0,1,0),
+ NULL);
+
+ rendering::RenderState aRenderState (
+ geometry::AffineMatrix2D(1,0,0,0,1,0),
+ NULL,
+ uno::Sequence<double>(4),
+ rendering::CompositeOperation::SOURCE);
+
+ ::boost::scoped_array< sal_Int32 > aOffsets(new sal_Int32[maLogicalAdvancements.getLength()]);
+ setupTextOffsets(aOffsets.get(), maLogicalAdvancements, aViewState, aRenderState);
+
+ uno::Sequence< uno::Reference< rendering::XPolyPolygon2D> > aOutlineSequence;
+ ::basegfx::B2DPolyPolygonVector aOutlines;
+ if (aVDev.GetTextOutlines(
+ aOutlines,
+ maText.Text,
+ ::canvas::tools::numeric_cast<USHORT>(maText.StartPosition),
+ ::canvas::tools::numeric_cast<USHORT>(maText.StartPosition),
+ ::canvas::tools::numeric_cast<USHORT>(maText.Length),
+ FALSE,
+ 0,
+ aOffsets.get()))
+ {
+ aOutlineSequence.realloc(aOutlines.size());
+ sal_Int32 nIndex (0);
+ for (::basegfx::B2DPolyPolygonVector::const_iterator
+ iOutline(aOutlines.begin()),
+ iEnd(aOutlines.end());
+ iOutline!=iEnd;
+ ++iOutline)
+ {
+ aOutlineSequence[nIndex++] = ::basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(
+ mxDevice,
+ *iOutline);
+ }
+ }
+
+ return aOutlineSequence;
}
uno::Sequence< geometry::RealRectangle2D > SAL_CALL TextLayout::queryInkMeasures( ) throw (uno::RuntimeException)
{
tools::LocalGuard aGuard;
- // TODO(F1)
- return uno::Sequence< geometry::RealRectangle2D >();
+
+ OutputDevice& rOutDev = mpOutDevProvider->getOutDev();
+ VirtualDevice aVDev( rOutDev );
+ aVDev.SetFont( mpFont->getVCLFont() );
+
+ setupLayoutMode( aVDev, mnTextDirection );
+
+ const rendering::ViewState aViewState(
+ geometry::AffineMatrix2D(1,0,0, 0,1,0),
+ NULL);
+
+ rendering::RenderState aRenderState (
+ geometry::AffineMatrix2D(1,0,0,0,1,0),
+ NULL,
+ uno::Sequence<double>(4),
+ rendering::CompositeOperation::SOURCE);
+
+ ::boost::scoped_array< sal_Int32 > aOffsets(new sal_Int32[maLogicalAdvancements.getLength()]);
+ setupTextOffsets(aOffsets.get(), maLogicalAdvancements, aViewState, aRenderState);
+
+ MetricVector aMetricVector;
+ uno::Sequence<geometry::RealRectangle2D> aBoundingBoxes;
+ if (aVDev.GetGlyphBoundRects(
+ Point(0,0),
+ maText.Text,
+ ::canvas::tools::numeric_cast<USHORT>(maText.StartPosition),
+ ::canvas::tools::numeric_cast<USHORT>(maText.Length),
+ ::canvas::tools::numeric_cast<USHORT>(maText.StartPosition),
+ aMetricVector))
+ {
+ aBoundingBoxes.realloc(aMetricVector.size());
+ sal_Int32 nIndex (0);
+ for (MetricVector::const_iterator
+ iMetric(aMetricVector.begin()),
+ iEnd(aMetricVector.end());
+ iMetric!=iEnd;
+ ++iMetric)
+ {
+ aBoundingBoxes[nIndex++] = geometry::RealRectangle2D(
+ iMetric->getX(),
+ iMetric->getY(),
+ iMetric->getX() + iMetric->getWidth(),
+ iMetric->getY() + iMetric->getHeight());
+ }
+ }
+ return aBoundingBoxes;
}
uno::Sequence< geometry::RealRectangle2D > SAL_CALL TextLayout::queryMeasures( ) throw (uno::RuntimeException)
@@ -171,7 +261,7 @@ namespace vclcanvas
setupLayoutMode( aVDev, mnTextDirection );
- const sal_Int32 nAboveBaseline( -aMetric.GetIntLeading() - aMetric.GetAscent() );
+ const sal_Int32 nAboveBaseline( /*-aMetric.GetIntLeading()*/ - aMetric.GetAscent() );
const sal_Int32 nBelowBaseline( aMetric.GetDescent() );
if( maLogicalAdvancements.getLength() )
diff --git a/comphelper/inc/comphelper/docpasswordhelper.hxx b/comphelper/inc/comphelper/docpasswordhelper.hxx
new file mode 100644
index 000000000000..90927a3e9c6c
--- /dev/null
+++ b/comphelper/inc/comphelper/docpasswordhelper.hxx
@@ -0,0 +1,212 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docpasswordhelper.hxx,v $
+ * $Revision: 1.1 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef COMPHELPER_DOCPASSWORDHELPR_HXX
+#define COMPHELPER_DOCPASSWORDHELPR_HXX
+
+#include "comphelper/comphelperdllapi.h"
+#include <vector>
+#include "comphelper/docpasswordrequest.hxx"
+
+namespace com { namespace sun { namespace star { namespace task { class XInteractionHandler; } } } }
+
+namespace comphelper {
+
+class MediaDescriptor;
+
+// ============================================================================
+
+enum DocPasswordVerifierResult
+{
+ DocPasswordVerifierResult_OK,
+ DocPasswordVerifierResult_WRONG_PASSWORD,
+ DocPasswordVerifierResult_ABORT
+};
+
+// ============================================================================
+
+/** Base class for a password verifier used by the DocPasswordHelper class
+ below.
+
+ Users have to implement the virtual function and pass an instance of the
+ verifier to one of the password request functions.
+ */
+class COMPHELPER_DLLPUBLIC IDocPasswordVerifier
+{
+public:
+ virtual ~IDocPasswordVerifier();
+
+ /** Will be called everytime a password needs to be verified.
+
+ @return The result of the verification.
+ - DocPasswordVerifierResult_OK, if and only if the passed password
+ is valid and can be used to process the related document.
+ - DocPasswordVerifierResult_WRONG_PASSWORD, if the password is
+ wrong. The user may be asked again for a new password.
+ - DocPasswordVerifierResult_ABORT, if an unrecoverable error
+ occured while password verification. The password request loop
+ will be aborted.
+ */
+ virtual DocPasswordVerifierResult verifyPassword( const ::rtl::OUString& rPassword ) = 0;
+
+};
+
+// ============================================================================
+
+/** Helper that asks for a document password and checks its validity.
+ */
+class COMPHELPER_DLLPUBLIC DocPasswordHelper
+{
+public:
+ // ------------------------------------------------------------------------
+
+ /** This helper function tries to request and verify a password to load a
+ protected document.
+
+ First, the list of default passwords will be tried if provided. This is
+ needed by import filters for external file formats that have to check a
+ predefined password in some cases without asking the user for a
+ password. Every password is checked using the passed password verifier.
+
+ If not successful, the passed password of a medium is tried, that has
+ been set e.g. by an API call to load a document. If existing, the
+ password is checked using the passed password verifier.
+
+ If still not successful, the passed interaction handler is used to
+ request a password from the user. This will be repeated until the
+ passed password verifier validates the entered password, or if the user
+ chooses to cancel password input.
+
+ @param rVerifier
+ The password verifier used to check every processed password.
+
+ @param rMediaPassword
+ If not empty, will be passed to the password validator before
+ requesting a password from the user. This password usually should
+ be querried from a media descriptor.
+
+ @param rxInteractHandler
+ The interaction handler that will be used to request a password
+ from the user, e.g. by showing a password input dialog.
+
+ @param rDocumentName
+ The name of the related document that will be shown in the password
+ input dialog.
+
+ @param eRequestType
+ The password request type that will be passed to the
+ DocPasswordRequest object created internally. See
+ docpasswordrequest.hxx for more details.
+
+ @param pDefaultPasswords
+ If not null, contains default passwords that will be tried before a
+ password will be requested from the media descriptor or the user.
+
+ @param pbIsDefaultPassword
+ (output parameter) If not null, the type of the found password will
+ be returned. True means the password has been found in the passed
+ list of default passwords. False means the password has been taken
+ from the rMediaPassword parameter or has been entered by the user.
+
+ @return
+ If not empty, contains the password that has been validated by the
+ passed password verifier. If empty, no valid password has been
+ found, or the user has chossen to cancel password input.
+ */
+ static ::rtl::OUString requestAndVerifyDocPassword(
+ IDocPasswordVerifier& rVerifier,
+ const ::rtl::OUString& rMediaPassword,
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::task::XInteractionHandler >& rxInteractHandler,
+ const ::rtl::OUString& rDocumentName,
+ DocPasswordRequestType eRequestType,
+ const ::std::vector< ::rtl::OUString >* pDefaultPasswords = 0,
+ bool* pbIsDefaultPassword = 0 );
+
+ // ------------------------------------------------------------------------
+
+ /** This helper function tries to find a password for the document
+ described by the passed media descriptor.
+
+ First, the list of default passwords will be tried if provided. This is
+ needed by import filters for external file formats that have to check a
+ predefined password in some cases without asking the user for a
+ password. Every password is checked using the passed password verifier.
+
+ If not successful, the passed media descriptor is asked for a password,
+ that has been set e.g. by an API call to load a document. If existing,
+ the password is checked using the passed password verifier.
+
+ If still not successful, the interaction handler contained in the
+ passed nmedia descriptor is used to request a password from the user.
+ This will be repeated until the passed password verifier validates the
+ entered password, or if the user chooses to cancel password input.
+
+ @param rVerifier
+ The password verifier used to check every processed password.
+
+ @param rMediaDesc
+ The media descriptor of the document that needs to be opened with
+ a password. If a valid password (that is not contained in the
+ passed list of default passwords) was found, it will be inserted
+ into the "Password" property of this descriptor.
+
+ @param eRequestType
+ The password request type that will be passed to the
+ DocPasswordRequest object created internally. See
+ docpasswordrequest.hxx for more details.
+
+ @param pDefaultPasswords
+ If not null, contains default passwords that will be tried before a
+ password will be requested from the media descriptor or the user.
+
+ @return
+ If not empty, contains the password that has been validated by the
+ passed password verifier. If empty, no valid password has been
+ found, or the user has chossen to cancel password input.
+ */
+ static ::rtl::OUString requestAndVerifyDocPassword(
+ IDocPasswordVerifier& rVerifier,
+ MediaDescriptor& rMediaDesc,
+ DocPasswordRequestType eRequestType,
+ const ::std::vector< ::rtl::OUString >* pDefaultPasswords = 0 );
+
+ // ------------------------------------------------------------------------
+
+private:
+ ~DocPasswordHelper();
+};
+
+// ============================================================================
+
+} // namespace comphelper
+
+#endif
+
diff --git a/comphelper/inc/comphelper/docpasswordrequest.hxx b/comphelper/inc/comphelper/docpasswordrequest.hxx
new file mode 100644
index 000000000000..b1e042e876bd
--- /dev/null
+++ b/comphelper/inc/comphelper/docpasswordrequest.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docpasswordrequest.hxx,v $
+ * $Revision: 1.1 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef COMPHELPER_DOCPASSWORDREQUEST_HXX
+#define COMPHELPER_DOCPASSWORDREQUEST_HXX
+
+#include "comphelper/comphelperdllapi.h"
+#include <com/sun/star/task/PasswordRequestMode.hpp>
+#include <com/sun/star/task/XInteractionRequest.hpp>
+#include <cppuhelper/implbase1.hxx>
+
+namespace comphelper {
+
+// ============================================================================
+
+/** Selects which UNO document password request type to use. */
+enum DocPasswordRequestType
+{
+ DocPasswordRequestType_STANDARD, /// Uses the standard com.sun.star.task.DocumentPasswordRequest request.
+ DocPasswordRequestType_MS /// Uses the com.sun.star.task.DocumentMSPasswordRequest request.
+};
+
+// ============================================================================
+
+class AbortContinuation;
+class PasswordContinuation;
+
+/** Implements the task.XInteractionRequest interface for requesting a password
+ string for a document.
+ */
+class COMPHELPER_DLLPUBLIC DocPasswordRequest : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
+{
+public:
+ explicit DocPasswordRequest(
+ DocPasswordRequestType eType,
+ ::com::sun::star::task::PasswordRequestMode eMode,
+ const ::rtl::OUString& rDocumentName );
+ virtual ~DocPasswordRequest();
+
+ bool isAbort() const;
+ bool isPassword() const;
+ ::rtl::OUString getPassword() const;
+
+private:
+ virtual ::com::sun::star::uno::Any SAL_CALL
+ getRequest() throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL
+ getContinuations() throw( ::com::sun::star::uno::RuntimeException );
+
+private:
+ ::com::sun::star::uno::Any maRequest;
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > maContinuations;
+ AbortContinuation* mpAbort;
+ PasswordContinuation* mpPassword;
+};
+
+// ============================================================================
+
+} // namespace comphelper
+
+#endif
+
diff --git a/comphelper/inc/comphelper/mediadescriptor.hxx b/comphelper/inc/comphelper/mediadescriptor.hxx
index 5cd36d2e687b..e388c0b4ca3c 100644
--- a/comphelper/inc/comphelper/mediadescriptor.hxx
+++ b/comphelper/inc/comphelper/mediadescriptor.hxx
@@ -74,8 +74,10 @@ class COMPHELPER_DLLPUBLIC MediaDescriptor : public SequenceAsHashMap
does not work as expected under windows (under unix it works as well)
these way must be used :-(
*/
+ static const ::rtl::OUString& PROP_ABORTED();
static const ::rtl::OUString& PROP_ASTEMPLATE();
static const ::rtl::OUString& PROP_CHARACTERSET();
+ static const ::rtl::OUString& PROP_COMPONENTDATA();
static const ::rtl::OUString& PROP_DEEPDETECTION();
static const ::rtl::OUString& PROP_DETECTSERVICE();
static const ::rtl::OUString& PROP_DOCUMENTSERVICE();
diff --git a/comphelper/inc/comphelper/stlunosequence.hxx b/comphelper/inc/comphelper/stlunosequence.hxx
index a0ace84e8a6e..c9bc525cabd6 100644
--- a/comphelper/inc/comphelper/stlunosequence.hxx
+++ b/comphelper/inc/comphelper/stlunosequence.hxx
@@ -5,9 +5,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: stlunosequence.hxx,v $
+ * $RCSfile: $
*
- * $Revision: 1.3 $
+ * $Revision: $
*
* This file is part of OpenOffice.org.
*
@@ -31,459 +31,59 @@
#define _COMPHELPER_STLUNOITERATOR_HXX
#include <com/sun/star/uno/Sequence.hxx>
-#include <iterator>
#include <sal/types.h>
-namespace comphelper { namespace stlunosequence {
- template<typename S, typename V>
- class StlSequence;
-
- template<typename S, typename V>
- class StlSequenceIterator : public std::iterator<std::random_access_iterator_tag, V, sal_Int32>
- {
- public:
- typedef ::std::random_access_iterator_tag iterator_category;
- typedef V& reference;
- typedef V value_type;
- typedef sal_Int32 difference_type;
- typedef V* pointer;
- typedef const V& const_reference;
-
- StlSequenceIterator();
- StlSequenceIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type index);
-
- reference operator*() const;
- StlSequenceIterator<S,V>& operator++();
- StlSequenceIterator<S,V> operator++(int);
- StlSequenceIterator<S,V>& operator--();
- StlSequenceIterator<S,V> operator--(int);
- StlSequenceIterator<S,V>& operator+=(const typename StlSequenceIterator<S,V>::difference_type by);
- StlSequenceIterator<S,V>& operator-=(const typename StlSequenceIterator<S,V>::difference_type by);
- StlSequenceIterator<S,V> operator+(const typename StlSequenceIterator<S,V>::difference_type by) const;
- StlSequenceIterator<S,V> operator-(const typename StlSequenceIterator<S,V>::difference_type by) const;
- typename StlSequenceIterator<S,V>::difference_type operator-(const StlSequenceIterator<S,V>& to) const;
-
- bool operator==(const StlSequenceIterator<S,V>& other) const;
- bool operator!=(const StlSequenceIterator<S,V>& other) const;
- bool operator<(const StlSequenceIterator<S,V>& other) const;
- reference operator[](const typename StlSequenceIterator<S,V>::difference_type by) const;
-
-
- protected:
- friend class StlSequence<S,V>;
- S * m_UnoSequence;
- typename StlSequenceIterator<S,V>::difference_type m_Index;
- };
-
- template<typename S, typename V>
- class StlSequenceConstIterator : public StlSequenceIterator<S,V>
- {
- public:
- typedef const V& reference;
- StlSequenceConstIterator();
- StlSequenceConstIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type by);
- typename StlSequenceIterator<S,V>::const_reference operator*() const
- {
- return (*(this->m_UnoSequence))[this->m_Index];
- }
-
- typename StlSequenceIterator<S,V>::const_reference operator[](const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- return (*(this->m_UnoSequence))[this->m_Index+by];
- }
- };
-
- template<typename S, typename V>
- class StlSequence
- {
- public:
- typedef sal_Int32 size_type;
- typedef V& reference;
- typedef const V& const_reference;
- typedef sal_Int32 difference_type;
- typedef V value_type;
- typedef StlSequenceIterator<S,V> iterator;
- typedef StlSequenceConstIterator<S,V> const_iterator;
-
- StlSequence(S& uno_sequence);
-
- typename StlSequence<S,V>::size_type size() const;
- typename StlSequence<S,V>::size_type max_size() const;
- bool empty() const;
- void swap(StlSequence<S,V>& other);
- typename StlSequence<S,V>::iterator begin();
- typename StlSequence<S,V>::iterator end();
- typename StlSequence<S,V>::const_iterator begin() const;
- typename StlSequence<S,V>::const_iterator end() const;
-
- bool operator==(const StlSequence<S,V>& other) const;
- bool operator!=(const StlSequence<S,V>& other) const;
- bool operator<(const StlSequence<S,V>& other) const;
- bool operator>(const StlSequence<S,V>& other) const;
- bool operator<=(const StlSequence<S,V>& other) const;
- bool operator>=(const StlSequence<S,V>& other) const;
-
-
- private:
- friend class StlSequenceIterator<S,V>;
- S * m_UnoSequence;
- static const typename StlSequence<S,V>::size_type begin_of_sequence;
- static const typename StlSequence<S,V>::size_type end_of_sequence;
- };
-
- //StlSequenceIterator
- template<typename S, typename V>
- StlSequenceIterator<S,V>::StlSequenceIterator()
- : m_UnoSequence(0), m_Index(StlSequence<S,V>::end_of_sequence)
- {}
-
- template<typename S, typename V>
- StlSequenceConstIterator<S,V>::StlSequenceConstIterator()
- {}
-
- template<typename S, typename V>
- StlSequenceIterator<S, V>::StlSequenceIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type index)
- : m_UnoSequence(uno_sequence), m_Index(index)
- {}
-
- template<typename S, typename V>
- StlSequenceConstIterator<S, V>::StlSequenceConstIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type index)
- : StlSequenceIterator<S,V>(uno_sequence, index)
- {}
-
- template<typename S, typename V>
- inline typename StlSequenceIterator<S,V>::reference StlSequenceIterator<S, V>::operator*() const
- {
- return (*m_UnoSequence)[m_Index];
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator++()
- {
- ++m_Index;
- if(m_Index>=m_UnoSequence->getLength())
- m_Index = StlSequence<S,V>::end_of_sequence;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator++(int)
- {
- StlSequenceIterator<S,V> temp = *this;
- ++*this;
- return temp;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator--()
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence)
- m_Index = m_UnoSequence->getLength();
- --m_Index;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator--(int)
- {
- StlSequenceIterator<S,V> temp = *this;
- --*this;
- return temp;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator+=(const typename StlSequenceIterator<S,V>::difference_type by)
- {
- if(by<0)
- {
- this->operator-=(-by);
- return *this;
- }
- if(by==0)
- return *this;
- m_Index+=by;
- if(m_Index>=m_UnoSequence->getLength())
- m_Index=StlSequence<S,V>::end_of_sequence;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator-=(const typename StlSequenceIterator<S,V>::difference_type by)
- {
- if(by<0)
- {
- if(-by==by) return *this; // breaking infinitive loop on MIN_INT
- this->operator+=(-by);
- return *this;
- }
- if(by==0)
- return *this;
- if(m_Index==StlSequence<S,V>::end_of_sequence)
- m_Index=m_UnoSequence->getLength();
- m_Index-=by;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator+(const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- StlSequenceIterator<S,V> result = StlSequenceIterator<S,V>(*this);
- result+=by;
- return result;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator-(const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- StlSequenceIterator<S,V> result = StlSequenceIterator<S,V>(*this);
- result-=by;
- return result;
- }
-
- template<typename S, typename V>
- inline typename StlSequenceIterator<S,V>::difference_type StlSequenceIterator<S, V>::operator-(const StlSequenceIterator<S,V>& to) const
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence ^ to.m_Index==StlSequence<S,V>::end_of_sequence)
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence)
- return m_UnoSequence->getLength()-to.m_Index;
- else
- return m_Index-m_UnoSequence->getLength();
- }
- return m_Index-to.m_Index;
- }
-
- template<typename S, typename V>
- inline bool StlSequenceIterator<S, V>::operator==(const StlSequenceIterator<S,V>& other) const
- {
- return (m_Index == other.m_Index);
- }
-
- template<typename S, typename V>
- inline bool StlSequenceIterator<S, V>::operator!=(const StlSequenceIterator<S,V>& other) const
- {
- return !this->operator==(other);
- }
-
- template<typename S, typename V>
- inline bool StlSequenceIterator<S, V>::operator<(const StlSequenceIterator<S,V>& other) const
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence ^ other.m_Index==StlSequence<S,V>::end_of_sequence)
- return other.m_Index==StlSequence<S,V>::end_of_sequence;
- return m_Index<other.m_Index;
- }
-
- template<typename S, typename V>
- inline typename StlSequenceIterator<S,V>::reference StlSequenceIterator<S, V>::operator[](const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- return (*(this->m_UnoSequence))[this->m_Index+by];
- }
-
- // StlSequence
- template<typename S, typename V>
- StlSequence<S,V>::StlSequence(S& uno_sequence)
- : m_UnoSequence(&uno_sequence)
- {}
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::size_type StlSequence<S,V>::size() const
- {
- return m_UnoSequence->getLength();
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::size_type StlSequence<S,V>::max_size() const
- {
- return this->size();
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::empty() const
- {
- return this->size() == 0;
- }
-
- template<typename S, typename V>
- inline void StlSequence<S,V>::swap(StlSequence<S,V>& other)
- {
- ::std::swap(*this, other);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::iterator StlSequence<S,V>::begin()
- {
- return typename StlSequence<S,V>::iterator(m_UnoSequence,
- size() ? begin_of_sequence : end_of_sequence);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::iterator StlSequence<S,V>::end()
- {
- return typename StlSequence<S,V>::iterator(m_UnoSequence, end_of_sequence);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::const_iterator StlSequence<S,V>::begin() const
- {
- return typename StlSequence<S,V>::const_iterator(m_UnoSequence,
- size() ? begin_of_sequence : end_of_sequence);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::const_iterator StlSequence<S,V>::end() const
- {
- return typename StlSequence<S,V>::const_iterator(m_UnoSequence, end_of_sequence);
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator==(const StlSequence<S,V>& other) const
- {
- if(this->size() != other.size()) return false;
- return ::std::equal(this->begin(), this->end(), other.begin());
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator<(const StlSequence<S,V>& other) const
- {
- return ::std::lexicographical_compare(this->begin(), this->end(), other.begin(), other.end());
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator!=(const StlSequence<S,V>& other) const
- { return !(*this == other); }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator>(const StlSequence<S,V>& other) const
- { return (other < *this); }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator<=(const StlSequence<S,V>& other) const
- { return !(other < *this); }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator>=(const StlSequence<S,V>& other) const
- { return !(*this < other); }
-
- template<typename S, typename V>
- const typename StlSequence<S,V>::size_type StlSequence<S,V>::begin_of_sequence = 0;
-
- template<typename S, typename V>
- const typename StlSequence<S,V>::size_type StlSequence<S,V>::end_of_sequence = -1;
-}}
-
namespace comphelper
{
/**
- @short a wrapper-class that provides stl-container-like access to an existing
- ::com::sun::star::uno::Sequence
- @descr This template class allows using an existing ::com::sun::star::uno::Sequence
- like any other stl container. It provides standard-compliant mutable random access
- iterators. Because random access iterators are the most generic iterators defined
- by the stl, any stl algorithm can be applied to the Sequence.
- <p>
- This is just a basic stl forward container, but _not_ an stl sequence (the size of the
- ::com::sun::star::uno::Sequence cannot be changed using the StlUnoSequence interface).
- Inserts are expensive operations on ::com::sun::star::uno::Sequence - use
- ::std::copy() to a efficient stl container implementing the stl sequence interface
- and the available insert iterator adapters you need those.
- <p>
- @attention There is one requirement of an stl container that this class does not meet:
- It is _not_ owner of its contents and thus it does not destroy its contents when destructed.
- @attention No additional boundschecking over the requirements of the STL are performed.
- E.g. sequence.begin()-- results in undefined behavior.
- @attention StlUnoSequence is not threadsafe.
- <p>
- Example: (creating a ::std::list from a ::com::sun::star::uno::Sequence)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq(10);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq(&uno_seq);
- ::std::list stl_list(stl_seq.begin(), stl_seq.end());
- </code>
- <p>
- Example: (sorting ::com::sun::star::uno::Sequence inplace)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq(10);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq(&uno_seq);
- ::std::sort(stl_seq.begin(), stl_seq.end());
- </code>
- <p>
- Example: (counting occurrences of 4711 in a ::com::sun::star::uno::Sequence)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq(10);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq(&uno_seq);
- sal_Int32 count = 0;
- ::std::count(stl_seq.begin(), stl_seq.end(), 4711, count);
- </code>
- <p>
- Example: (inserting the second half of one Sequence after the first element of another)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq1(10);
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq2(10);
- ::com::sun::star::uno::Sequence<sal_Int32> result(15);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq1(&uno_seq1);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq2(&uno_seq1);
- ::comphelper::StlUnoSequence<sal_Int32> stl_result(&result);
- ::std::list<sal_Int32> temp(uno_seq1.begin(), uno_seq1.end());
- ::std::copy(uno_seq2.begin()+5, uno_seq2.end(), ::std::insert_iterator< ::std::list<sal_Int32> >(temp, ++temp.begin()));
- ::std::copy(temp.begin(), temp.end(), result.begin());
- </code>
-
- @see http://www.sgi.com/tech/stl/Container.html
- @see http://www.sgi.com/tech/stl/Sequence.html
- @see http://www.sgi.com/tech/stl/RandomAccessIterator.html
+ @short stl-container-like access to an existing ::com::sun::star::uno::Sequence
+ @descr These template functions allows using an existing
+ ::com::sun::star::uno::Sequence using stl algorithms. They provides
+ standard-compliant mutable random access iterators. Because random access
+ iterators are the most generic iterators defined by the stl, any stl algorithm
+ can be applied to the Sequence (excluding algorithms requiring output
+ iterators).
+ <p>
+ Example: (creating a ::std::list from a ::com::sun::star::uno::Sequence)
+ <code>
+ ::com::sun::star::uno::Sequence<sal_Int32> aSeq(10);
+ ::std::list stl_list(stl_begin(aSeq), stl_end(aSeq));
+ </code>
+ <p>
+ Example: (sorting ::com::sun::star::uno::Sequence inplace)
+ <code>
+ ::com::sun::star::uno::Sequence<sal_Int32> aSeq(10);
+ ::std::sort(stl_begin(aSeq), stl_seq.end(aSeq));
+ </code>
+ <p>
+ Example: (counting occurrences of 4711 in a ::com::sun::star::uno::Sequence)
+ <code>
+ ::com::sun::star::uno::Sequence<sal_Int32> aSeq(10);
+ sal_Int32 count = 0;
+ ::std::count(stl_begin(aSeq), stl_end(aSeq), 4711, count);
+ </code>
+ <p>
+
+ @see http://www.sgi.com/tech/stl/Container.html
+ @see http://www.sgi.com/tech/stl/Sequence.html
+ @see http://www.sgi.com/tech/stl/RandomAccessIterator.html
*/
template <typename V>
- class StlUnoSequence : public stlunosequence::StlSequence< ::com::sun::star::uno::Sequence<V>, V>
- {
- public:
- /*
- @short named constructor (these are needed to keep const-correctness)
- */
- static StlUnoSequence<V> createInstance(::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>(uno_sequence); }
- /*
- @short named constructor (these are needed to keep const-correctness)
- */
- static const StlUnoSequence<V> createInstance(const ::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>(const_cast< ::com::sun::star::uno::Sequence<V>& >(uno_sequence)); }
- private:
- StlUnoSequence(::com::sun::star::uno::Sequence<V>& uno_sequence)
- : stlunosequence::StlSequence< ::com::sun::star::uno::Sequence<V>, V>(uno_sequence)
- {}
- };
-
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).begin()
- */
- template <typename V>
- typename StlUnoSequence<V>::iterator stl_begin(::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>::createInstance(uno_sequence).begin(); }
+ V* stl_begin(::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getArray(); }
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).end()
- */
template <typename V>
- typename StlUnoSequence<V>::iterator stl_end(::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>::createInstance(uno_sequence).end(); }
+ V* stl_end(::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getArray() + rSeq.getLength(); }
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).begin()
- */
template <typename V>
- typename StlUnoSequence<V>::const_iterator stl_begin(const ::com::sun::star::uno::Sequence<V>& uno_sequence)
- {
- return StlUnoSequence<V>::createInstance(uno_sequence).begin();
- }
+ const V* stl_begin(const ::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getConstArray(); }
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).end()
- */
template <typename V>
- typename StlUnoSequence<V>::const_iterator stl_end(const ::com::sun::star::uno::Sequence<V>& uno_sequence)
- {
- return StlUnoSequence<V>::createInstance(uno_sequence).end();
- }
+ const V* stl_end(const ::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getConstArray() + rSeq.getLength(); }
}
#endif
diff --git a/comphelper/source/misc/docpasswordhelper.cxx b/comphelper/source/misc/docpasswordhelper.cxx
new file mode 100644
index 000000000000..1f362c02f881
--- /dev/null
+++ b/comphelper/source/misc/docpasswordhelper.cxx
@@ -0,0 +1,152 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docpasswordhelper.cxx,v $
+ * $Revision: 1.1 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper/docpasswordhelper.hxx"
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include "comphelper/mediadescriptor.hxx"
+
+using ::rtl::OUString;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::UNO_SET_THROW;
+using ::com::sun::star::task::PasswordRequestMode;
+using ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER;
+using ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER;
+using ::com::sun::star::task::XInteractionHandler;
+using ::com::sun::star::task::XInteractionRequest;
+
+namespace comphelper {
+
+// ============================================================================
+
+IDocPasswordVerifier::~IDocPasswordVerifier()
+{
+}
+
+// ============================================================================
+
+/*static*/ OUString DocPasswordHelper::requestAndVerifyDocPassword(
+ IDocPasswordVerifier& rVerifier,
+ const OUString& rMediaPassword,
+ const Reference< XInteractionHandler >& rxInteractHandler,
+ const OUString& rDocumentName,
+ DocPasswordRequestType eRequestType,
+ const ::std::vector< OUString >* pDefaultPasswords,
+ bool* pbIsDefaultPassword )
+{
+ OUString aPassword;
+ DocPasswordVerifierResult eResult = DocPasswordVerifierResult_WRONG_PASSWORD;
+
+ // first, try provided default passwords
+ if( pbIsDefaultPassword )
+ *pbIsDefaultPassword = false;
+ if( pDefaultPasswords )
+ {
+ for( ::std::vector< OUString >::const_iterator aIt = pDefaultPasswords->begin(), aEnd = pDefaultPasswords->end(); (eResult == DocPasswordVerifierResult_WRONG_PASSWORD) && (aIt != aEnd); ++aIt )
+ {
+ aPassword = *aIt;
+ OSL_ENSURE( aPassword.getLength() > 0, "DocPasswordHelper::requestAndVerifyDocPassword - unexpected empty default password" );
+ if( aPassword.getLength() > 0 )
+ {
+ eResult = rVerifier.verifyPassword( aPassword );
+ if( pbIsDefaultPassword )
+ *pbIsDefaultPassword = eResult == DocPasswordVerifierResult_OK;
+ }
+ }
+ }
+
+ // try media password (skip, if result is OK or ABORT)
+ if( eResult == DocPasswordVerifierResult_WRONG_PASSWORD )
+ {
+ aPassword = rMediaPassword;
+ if( aPassword.getLength() > 0 )
+ eResult = rVerifier.verifyPassword( aPassword );
+ }
+
+ // request a password (skip, if result is OK or ABORT)
+ if( (eResult == DocPasswordVerifierResult_WRONG_PASSWORD) && rxInteractHandler.is() ) try
+ {
+ PasswordRequestMode eRequestMode = PasswordRequestMode_PASSWORD_ENTER;
+ while( eResult == DocPasswordVerifierResult_WRONG_PASSWORD )
+ {
+ DocPasswordRequest* pRequest = new DocPasswordRequest( eRequestType, eRequestMode, rDocumentName );
+ Reference< XInteractionRequest > xRequest( pRequest );
+ rxInteractHandler->handle( xRequest );
+ if( pRequest->isPassword() )
+ {
+ aPassword = pRequest->getPassword();
+ if( aPassword.getLength() > 0 )
+ eResult = rVerifier.verifyPassword( aPassword );
+ }
+ else
+ {
+ eResult = DocPasswordVerifierResult_ABORT;
+ }
+ eRequestMode = PasswordRequestMode_PASSWORD_REENTER;
+ }
+ }
+ catch( Exception& )
+ {
+ }
+
+ return (eResult == DocPasswordVerifierResult_OK) ? aPassword : OUString();
+}
+
+/*static*/ OUString DocPasswordHelper::requestAndVerifyDocPassword(
+ IDocPasswordVerifier& rVerifier,
+ MediaDescriptor& rMediaDesc,
+ DocPasswordRequestType eRequestType,
+ const ::std::vector< OUString >* pDefaultPasswords )
+{
+ OUString aMediaPassword = rMediaDesc.getUnpackedValueOrDefault(
+ MediaDescriptor::PROP_PASSWORD(), OUString() );
+ Reference< XInteractionHandler > xInteractHandler = rMediaDesc.getUnpackedValueOrDefault(
+ MediaDescriptor::PROP_INTERACTIONHANDLER(), Reference< XInteractionHandler >() );
+ OUString aDocumentName = rMediaDesc.getUnpackedValueOrDefault(
+ MediaDescriptor::PROP_URL(), OUString() );
+
+ bool bIsDefaultPassword = false;
+ OUString aPassword = requestAndVerifyDocPassword(
+ rVerifier, aMediaPassword, xInteractHandler, aDocumentName, eRequestType, pDefaultPasswords, &bIsDefaultPassword );
+
+ // insert valid password into media descriptor (but not a default password)
+ if( (aPassword.getLength() > 0) && !bIsDefaultPassword )
+ rMediaDesc[ MediaDescriptor::PROP_PASSWORD() ] <<= aPassword;
+
+ return aPassword;
+}
+
+// ============================================================================
+
+} // namespace comphelper
+
diff --git a/comphelper/source/misc/docpasswordrequest.cxx b/comphelper/source/misc/docpasswordrequest.cxx
new file mode 100644
index 000000000000..187642e10fe9
--- /dev/null
+++ b/comphelper/source/misc/docpasswordrequest.cxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docpasswordrequest.cxx,v $
+ * $Revision: 1.1 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper/docpasswordrequest.hxx"
+#include <com/sun/star/task/DocumentMSPasswordRequest.hpp>
+#include <com/sun/star/task/DocumentPasswordRequest.hpp>
+#include <com/sun/star/task/XInteractionAbort.hpp>
+#include <com/sun/star/task/XInteractionPassword.hpp>
+
+using ::rtl::OUString;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::RuntimeException;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::XInterface;
+using ::com::sun::star::task::InteractionClassification_QUERY;
+using ::com::sun::star::task::DocumentMSPasswordRequest;
+using ::com::sun::star::task::DocumentPasswordRequest;
+using ::com::sun::star::task::PasswordRequestMode;
+using ::com::sun::star::task::XInteractionAbort;
+using ::com::sun::star::task::XInteractionContinuation;
+using ::com::sun::star::task::XInteractionPassword;
+
+namespace comphelper {
+
+// ============================================================================
+
+class AbortContinuation : public ::cppu::WeakImplHelper1< XInteractionAbort >
+{
+public:
+ inline explicit AbortContinuation() : mbSelected( false ) {}
+
+ inline bool isSelected() const { return mbSelected; }
+ inline void reset() { mbSelected = false; }
+
+ virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = true; }
+
+private:
+ bool mbSelected;
+};
+
+// ============================================================================
+
+class PasswordContinuation : public ::cppu::WeakImplHelper1< XInteractionPassword >
+{
+public:
+ inline explicit PasswordContinuation() : mbSelected( false ) {}
+
+ inline bool isSelected() const { return mbSelected; }
+ inline void reset() { mbSelected = false; }
+
+ virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = true; }
+ virtual void SAL_CALL setPassword( const OUString& rPass ) throw( RuntimeException ) { maPassword = rPass; }
+ virtual OUString SAL_CALL getPassword() throw( RuntimeException ) { return maPassword; }
+
+private:
+ OUString maPassword;
+ bool mbSelected;
+};
+
+// ============================================================================
+
+DocPasswordRequest::DocPasswordRequest( DocPasswordRequestType eType,
+ PasswordRequestMode eMode, const OUString& rDocumentName )
+{
+ switch( eType )
+ {
+ case DocPasswordRequestType_STANDARD:
+ {
+ DocumentPasswordRequest aRequest( OUString(), Reference< XInterface >(),
+ InteractionClassification_QUERY, eMode, rDocumentName );
+ maRequest <<= aRequest;
+ }
+ break;
+ case DocPasswordRequestType_MS:
+ {
+ DocumentMSPasswordRequest aRequest( OUString(), Reference< XInterface >(),
+ InteractionClassification_QUERY, eMode, rDocumentName );
+ maRequest <<= aRequest;
+ }
+ break;
+ /* no 'default', so compilers will complain about missing
+ implementation of a new enum value. */
+ }
+
+ maContinuations.realloc( 2 );
+ maContinuations[ 0 ].set( mpAbort = new AbortContinuation );
+ maContinuations[ 1 ].set( mpPassword = new PasswordContinuation );
+}
+
+DocPasswordRequest::~DocPasswordRequest()
+{
+}
+
+bool DocPasswordRequest::isAbort() const
+{
+ return mpAbort->isSelected();
+}
+
+bool DocPasswordRequest::isPassword() const
+{
+ return mpPassword->isSelected();
+}
+
+OUString DocPasswordRequest::getPassword() const
+{
+ return mpPassword->getPassword();
+}
+
+Any SAL_CALL DocPasswordRequest::getRequest() throw( RuntimeException )
+{
+ return maRequest;
+}
+
+Sequence< Reference< XInteractionContinuation > > SAL_CALL DocPasswordRequest::getContinuations() throw( RuntimeException )
+{
+ return maContinuations;
+}
+
+// ============================================================================
+
+} // namespace comphelper
+
diff --git a/comphelper/source/misc/makefile.mk b/comphelper/source/misc/makefile.mk
index f50f57c47eb3..d0ffc368fd20 100644
--- a/comphelper/source/misc/makefile.mk
+++ b/comphelper/source/misc/makefile.mk
@@ -57,6 +57,8 @@ SLOFILES= \
$(SLO)$/componentcontext.obj \
$(SLO)$/componentmodule.obj \
$(SLO)$/configurationhelper.obj \
+ $(SLO)$/docpasswordhelper.obj \
+ $(SLO)$/docpasswordrequest.obj \
$(SLO)$/documentinfo.obj \
$(SLO)$/documentiologring.obj \
$(SLO)$/evtlistenerhlp.obj \
diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx
index 9f463cdf0380..44578f840da9 100644
--- a/comphelper/source/misc/mediadescriptor.cxx
+++ b/comphelper/source/misc/mediadescriptor.cxx
@@ -114,6 +114,12 @@ namespace css = ::com::sun::star;
/*-----------------------------------------------
10.03.2004 07:35
-----------------------------------------------*/
+const ::rtl::OUString& MediaDescriptor::PROP_ABORTED()
+{
+ static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("Aborted"));
+ return sProp;
+}
+
const ::rtl::OUString& MediaDescriptor::PROP_ASTEMPLATE()
{
static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("AsTemplate"));
@@ -126,6 +132,12 @@ const ::rtl::OUString& MediaDescriptor::PROP_CHARACTERSET()
return sProp;
}
+const ::rtl::OUString& MediaDescriptor::PROP_COMPONENTDATA()
+{
+ static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("ComponentData"));
+ return sProp;
+}
+
const ::rtl::OUString& MediaDescriptor::PROP_DEEPDETECTION()
{
static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("DeepDetection"));
diff --git a/comphelper/source/misc/uieventslogger.cxx b/comphelper/source/misc/uieventslogger.cxx
index a55d5b58854d..ae351340bc7a 100644
--- a/comphelper/source/misc/uieventslogger.cxx
+++ b/comphelper/source/misc/uieventslogger.cxx
@@ -218,11 +218,15 @@ namespace comphelper
// public UiEventsLogger interface
sal_Bool UiEventsLogger::isEnabled()
{
- try {
- UiEventsLogger_Impl::prepareMutex();
- Guard<Mutex> singleton_guard(UiEventsLogger_Impl::singleton_mutex);
- return UiEventsLogger_Impl::getInstance()->m_Active;
- } catch(...) { return false; } // never throws
+ if ( UiEventsLogger_Impl::getEnabledFromCfg() )
+ {
+ try {
+ UiEventsLogger_Impl::prepareMutex();
+ Guard<Mutex> singleton_guard(UiEventsLogger_Impl::singleton_mutex);
+ return UiEventsLogger_Impl::getInstance()->m_Active;
+ } catch(...) { return false; } // never throws
+ } // if ( )
+ return sal_False;
}
sal_Int32 UiEventsLogger::getSessionLogEventCount()
diff --git a/comphelper/source/property/genericpropertyset.cxx b/comphelper/source/property/genericpropertyset.cxx
index 08dd26dcf0ec..19911709860d 100644
--- a/comphelper/source/property/genericpropertyset.cxx
+++ b/comphelper/source/property/genericpropertyset.cxx
@@ -180,8 +180,7 @@ void GenericPropertySet::_setPropertyValues( const PropertyMapEntry** ppEntries,
aEvt.PropertyName = aPropertyName;
aEvt.NewValue = *pValues;
aGuard.clear();
- pHelper->forEach<XPropertyChangeListener>(
- ::boost::bind(&XPropertyChangeListener::propertyChange,_1,boost::cref(aEvt)));
+ pHelper->notifyEach( &XPropertyChangeListener::propertyChange, aEvt );
aGuard.reset();
}
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index 6269cfb11ef4..c6f9a295b332 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -83,6 +83,7 @@
#include <vcl/metric.hxx>
#include <vcl/graphictools.hxx>
#include <tools/poly.hxx>
+#include <i18npool/mslangid.hxx>
#include <implrenderer.hxx>
#include <tools.hxx>
@@ -956,6 +957,9 @@ namespace cppcanvas
rParms.mrParms.maFontLetterForm.getValue() :
(rFont.GetItalic() == ITALIC_NONE) ? 0 : 9;
+ LanguageType aLang = rFont.GetLanguage();
+ aFontRequest.Locale = MsLangId::convertLanguageToLocale(aLang, false);
+
// setup state-local text transformation,
// if the font be rotated
const short nFontAngle( rFont.GetOrientation() );
diff --git a/cppcanvas/util/makefile.mk b/cppcanvas/util/makefile.mk
index a5ac026e262c..4d0ff2a8dc55 100644
--- a/cppcanvas/util/makefile.mk
+++ b/cppcanvas/util/makefile.mk
@@ -50,7 +50,7 @@ LIB1FILES=\
SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
SHL1IMPLIB= i$(TARGET)
-SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB)
+SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(I18NISOLANGLIB)
.IF "$(debug)$(dbgutil)"!=""
SHL1STDLIBS += $(CPPUHELPERLIB)
diff --git a/dtrans/prj/build.lst b/dtrans/prj/build.lst
index 95d697d6ebd3..bd9c73582361 100644
--- a/dtrans/prj/build.lst
+++ b/dtrans/prj/build.lst
@@ -10,8 +10,6 @@ dr dtrans\source\win32\dnd nmake - w dr_win32_dnd dr_cnttype dr_win32_misc.w
dr dtrans\source\win32\dtobj nmake - w dr_win32_dtobj dr_win32_clipb.w dr_win32_misc.w dr_win32_ftransl.w dr_inc NULL
dr dtrans\source\os2\clipb nmake - p dr_os2_clipb dr_inc NULL
dr dtrans\util nmake - all dr_util dr_cnttype dr_win32_misc.w dr_win32_mtaole.w dr_win32_ftransl.w dr_win32_clipb.w dr_win32_dnd.w dr_win32_dtobj.w dr_inc NULL
-dr dtrans\source\X11 nmake - u dr_X11 dr_inc NULL
-dr dtrans\source\aqua nmake - u dr_aqua dr_inc NULL
dr dtrans\source\generic nmake - all dr_generic dr_inc NULL
diff --git a/dtrans/prj/d.lst b/dtrans/prj/d.lst
index bfa7e3b86d6d..a1a7c2e95480 100644
--- a/dtrans/prj/d.lst
+++ b/dtrans/prj/d.lst
@@ -5,6 +5,5 @@
..\source\win32\clipb\sysdtrans.xml %_DEST%\xml%_EXT%\sysdtrans.xml
..\source\win32\dnd\dnd.xml %_DEST%\xml%_EXT%\dnd.xml
..\source\win32\ftransl\ftransl.xml %_DEST%\xml%_EXT%\ftransl.xml
-..\source\X11\dtransX11.xml %_DEST%\xml%_EXT%\dtransX11.xml
..\source\cnttype\mcnttype.xml %_DEST%\xml%_EXT%\mcnttype.xml
..\source\generic\dtrans.xml %_DEST%\xml%_EXT%\dtrans.xml
diff --git a/dtrans/source/X11/X11_service.cxx b/dtrans/source/X11/X11_service.cxx
deleted file mode 100644
index b288d74a0513..000000000000
--- a/dtrans/source/X11/X11_service.cxx
+++ /dev/null
@@ -1,303 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: X11_service.cxx,v $
- * $Revision: 1.11 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
-
-#include <X11_clipboard.hxx>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <uno/dispatcher.h> // declaration of generic uno interface
-#include <uno/mapping.hxx> // mapping stuff
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/compbase1.hxx>
-
-using namespace rtl;
-using namespace cppu;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::datatransfer::clipboard;
-using namespace com::sun::star::awt;
-using namespace x11;
-
-namespace x11 {
-
-class X11ClipboardFactory : public ::cppu::WeakComponentImplHelper1 <
- ::com::sun::star::lang::XSingleServiceFactory
->
-{
- ::osl::Mutex m_aMutex;
- ::std::hash_map< OUString, ::std::hash_map< Atom, Reference< XClipboard > >, ::rtl::OUStringHash > m_aInstances;
-public:
- X11ClipboardFactory();
- virtual ~X11ClipboardFactory();
-
- /*
- * XSingleServiceFactory
- */
- virtual Reference< XInterface > createInstance() throw();
- virtual Reference< XInterface > createInstanceWithArguments( const Sequence< Any >& rArgs ) throw();
-};
-
-// ------------------------------------------------------------------------
-
-X11ClipboardFactory::X11ClipboardFactory() :
- ::cppu::WeakComponentImplHelper1<
- ::com::sun::star::lang::XSingleServiceFactory
->( m_aMutex )
-{
-}
-
-// ------------------------------------------------------------------------
-
-X11ClipboardFactory::~X11ClipboardFactory()
-{
-}
-
-// ------------------------------------------------------------------------
-
-Reference< XInterface > X11ClipboardFactory::createInstance() throw()
-{
- return createInstanceWithArguments( Sequence< Any >() );
-}
-
-// ------------------------------------------------------------------------
-
-Reference< XInterface > X11ClipboardFactory::createInstanceWithArguments( const Sequence< Any >& arguments ) throw()
-{
- OUString aDisplayName;
- Atom nSelection;
-
- // extract display name from connection argument. An exception is thrown
- // by SelectionManager.initialize() if no display connection is given.
- if( arguments.getLength() > 0 )
- {
- Reference< XDisplayConnection > xConn;
- arguments.getConstArray()[0] >>= xConn;
-
- if( xConn.is() )
- {
- Any aIdentifier = xConn->getIdentifier();
- aIdentifier >>= aDisplayName;
- }
- }
-
- SelectionManager& rManager = SelectionManager::get( aDisplayName );
- rManager.initialize( arguments );
-
- // check if any other selection than clipboard selection is specified
- if( arguments.getLength() > 1 )
- {
- OUString aSelectionName;
-
- arguments.getConstArray()[1] >>= aSelectionName;
- nSelection = rManager.getAtom( aSelectionName );
- }
- else
- {
- // default atom is clipboard selection
- nSelection = rManager.getAtom( OUString::createFromAscii( "CLIPBOARD" ) );
- }
-
- ::std::hash_map< Atom, Reference< XClipboard > >& rMap( m_aInstances[ aDisplayName ] );
- ::std::hash_map< Atom, Reference< XClipboard > >::iterator it = rMap.find( nSelection );
- if( it != rMap.end() )
- return it->second;
-
- X11Clipboard* pClipboard = new X11Clipboard( rManager, nSelection );
- rMap[ nSelection ] = pClipboard;
-
- return static_cast<OWeakObject*>(pClipboard);
-}
-
-// ------------------------------------------------------------------------
-
-Sequence< OUString > SAL_CALL X11Clipboard_getSupportedServiceNames()
-{
- Sequence< OUString > aRet(1);
- aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard");
- return aRet;
-}
-
-// ------------------------------------------------------------------------
-
-Sequence< OUString > SAL_CALL Xdnd_getSupportedServiceNames()
-{
- Sequence< OUString > aRet(1);
- aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.dnd.X11DragSource");
- return aRet;
-}
-
-// ------------------------------------------------------------------------
-
-Reference< XInterface > SAL_CALL Xdnd_createInstance(
- const Reference< XMultiServiceFactory > & )
-{
- return Reference < XInterface >( ( OWeakObject * ) new SelectionManagerHolder() );
-}
-
-// ------------------------------------------------------------------------
-
-Sequence< OUString > SAL_CALL Xdnd_dropTarget_getSupportedServiceNames()
-{
- Sequence< OUString > aRet(1);
- aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.dnd.X11DropTarget");
- return aRet;
-}
-
-// ------------------------------------------------------------------------
-
-Reference< XInterface > SAL_CALL Xdnd_dropTarget_createInstance(
- const Reference< XMultiServiceFactory > & )
-{
- return Reference < XInterface >( ( OWeakObject * ) new DropTarget() );
-}
-
-}
-
-static const OUString& getClipboardImplementationName()
-{
- static OUString aImpl = OUString::createFromAscii(X11_CLIPBOARD_IMPLEMENTATION_NAME);
- return aImpl;
-}
-
-static const OUString& getClipboardServiceName()
-{
- static OUString aImpl = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard" );
- return aImpl;
-}
-
-static const OUString& getXdndImplementationName()
-{
- static OUString aImpl = OUString::createFromAscii(XDND_IMPLEMENTATION_NAME );
- return aImpl;
-}
-
-static const OUString& getXdndServiceName()
-{
- static OUString aImpl = OUString::createFromAscii("com.sun.star.datatransfer.dnd.X11DragSource" );
- return aImpl;
-}
-
-static const OUString& getXdndDropTargetImplementationName()
-{
- static OUString aImpl = OUString::createFromAscii(XDND_DROPTARGET_IMPLEMENTATION_NAME);
- return aImpl;
-}
-
-static const OUString& getXdndDropTargetServiceName()
-{
- static OUString aImpl = OUString::createFromAscii("com.sun.star.datatransfer.dnd.X11DropTarget" );
- return aImpl;
-}
-
-extern "C" {
- void SAL_CALL component_getImplementationEnvironment(
- const sal_Char** ppEnvTypeName,
- uno_Environment** )
- {
- *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
- }
-
- sal_Bool SAL_CALL component_writeInfo( void*, void* pXUnoKey )
- {
- if( pXUnoKey )
- {
- try
- {
- Reference< ::com::sun::star::registry::XRegistryKey > xKey( reinterpret_cast< ::com::sun::star::registry::XRegistryKey* >( pXUnoKey ) );
-
- OUString aImplName = OUString::createFromAscii( "/" );
- aImplName += getClipboardImplementationName();
- aImplName += ::rtl::OUString::createFromAscii( "/UNO/SERVICES/" );
- aImplName += getClipboardServiceName();
- xKey->createKey( aImplName );
-
- aImplName = OUString::createFromAscii( "/" );
- aImplName += getXdndImplementationName();
- aImplName += ::rtl::OUString::createFromAscii( "/UNO/SERVICES/" );
- aImplName += getXdndServiceName();
- xKey->createKey( aImplName );
-
- aImplName = OUString::createFromAscii( "/" );
- aImplName += getXdndDropTargetImplementationName();
- aImplName += ::rtl::OUString::createFromAscii( "/UNO/SERVICES/" );
- aImplName += getXdndDropTargetServiceName();
- xKey->createKey( aImplName );
-
- return sal_True;
- }
- catch( ::com::sun::star::registry::InvalidRegistryException& )
- {
- }
- }
- return sal_False;
- }
-
- void* SAL_CALL component_getFactory(
- const sal_Char* pImplementationName,
- void* pXUnoSMgr,
- void*
- )
- {
- void* pRet = 0;
-
- ::rtl::OUString aImplName( ::rtl::OUString::createFromAscii( pImplementationName ) );
-
- if( pXUnoSMgr )
- {
- Reference< ::com::sun::star::lang::XMultiServiceFactory > xMgr(
- reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pXUnoSMgr )
- );
- Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory;
- if( aImplName.equals( getClipboardImplementationName() ) )
- xFactory = new X11ClipboardFactory();
- else if( aImplName.equals( getXdndImplementationName() ) )
- {
- xFactory = ::cppu::createSingleFactory(
- xMgr, aImplName, Xdnd_createInstance,
- Xdnd_getSupportedServiceNames() );
- }
- else if( aImplName.equals( getXdndDropTargetImplementationName() ) )
- {
- xFactory = ::cppu::createSingleFactory(
- xMgr, aImplName, Xdnd_dropTarget_createInstance,
- Xdnd_dropTarget_getSupportedServiceNames() );
- }
- if( xFactory.is() )
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
- }
- return pRet;
- }
-
-} /* extern "C" */
diff --git a/dtrans/source/X11/dtransX11.xml b/dtrans/source/X11/dtransX11.xml
deleted file mode 100644
index 77994d5287b5..000000000000
--- a/dtrans/source/X11/dtransX11.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> dtransX11 </module-name>
- <component-description>
- <author> Tino Rachui </author>
- <name> com.sun.star.comp.datatransfer.X11 </name>
- <description>
- The X11 implementation of the datatransfer service.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="beta"/>
- <supported-service> com.sun.star.datatransfer.clipboard.SystemClipboard </supported-service>
- <supported-service> com.sun.star.datatransfer.dnd.X11DragSource </supported-service>
- <supported-service> com.sun.star.datatransfer.dnd.X11DropTarget </supported-service>
- <service-dependency> ... </service-dependency>
- <type> com.sun.star.datatransfer.clipboard.XClipboardEx </type>
- <type> com.sun.star.datatransfer.XTransferable </type>
- <type> com.sun.star.datatransfer.clipboard.RenderingCapabilities </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardOwner </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardListener </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardNotifier </type>
- <type> com.sun.star.datatransfer.dnd.XDropTargetDropContext </type>
- <type> com.sun.star.datatransfer.dnd.XDropTargetDragContext </type>
- <type> com.sun.star.datatransfer.dnd.XDropTarget </type>
- <type> com.sun.star.datatransfer.dnd.DNDConstants </type>
- <type> com.sun.star.datatransfer.dnd.XDragSource </type>
- <type> com.sun.star.datatransfer.dnd.XDragSourceContext </type>
- <type> com.sun.star.awt.XDisplayConnection </type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.container.XSet </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper </runtime-module-dependency>
- <runtime-module-dependency> cppu2 </runtime-module-dependency>
- <runtime-module-dependency> sal2 </runtime-module-dependency>
-</module-description>
diff --git a/dtrans/source/X11/exports.map b/dtrans/source/X11/exports.map
deleted file mode 100644
index 7c56baa9bd73..000000000000
--- a/dtrans/source/X11/exports.map
+++ /dev/null
@@ -1,10 +0,0 @@
-UDK_3_0_0 {
- global:
- GetVersionInfo;
- component_getImplementationEnvironment;
- component_getFactory;
- component_writeInfo;
-
- local:
- *;
-};
diff --git a/dtrans/source/aqua/dtransaqua.xml b/dtrans/source/aqua/dtransaqua.xml
deleted file mode 100644
index 2a901134bf19..000000000000
--- a/dtrans/source/aqua/dtransaqua.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> dtransaqua </module-name>
- <component-description>
- <author> Tino Rachui </author>
- <name> com.sun.star.comp.datatransfer.aqua </name>
- <description>
- The aqua implementation of the datatransfer service.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="beta"/>
- <supported-service> com.sun.star.datatransfer.clipboard.SystemClipboard </supported-service>
- <service-dependency> ... </service-dependency>
- <type> com.sun.star.datatransfer.clipboard.XClipboardEx </type>
- <type> com.sun.star.datatransfer.XTransferable </type>
- <type> com.sun.star.datatransfer.clipboard.RenderingCapabilities </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardOwner </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardListener </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardNotifier </type>
- <type> com.sun.star.datatransfer.dnd.XDropTargetDropContext </type>
- <type> com.sun.star.datatransfer.dnd.XDropTargetDragContext </type>
- <type> com.sun.star.datatransfer.dnd.XDropTarget </type>
- <type> com.sun.star.datatransfer.dnd.DNDConstants </type>
- <type> com.sun.star.datatransfer.dnd.XDragSource </type>
- <type> com.sun.star.datatransfer.dnd.XDragSourceContext </type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.container.XSet </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper </runtime-module-dependency>
- <runtime-module-dependency> cppu2 </runtime-module-dependency>
- <runtime-module-dependency> sal2 </runtime-module-dependency>
-</module-description>
diff --git a/dtrans/source/aqua/service_entry.cxx b/dtrans/source/aqua/service_entry.cxx
deleted file mode 100644
index 66f133e74dbe..000000000000
--- a/dtrans/source/aqua/service_entry.cxx
+++ /dev/null
@@ -1,210 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: service_entry.cxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
-
-#include "DragSource.hxx"
-#include "DropTarget.hxx"
-#include "aqua_clipboard.hxx"
-#include <com/sun/star/lang/XSingleComponentFactory.hpp>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/compbase1.hxx>
-#include <osl/diagnose.h>
-
-#include "cppuhelper/implementationentry.hxx"
-
-using namespace ::osl;
-using namespace ::rtl;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::registry;
-using namespace ::cppu;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::datatransfer::clipboard;
-
-
-rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-
-extern rtl::OUString dragSource_getImplementationName();
-extern com::sun::star::uno::Sequence<rtl::OUString> dragSource_getSupportedServiceNames();
-extern rtl::OUString dropTarget_getImplementationName();
-extern com::sun::star::uno::Sequence<rtl::OUString> dropTarget_getSupportedServiceNames();
-extern rtl::OUString clipboard_getImplementationName();
-extern com::sun::star::uno::Sequence<rtl::OUString> clipboard_getSupportedServiceNames();
-
-
-Reference<XInterface> SAL_CALL createDragSource(const Reference<XComponentContext>& rComponentContext);
-Reference<XInterface> SAL_CALL createDropTarget(const Reference<XComponentContext>& rComponentContext);
-Reference<XInterface> SAL_CALL createClipboard(const Reference<XComponentContext>& rComponentContext);
-
-
-cppu::ImplementationEntry entries[] = {
- { createDragSource,
- dragSource_getImplementationName,
- dragSource_getSupportedServiceNames,
- cppu::createSingleComponentFactory, 0, 0 },
- { createDropTarget,
- dropTarget_getImplementationName,
- dropTarget_getSupportedServiceNames,
- cppu::createSingleComponentFactory, 0, 0 },
- { createClipboard,
- clipboard_getImplementationName,
- clipboard_getSupportedServiceNames,
- cppu::createSingleComponentFactory, 0, 0 },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-
-class AquaClipboardFactory : public WeakComponentImplHelper1<XSingleComponentFactory>
-{
-public:
- AquaClipboardFactory();
- virtual ~AquaClipboardFactory();
-
- /*
- * XSingleComponentFactory
- */
- virtual Reference<XInterface> createInstanceWithContext(const Reference<XComponentContext>& Context)
- throw (Exception);
-
- virtual Reference<XInterface> createInstanceWithArgumentsAndContext(const Sequence<Any>& rArgs,
- const Reference<XComponentContext>& Context)
- throw(Exception);
-
- private:
- static Mutex m_aMutex;
- static Reference<XInterface> mSingleInstance;
-};
-
-Reference<XInterface> AquaClipboardFactory::mSingleInstance;
-Mutex AquaClipboardFactory::m_aMutex;
-
-// ------------------------------------------------------------------------
-
-AquaClipboardFactory::AquaClipboardFactory() :
- WeakComponentImplHelper1<XSingleComponentFactory>(m_aMutex)
-{
-}
-
-// ------------------------------------------------------------------------
-
-AquaClipboardFactory::~AquaClipboardFactory()
-{
-}
-
-// ------------------------------------------------------------------------
-
-Reference<XInterface> AquaClipboardFactory::createInstanceWithContext(const Reference<XComponentContext>& Context) throw(Exception)
-{
- return createInstanceWithArgumentsAndContext(Sequence<Any>(), Context);
-}
-
-// ------------------------------------------------------------------------
-
-Reference< XInterface > AquaClipboardFactory::createInstanceWithArgumentsAndContext(const Sequence<Any>& arguments,
- const Reference<XComponentContext>& Context) throw(Exception)
-{
- MutexGuard aGuard(m_aMutex);
-
- if (!mSingleInstance.is())
- {
- AquaClipboardFactory::mSingleInstance = createClipboard(Context);
- }
-
- return AquaClipboardFactory::mSingleInstance;
-}
-
-
-Reference<XInterface> SAL_CALL createDragSource( const Reference< XComponentContext >& rComponentContext)
-{
- return Reference<XInterface>(static_cast< XInitialization* >(new DragSource(rComponentContext)), UNO_QUERY);
-}
-
-Reference<XInterface> SAL_CALL createDropTarget( const Reference< XComponentContext >& rComponentContext)
-{
- return Reference<XInterface>(static_cast< XInitialization* >(new DropTarget(rComponentContext)), UNO_QUERY);
-}
-
-Reference< XInterface > SAL_CALL createClipboard( const Reference< XComponentContext >& rComponentContext)
-{
- return Reference<XInterface>(static_cast< XClipboard* >(new AquaClipboard(rComponentContext)), UNO_QUERY);
-}
-
-
-extern "C" sal_Bool SAL_CALL component_writeInfo(
- void * serviceManager, void * registryKey)
-{
- return cppu::component_writeInfoHelper(
- serviceManager, registryKey, entries);
-}
-
-
-extern "C" void * SAL_CALL component_getFactory(
- char const * implName, void * serviceManager, void * registryKey)
-{
- void* pRet = NULL;
- OUString iName = OUString::createFromAscii(implName);
- Reference<XSingleComponentFactory> xFac;
-
- if (iName.equalsIgnoreAsciiCase(clipboard_getImplementationName()))
- {
- xFac = new AquaClipboardFactory();
- }
- else
- {
- return component_getFactoryHelper(implName,
- serviceManager,
- registryKey,
- entries);
- }
-
- if (xFac.is())
- {
- xFac->acquire();
- pRet = xFac.get();
- }
-
- return pRet;
-}
-
-
-extern "C" void SAL_CALL component_getImplementationEnvironment(
- char const ** envTypeName, uno_Environment **)
-{
- *envTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
-}
-
-
-extern "C" sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount , pTime );
-}
-
diff --git a/dtrans/source/generic/makefile.mk b/dtrans/source/generic/makefile.mk
index 21076595d208..aa856865a3a8 100644
--- a/dtrans/source/generic/makefile.mk
+++ b/dtrans/source/generic/makefile.mk
@@ -40,7 +40,7 @@ COMP1TYPELIST=dtrans
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
-
+.IF "$(L10N_framework)"==""
# ------------------------------------------------------------------
SLOFILES= \
@@ -66,5 +66,6 @@ DEF1NAME= $(SHL1TARGET)
DEF1EXPORTFILE= exports.dxp
# --- Targets ------------------------------------------------------
+.ENDIF # L10N_framework
.INCLUDE : target.mk
diff --git a/dtrans/util/makefile.mk b/dtrans/util/makefile.mk
index 416ef7286aee..2e9666137619 100644
--- a/dtrans/util/makefile.mk
+++ b/dtrans/util/makefile.mk
@@ -41,7 +41,7 @@ TARGET4=dnd
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
-
+.IF "$(L10N_framework)"==""
# --- mcnttype dynlib ----------------------------------------------
@@ -180,6 +180,7 @@ DEF3NAME= $(SHL3TARGET)
DEF3EXPORTFILE= exports.dxp
.ENDIF # "$(GUI)"=="OS2"
+.ENDIF # L10N_framework
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/egif/makefile.mk b/goodies/source/filter.vcl/egif/makefile.mk
index 55165533580c..418af69c7bf8 100644
--- a/goodies/source/filter.vcl/egif/makefile.mk
+++ b/goodies/source/filter.vcl/egif/makefile.mk
@@ -49,17 +49,18 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES = dlgegif.src \
egifstr.src
-
+.IF "$(L10N_framework)"==""
SLOFILES= $(SLO)$/egif.obj \
$(SLO)$/dlgegif.obj \
$(SLO)$/giflzwc.obj
-
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET2)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
+.IF "$(L10N_framework)"==""
SHL1TARGET= egi$(DLLPOSTFIX)
SHL1IMPLIB= egif
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(CPPULIB) $(SVTOOLLIB) $(SALLIB)
@@ -75,7 +76,7 @@ SHL1OBJS= $(SLO)$/egif.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/eos2met/makefile.mk b/goodies/source/filter.vcl/eos2met/makefile.mk
index 1d6725e5e902..05f2f032e342 100644
--- a/goodies/source/filter.vcl/eos2met/makefile.mk
+++ b/goodies/source/filter.vcl/eos2met/makefile.mk
@@ -49,15 +49,15 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES= dlgeos2.src \
eos2mstr.src
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/eos2met.obj \
$(SLO)$/dlgeos2.obj
-
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET2)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
-
+.IF "$(L10N_framework)"==""
SHL1TARGET= eme$(DLLPOSTFIX)
SHL1IMPLIB= eos2met
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(SVTOOLLIB) $(CPPULIB) $(SALLIB)
@@ -72,7 +72,7 @@ SHL1OBJS= $(SLO)$/eos2met.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/epbm/makefile.mk b/goodies/source/filter.vcl/epbm/makefile.mk
index e70256c893e1..f4411d04e0fd 100644
--- a/goodies/source/filter.vcl/epbm/makefile.mk
+++ b/goodies/source/filter.vcl/epbm/makefile.mk
@@ -49,15 +49,15 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES= dlgepbm.src \
epbmstr.src
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/epbm.obj \
$(SLO)$/dlgepbm.obj
-
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET2)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
-
+.IF "$(L10N_framework)"==""
SHL1TARGET= epb$(DLLPOSTFIX)
SHL1IMPLIB= epbm
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(CPPULIB) $(SVTOOLLIB) $(SALLIB)
@@ -73,7 +73,7 @@ SHL1OBJS= $(SLO)$/epbm.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/epgm/makefile.mk b/goodies/source/filter.vcl/epgm/makefile.mk
index b4ff18588263..579ee6858a78 100644
--- a/goodies/source/filter.vcl/epgm/makefile.mk
+++ b/goodies/source/filter.vcl/epgm/makefile.mk
@@ -50,15 +50,15 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES= dlgepgm.src \
epgmstr.src
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/epgm.obj \
$(SLO)$/dlgepgm.obj
-
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET2)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
-
+.IF "$(L10N_framework)"==""
SHL1TARGET= epg$(DLLPOSTFIX)
SHL1IMPLIB= epgm
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(CPPULIB) $(SVTOOLLIB) $(SALLIB)
@@ -74,7 +74,7 @@ SHL1OBJS= $(SLO)$/epgm.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/epict/makefile.mk b/goodies/source/filter.vcl/epict/makefile.mk
index 33af96f1fb85..4aa4bab80ffc 100644
--- a/goodies/source/filter.vcl/epict/makefile.mk
+++ b/goodies/source/filter.vcl/epict/makefile.mk
@@ -50,15 +50,15 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES = dlgepct.src \
epictstr.src
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/epict.obj \
$(SLO)$/dlgepct.obj
-
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET2)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
-
+.IF "$(L10N_framework)"==""
SHL1TARGET= ept$(DLLPOSTFIX)
SHL1IMPLIB= epict
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(SVTOOLLIB) $(CPPULIB) $(SALLIB)
@@ -74,7 +74,7 @@ SHL1OBJS= $(SLO)$/epict.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/eppm/makefile.mk b/goodies/source/filter.vcl/eppm/makefile.mk
index 8ac83d7f1c8d..b40f9d897b8a 100644
--- a/goodies/source/filter.vcl/eppm/makefile.mk
+++ b/goodies/source/filter.vcl/eppm/makefile.mk
@@ -49,15 +49,15 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES= dlgeppm.src \
eppmstr.src
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/eppm.obj \
$(SLO)$/dlgeppm.obj
-
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET2)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
-
+.IF "$(L10N_framework)"==""
SHL1TARGET= epp$(DLLPOSTFIX)
SHL1IMPLIB= eppm
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(CPPULIB) $(SVTOOLLIB) $(SALLIB)
@@ -73,6 +73,7 @@ SHL1OBJS= $(SLO)$/eppm.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/eps/makefile.mk b/goodies/source/filter.vcl/eps/makefile.mk
index 59b63477531d..c5599344725a 100644
--- a/goodies/source/filter.vcl/eps/makefile.mk
+++ b/goodies/source/filter.vcl/eps/makefile.mk
@@ -50,16 +50,17 @@ CDEFS+= -DEDITDEBUG
SRS1NAME=$(TARGET)
SRC1FILES = dlgeps.src \
epsstr.src
-
+.IF "$(L10N_framework)"==""
EXCEPTIONSFILES=$(SLO)$/eps.obj
SLOFILES = $(SLO)$/eps.obj \
$(SLO)$/dlgeps.obj
+.ENDIF
# ==========================================================================
RESLIB1NAME=$(TARGET)
RESLIB1SRSFILES=$(SRS)$/$(TARGET).srs
-
+.IF "$(L10N_framework)"==""
SHL1TARGET= eps$(DLLPOSTFIX)
SHL1IMPLIB= eps
SHL1STDLIBS= $(TOOLSLIB) $(VCLLIB) $(VCLLIB) $(SVTOOLLIB) $(CPPULIB) $(SALLIB)
@@ -75,6 +76,7 @@ SHL1OBJS= $(SLO)$/eps.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/eras/makefile.mk b/goodies/source/filter.vcl/eras/makefile.mk
index ae68c4a4ded6..e6aeaeefb223 100644
--- a/goodies/source/filter.vcl/eras/makefile.mk
+++ b/goodies/source/filter.vcl/eras/makefile.mk
@@ -40,7 +40,7 @@ DEPTARGET=veras
.INCLUDE : settings.mk
# --- Allgemein ----------------------------------------------------------
-
+.IF "$(L10N_framework)"==""
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
@@ -63,6 +63,7 @@ SHL1OBJS= $(SLO)$/eras.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/etiff/makefile.mk b/goodies/source/filter.vcl/etiff/makefile.mk
index 69b958fc3598..70902012ce23 100644
--- a/goodies/source/filter.vcl/etiff/makefile.mk
+++ b/goodies/source/filter.vcl/etiff/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vetiff
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/etiff.obj
# ==========================================================================
@@ -63,7 +63,7 @@ SHL1OBJS= $(SLO)$/etiff.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/expm/makefile.mk b/goodies/source/filter.vcl/expm/makefile.mk
index a4093415be76..e123220feff8 100644
--- a/goodies/source/filter.vcl/expm/makefile.mk
+++ b/goodies/source/filter.vcl/expm/makefile.mk
@@ -45,7 +45,7 @@ DEPTARGET=vexpm
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/expm.obj
# ==========================================================================
@@ -64,7 +64,7 @@ SHL1OBJS= $(SLO)$/expm.obj
SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/icgm/makefile.mk b/goodies/source/filter.vcl/icgm/makefile.mk
index 0d97b3a144ef..ee62bbfb051c 100644
--- a/goodies/source/filter.vcl/icgm/makefile.mk
+++ b/goodies/source/filter.vcl/icgm/makefile.mk
@@ -39,7 +39,7 @@ ENABLE_EXCEPTIONS=TRUE
.INCLUDE : settings.mk
# --- Files --------------------------------------------------------
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/cgm.obj \
$(SLO)$/chart.obj \
$(SLO)$/class0.obj \
@@ -76,6 +76,7 @@ SHL1STDLIBS = \
$(TOOLSLIB) \
$(CPPULIB) \
$(SALLIB)
+.ENDIF
# --- Targets --------------------------------------------------------------
diff --git a/goodies/source/filter.vcl/idxf/makefile.mk b/goodies/source/filter.vcl/idxf/makefile.mk
index dbbcc83cec45..081022cd4e5b 100644
--- a/goodies/source/filter.vcl/idxf/makefile.mk
+++ b/goodies/source/filter.vcl/idxf/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vidxf
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
EXCEPTIONSFILES=\
$(SLO)$/dxfentrd.obj \
$(SLO)$/dxf2mtf.obj
@@ -76,6 +76,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/ieps/makefile.mk b/goodies/source/filter.vcl/ieps/makefile.mk
index b1e38231a3ff..673cce72744c 100644
--- a/goodies/source/filter.vcl/ieps/makefile.mk
+++ b/goodies/source/filter.vcl/ieps/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vieps
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ieps.obj
# ==========================================================================
@@ -64,7 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/ios2met/makefile.mk b/goodies/source/filter.vcl/ios2met/makefile.mk
index 0cb3e762f06f..c987476316c6 100644
--- a/goodies/source/filter.vcl/ios2met/makefile.mk
+++ b/goodies/source/filter.vcl/ios2met/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vios2met
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ios2met.obj
# ==========================================================================
@@ -65,7 +65,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
-
+.ENDIF
# ==========================================================================
.INCLUDE : target.mk
diff --git a/goodies/source/filter.vcl/ipbm/makefile.mk b/goodies/source/filter.vcl/ipbm/makefile.mk
index 1ef6fe0fd33b..84a9815a4974 100644
--- a/goodies/source/filter.vcl/ipbm/makefile.mk
+++ b/goodies/source/filter.vcl/ipbm/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vipbm
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ipbm.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/ipcd/makefile.mk b/goodies/source/filter.vcl/ipcd/makefile.mk
index c125d88e4bf9..7782b7b8e627 100644
--- a/goodies/source/filter.vcl/ipcd/makefile.mk
+++ b/goodies/source/filter.vcl/ipcd/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vipcd
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ipcd.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/ipcx/makefile.mk b/goodies/source/filter.vcl/ipcx/makefile.mk
index 796f16daaff8..7f0f309ae786 100644
--- a/goodies/source/filter.vcl/ipcx/makefile.mk
+++ b/goodies/source/filter.vcl/ipcx/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vipcx
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ipcx.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/ipict/makefile.mk b/goodies/source/filter.vcl/ipict/makefile.mk
index 56c158316ad7..2d84bffe3c36 100644
--- a/goodies/source/filter.vcl/ipict/makefile.mk
+++ b/goodies/source/filter.vcl/ipict/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vipict
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ipict.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/ipsd/makefile.mk b/goodies/source/filter.vcl/ipsd/makefile.mk
index 933827b88ef4..cd29c94f8074 100644
--- a/goodies/source/filter.vcl/ipsd/makefile.mk
+++ b/goodies/source/filter.vcl/ipsd/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vipsd
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/ipsd.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/iras/makefile.mk b/goodies/source/filter.vcl/iras/makefile.mk
index 1a4190a6e180..28b84c8401ef 100644
--- a/goodies/source/filter.vcl/iras/makefile.mk
+++ b/goodies/source/filter.vcl/iras/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=viras
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/iras.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/itga/makefile.mk b/goodies/source/filter.vcl/itga/makefile.mk
index 980b155a5210..a9dfe2e77643 100644
--- a/goodies/source/filter.vcl/itga/makefile.mk
+++ b/goodies/source/filter.vcl/itga/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vitga
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/itga.obj
# ==========================================================================
@@ -64,6 +64,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/filter.vcl/itiff/makefile.mk b/goodies/source/filter.vcl/itiff/makefile.mk
index 9b610d421f37..78405a563659 100644
--- a/goodies/source/filter.vcl/itiff/makefile.mk
+++ b/goodies/source/filter.vcl/itiff/makefile.mk
@@ -44,7 +44,7 @@ DEPTARGET=vitiff
.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
CDEFS+= -DEDITDEBUG
.ENDIF
-
+.IF "$(L10N_framework)"==""
SLOFILES = $(SLO)$/itiff.obj \
$(SLO)$/lzwdecom.obj \
$(SLO)$/ccidecom.obj
@@ -68,6 +68,7 @@ SHL1VERSIONMAP=exports.map
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
+.ENDIF
# ==========================================================================
diff --git a/goodies/source/inv/makefile.mk b/goodies/source/inv/makefile.mk
index 359aab167008..500ba17f6091 100644
--- a/goodies/source/inv/makefile.mk
+++ b/goodies/source/inv/makefile.mk
@@ -42,6 +42,7 @@ EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
.INCLUDE : settings.mk
# --- Files --------------------------------------------------------
+.IF "$(L10N_framework)"==""
.IF "$(TEST)" != ""
CDEFS+=-DTEST
@@ -62,6 +63,7 @@ SLOFILES= \
$(SLO)$/score.obj \
$(SLO)$/monst.obj
.ENDIF
+.ENDIF
SRS1NAME=$(TARGET)
SRC1FILES=gegner.src strings.src
@@ -70,6 +72,9 @@ RESLIB1IMAGES= $(PRJ)$/res
RESLIB1NAME=tfu
RESLIB1SRSFILES=$(SRS)$/invader.srs
+
+.IF "$(L10N_framework)"==""
+
.IF "$(TEST)"!=""
APP1TARGET= $(TARGET)
APP1OBJS= $(OBJFILES)
@@ -85,7 +90,7 @@ APP1STDLIBS= $(CPPULIB) \
.ELSE
SHL1TARGET= tfu$(DLLPOSTFIX)
-SHL1IMPLIB= itfu
+SHL1IMPLIB= i
SHL1STDLIBS=\
$(VCLLIB) \
$(TOOLSLIB) \
@@ -103,10 +108,11 @@ SHL1DEF=$(MISC)$/$(SHL1TARGET).def
.ENDIF
# --- Targets -------------------------------------------------------
-
+.ENDIF
.INCLUDE : target.mk
+.IF "$(L10N_framework)"==""
ALLTAR: \
$(BIN)$/applicat.rdb
@@ -147,3 +153,7 @@ $(MISC)$/$(SHL1TARGET).def: makefile.mk
.ENDIF
+.ELSE
+pseudo:
+
+.ENDIF
diff --git a/goodies/util/makefile.mk b/goodies/util/makefile.mk
index 13bb94069804..dc5d9566ea8a 100644
--- a/goodies/util/makefile.mk
+++ b/goodies/util/makefile.mk
@@ -42,6 +42,7 @@ GEN_HID=TRUE
.INCLUDE : settings.mk
# --- Allgemein ---------------------------------------------------
+.IF "$(L10N_framework)"==""
LIB1TARGET=$(SLB)$/go.lib
LIB1FILES=\
@@ -78,6 +79,7 @@ DEF1EXPORTFILE =goodies.dxp
# THB: exports list goodies checked for 6.0 Final 6.12.2001
# Note: explicit exports only necessary for VCL graphic filters (see there)
+.ENDIF
# --- Targets -----------------------------------------------------------
@@ -86,6 +88,7 @@ DEF1EXPORTFILE =goodies.dxp
.IF "$(depend)"==""
# --- Goodies-Filter-Datei ---
+.IF "$(L10N_framework)"==""
$(MISC)$/$(SHL1TARGET).flt: makefile.mk
@echo ------------------------------
@@ -98,3 +101,5 @@ $(MISC)$/$(SHL1TARGET).flt: makefile.mk
@echo CT>>$@
.ENDIF
+
+.ENDIF
diff --git a/i18npool/inc/defaultnumberingprovider.hxx b/i18npool/inc/defaultnumberingprovider.hxx
index f3f8082eef55..2bfc9e707d69 100644
--- a/i18npool/inc/defaultnumberingprovider.hxx
+++ b/i18npool/inc/defaultnumberingprovider.hxx
@@ -53,6 +53,7 @@ class DefaultNumberingProvider : public cppu::WeakImplHelper4
void GetCharStrN( sal_Int32 nValue, sal_Int16 nType, rtl::OUString& rStr ) const;
void GetCharStr( sal_Int32 nValue, sal_Int16 nType, rtl::OUString& rStr ) const;
void GetRomanString( sal_Int32 nValue, sal_Int16 nType, rtl::OUString& rStr ) const;
+ void impl_loadTranslit();
public:
DefaultNumberingProvider(
const com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory >& xMSF );
diff --git a/i18npool/inc/i18npool/lang.h b/i18npool/inc/i18npool/lang.h
index 68ae24bc2c21..eaf7eb9c2ea8 100644
--- a/i18npool/inc/i18npool/lang.h
+++ b/i18npool/inc/i18npool/lang.h
@@ -501,5 +501,7 @@ typedef unsigned short LanguageType;
#define LANGUAGE_USER_ARABIC_PALESTINE 0x9801 /* makeLangID( 0x26, getPrimaryLanguage( LANGUAGE_ARABIC_SAUDI_ARABIA)) */
#define LANGUAGE_USER_ARABIC_SOMALIA 0x9C01 /* makeLangID( 0x27, getPrimaryLanguage( LANGUAGE_ARABIC_SAUDI_ARABIA)) */
#define LANGUAGE_USER_ARABIC_SUDAN 0xA001 /* makeLangID( 0x28, getPrimaryLanguage( LANGUAGE_ARABIC_SAUDI_ARABIA)) */
+#define LANGUAGE_USER_ANCIENT_GREEK 0x0649
+#define LANGUAGE_USER_ASTURIAN 0x064A
#endif /* INCLUDED_I18NPOOL_LANG_H */
diff --git a/i18npool/inc/i18npool/mslangid.hxx b/i18npool/inc/i18npool/mslangid.hxx
index 7cc5e6bd8926..27688cd995dc 100644
--- a/i18npool/inc/i18npool/mslangid.hxx
+++ b/i18npool/inc/i18npool/mslangid.hxx
@@ -216,6 +216,9 @@ public:
static LanguageType getRealLanguageWithoutConfig( LanguageType nLang );
+ static LanguageType resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType );
+
+
/** Whether locale has a Right-To-Left orientation. */
static bool isRightToLeft( LanguageType nLang );
@@ -246,6 +249,9 @@ public:
configuration! */
static void setConfiguredSystemLanguage( LanguageType nLang );
static void setConfiguredSystemUILanguage( LanguageType nLang );
+ static void setConfiguredWesternFallback( LanguageType nLang );
+ static void setConfiguredComplexFallback( LanguageType nLang );
+ static void setConfiguredAsianFallback( LanguageType nLang );
// ---------------------------------------------------------------------------
@@ -274,6 +280,10 @@ private:
static LanguageType nConfiguredSystemLanguage;
static LanguageType nConfiguredSystemUILanguage;
+ static LanguageType nConfiguredWesternFallback;
+ static LanguageType nConfiguredAsianFallback;
+ static LanguageType nConfiguredComplexFallback;
+
static LanguageType getPlatformSystemLanguage();
static LanguageType getPlatformSystemUILanguage();
diff --git a/i18npool/inc/xdictionary.hxx b/i18npool/inc/xdictionary.hxx
index 04c5836aaaea..ac2005c9f397 100644
--- a/i18npool/inc/xdictionary.hxx
+++ b/i18npool/inc/xdictionary.hxx
@@ -87,9 +87,9 @@ public:
private:
WordBreakCache cache[CACHE_MAX];
- sal_Bool seekSegment(const sal_Unicode *text, sal_Int32 pos, sal_Int32 len, Boundary& boundary);
+ sal_Bool seekSegment(const rtl::OUString& rText, sal_Int32 pos, Boundary& boundary);
WordBreakCache& getCache(const sal_Unicode *text, Boundary& boundary);
- sal_Bool exists(const sal_Unicode u);
+ sal_Bool exists(const sal_uInt32 u);
sal_Int32 getLongestMatch(const sal_Unicode *text, sal_Int32 len);
};
diff --git a/i18npool/source/breakiterator/breakiteratorImpl.cxx b/i18npool/source/breakiterator/breakiteratorImpl.cxx
index 0eb4c20ca250..0a75e642f240 100644
--- a/i18npool/source/breakiterator/breakiteratorImpl.cxx
+++ b/i18npool/source/breakiterator/breakiteratorImpl.cxx
@@ -261,13 +261,29 @@ sal_Int16 SAL_CALL BreakIteratorImpl::getScriptType( const OUString& Text, sal_I
getScriptClass(Text.iterateCodePoints(&nPos, 0));
}
+
+/** Increments/decrements position first, then obtains character.
+ @return current position, may be -1 or text length if string was consumed.
+ */
static sal_Int32 SAL_CALL iterateCodePoints(const OUString& Text, sal_Int32 &nStartPos, sal_Int32 inc, sal_uInt32& ch) {
- if (nStartPos + inc < 0 || nStartPos + inc >= Text.getLength()) {
+ sal_Int32 nLen = Text.getLength();
+ if (nStartPos + inc < 0 || nStartPos + inc >= nLen) {
ch = 0;
- nStartPos = nStartPos + inc < 0 ? -1 : Text.getLength();
+ nStartPos = nStartPos + inc < 0 ? -1 : nLen;
} else {
ch = Text.iterateCodePoints(&nStartPos, inc);
- if (inc > 0) ch = Text.iterateCodePoints(&nStartPos, 0);
+ // Fix for #i80436#.
+ // erAck: 2009-06-30T21:52+0200 This logic looks somewhat
+ // suspicious as if it cures a symptom.. anyway, had to add
+ // nStartPos < Text.getLength() to silence the (correct) assertion
+ // in rtl_uString_iterateCodePoints() if Text was one character
+ // (codepoint) only, made up of a surrogate pair.
+ //if (inc > 0 && nStartPos < Text.getLength())
+ // ch = Text.iterateCodePoints(&nStartPos, 0);
+ // With surrogates, nStartPos may actually point behind string
+ // now, even if inc is only +1
+ if (inc > 0)
+ ch = (nStartPos < nLen ? Text.iterateCodePoints(&nStartPos, 0) : 0);
}
return nStartPos;
}
diff --git a/i18npool/source/breakiterator/breakiterator_cjk.cxx b/i18npool/source/breakiterator/breakiterator_cjk.cxx
index 3a44c02edc23..9d690469067a 100644
--- a/i18npool/source/breakiterator/breakiterator_cjk.cxx
+++ b/i18npool/source/breakiterator/breakiterator_cjk.cxx
@@ -112,13 +112,13 @@ LineBreakResults SAL_CALL BreakIterator_CJK::getLineBreak(
if (bOptions.allowPunctuationOutsideMargin &&
hangingCharacters.indexOf(Text[nStartPos]) != -1 &&
- ++nStartPos == Text.getLength()) {
+ (Text.iterateCodePoints( &nStartPos, 1), nStartPos == Text.getLength())) {
; // do nothing
} else if (bOptions.applyForbiddenRules && 0 < nStartPos && nStartPos < Text.getLength()) {
while (nStartPos > 0 &&
(bOptions.forbiddenBeginCharacters.indexOf(Text[nStartPos]) != -1 ||
bOptions.forbiddenEndCharacters.indexOf(Text[nStartPos-1]) != -1))
- nStartPos--;
+ Text.iterateCodePoints( &nStartPos, -1);
}
lbr.breakIndex = nStartPos;
diff --git a/i18npool/source/breakiterator/xdictionary.cxx b/i18npool/source/breakiterator/xdictionary.cxx
index f286dd2449ac..add22f39d58e 100644
--- a/i18npool/source/breakiterator/xdictionary.cxx
+++ b/i18npool/source/breakiterator/xdictionary.cxx
@@ -126,8 +126,9 @@ void xdictionary::setJapaneseWordBreak()
japaneseWordBreak = sal_True;
}
-sal_Bool xdictionary::exists(const sal_Unicode c) {
- sal_Bool exist = existMark ? sal::static_int_cast<sal_Bool>((existMark[c>>3] & (1<<(c&0x07))) != 0) : sal_False;
+sal_Bool xdictionary::exists(const sal_uInt32 c) {
+ // 0x1FFF is the hardcoded limit in gendict for existMarks
+ sal_Bool exist = (existMark && ((c>>3) < 0x1FFF)) ? sal::static_int_cast<sal_Bool>((existMark[c>>3] & (1<<(c&0x07))) != 0) : sal_False;
if (!exist && japaneseWordBreak)
return BreakIteratorImpl::getScriptClass(c) == ScriptType::ASIAN;
else
@@ -197,20 +198,35 @@ sal_Bool WordBreakCache::equals(const sal_Unicode* str, Boundary& boundary) {
* @param pos : Position of the given character.
* @return true if CJK.
*/
-sal_Bool xdictionary::seekSegment(const sal_Unicode *text, sal_Int32 pos,
- sal_Int32 len, Boundary& segBoundary) {
- for (segBoundary.startPos = pos - 1;
- segBoundary.startPos >= 0 &&
- (u_isWhitespace((sal_uInt32)text[segBoundary.startPos]) || exists(text[segBoundary.startPos]));
- segBoundary.startPos--) ;
- segBoundary.startPos++;
-
- for (segBoundary.endPos = pos;
- segBoundary.endPos < len &&
- (u_isWhitespace((sal_uInt32)text[segBoundary.endPos]) || exists(text[segBoundary.endPos]));
- segBoundary.endPos++) ;
-
- return segBoundary.endPos > segBoundary.startPos + 1;
+sal_Bool xdictionary::seekSegment(const rtl::OUString &rText, sal_Int32 pos,
+ Boundary& segBoundary)
+{
+ sal_Int32 indexUtf16;
+ segBoundary.endPos = segBoundary.startPos = pos;
+
+ indexUtf16 = pos;
+ while (indexUtf16 > 0)
+ {
+ sal_uInt32 ch = rText.iterateCodePoints(&indexUtf16, -1);
+ if (u_isWhitespace(ch) || exists(ch))
+ segBoundary.startPos = indexUtf16;
+ else
+ break;
+ }
+
+ indexUtf16 = pos;
+ while (indexUtf16 < rText.getLength())
+ {
+ sal_uInt32 ch = rText.iterateCodePoints(&indexUtf16, 1);
+ if (u_isWhitespace(ch) || exists(ch))
+ segBoundary.endPos = indexUtf16;
+ else
+ break;
+ }
+
+ indexUtf16 = segBoundary.startPos;
+ rText.iterateCodePoints(&indexUtf16, 1);
+ return segBoundary.endPos > indexUtf16;
}
#define KANJA 1
@@ -340,19 +356,24 @@ Boundary xdictionary::getWordBoundary(const OUString& rText, sal_Int32 anyPos, s
sal_Int32 len=rText.getLength();
if (anyPos >= len || anyPos < 0) {
boundary.startPos = boundary.endPos = anyPos < 0 ? 0 : len;
- } else if (seekSegment(text, anyPos, len, boundary)) { // character in dict
+ } else if (seekSegment(rText, anyPos, boundary)) { // character in dict
WordBreakCache& aCache = getCache(text, boundary);
sal_Int32 i = 0;
- while (aCache.wordboundary[i] <= (sal_Int32)anyPos - boundary.startPos) i++;
+ while (aCache.wordboundary[i] <= anyPos - boundary.startPos) i++;
sal_Int32 startPos = aCache.wordboundary[i - 1];
// if bDirection is false
- if (!bDirection && startPos > 0 && startPos == (anyPos - boundary.startPos) &&
- u_isWhitespace((sal_uInt32) text[anyPos - 1]))
- i--;
- boundary.endPos = aCache.wordboundary[i] + boundary.startPos;
- boundary.startPos += aCache.wordboundary[i - 1];
+ if (!bDirection && startPos > 0 && startPos == (anyPos - boundary.startPos))
+ {
+ sal_Int32 indexUtf16 = anyPos-1;
+ sal_uInt32 ch = rText.iterateCodePoints(&indexUtf16, 1);
+ if (u_isWhitespace(ch))
+ i--;
+ }
+ boundary.endPos = boundary.startPos;
+ rText.iterateCodePoints(&boundary.endPos, aCache.wordboundary[i]);
+ rText.iterateCodePoints(&boundary.startPos, aCache.wordboundary[i-1]);
} else {
boundary.startPos = anyPos;
if (anyPos < len) rText.iterateCodePoints(&anyPos, 1);
@@ -360,8 +381,14 @@ Boundary xdictionary::getWordBoundary(const OUString& rText, sal_Int32 anyPos, s
}
if (wordType == WordType::WORD_COUNT) {
// skip punctuation for word count.
- while (boundary.endPos < len && u_ispunct((sal_uInt32)text[boundary.endPos]))
- boundary.endPos++;
+ while (boundary.endPos < len)
+ {
+ sal_Int32 indexUtf16 = boundary.endPos;
+ if (u_ispunct(rText.iterateCodePoints(&indexUtf16, 1)))
+ boundary.endPos = indexUtf16;
+ else
+ break;
+ }
}
return boundary;
diff --git a/i18npool/source/collator/makefile.mk b/i18npool/source/collator/makefile.mk
index bca1c00aa419..b38386d53de0 100644
--- a/i18npool/source/collator/makefile.mk
+++ b/i18npool/source/collator/makefile.mk
@@ -42,7 +42,7 @@ ENABLE_EXCEPTIONS=TRUE
# --- Files --------------------------------------------------------
-txtlist:=$(shell @cd data && ls *.txt)
+txtlist:=$(shell @cd data >& $(NULLDEV) && ls *.txt)
LOCAL_RULE_LANGS:=$(uniq $(foreach,i,$(txtlist) $(i:s/-/_/:s/_/ /:1)))
rules_dependencies:=$(foreach,i,$(txtlist) data$/$i) $(INCCOM)$/lrl_include.hxx
diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
index 8979a5ffc203..9126162d6f36 100644
--- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
+++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
@@ -195,9 +195,9 @@ static sal_Unicode lowerLetter[] = {
0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
};
-DefaultNumberingProvider::DefaultNumberingProvider( const Reference < XMultiServiceFactory >& xMSF ) : xSMgr(xMSF)
+DefaultNumberingProvider::DefaultNumberingProvider( const Reference < XMultiServiceFactory >& xMSF ) : xSMgr(xMSF),translit(NULL)
{
- translit = new TransliterationImpl(xMSF);
+
}
DefaultNumberingProvider::~DefaultNumberingProvider()
@@ -205,6 +205,12 @@ DefaultNumberingProvider::~DefaultNumberingProvider()
delete translit;
}
+void DefaultNumberingProvider::impl_loadTranslit()
+{
+ if ( !translit )
+ translit = new TransliterationImpl(xSMgr);
+}
+
Sequence< Reference<container::XIndexAccess> >
DefaultNumberingProvider::getDefaultOutlineNumberings(const Locale& rLocale ) throw(RuntimeException)
{
@@ -468,6 +474,7 @@ DefaultNumberingProvider::makeNumberingString( const Sequence<beans::PropertyVal
const OUString &tmp = OUString::valueOf( number );
OUString transliteration;
getPropertyByName(aProperties, "Transliteration", sal_True) >>= transliteration;
+ impl_loadTranslit();
translit->loadModuleByImplName(transliteration, aLocale);
result += translit->transliterateString2String(tmp, 0, tmp.getLength());
} catch (Exception& ) {
diff --git a/i18npool/source/isolang/inunx.cxx b/i18npool/source/isolang/inunx.cxx
index 195ddfabf9b7..7e79625085bb 100644
--- a/i18npool/source/isolang/inunx.cxx
+++ b/i18npool/source/isolang/inunx.cxx
@@ -60,11 +60,11 @@ static const sal_Char* getLangFromEnvironment()
const sal_Char *pLang = NULL;
pLang = getenv ( "LC_ALL" );
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = getenv ( "LC_CTYPE" );
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = getenv( "LANG" );
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = pFallback;
return pLang;
@@ -79,13 +79,13 @@ static const sal_Char* getUILangFromEnvironment()
const sal_Char *pLang = NULL;
pLang = getenv ( "LANGUAGE" ); // respect the GNU extension
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = getenv ( "LC_ALL" );
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = getenv ( "LC_MESSAGES" );
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = getenv( "LANG" );
- if (! pLang)
+ if (! pLang || pLang[0] == 0)
pLang = pFallback;
return pLang;
diff --git a/i18npool/source/isolang/isolang.cxx b/i18npool/source/isolang/isolang.cxx
index 74416df665a0..c321f62c95f9 100644
--- a/i18npool/source/isolang/isolang.cxx
+++ b/i18npool/source/isolang/isolang.cxx
@@ -331,9 +331,9 @@ static MsLangId::IsoLangEntry const aImplIsoLangEntries[] =
{ LANGUAGE_VENDA, "ven", "ZA" }, // 639-2 may have been used temporarily since 2004-07-23
{ LANGUAGE_XHOSA, "xh", "ZA" },
{ LANGUAGE_ZULU, "zu", "ZA" },
- { LANGUAGE_QUECHUA_BOLIVIA, "qu", "BO" },
{ LANGUAGE_QUECHUA_ECUADOR, "qu", "EC" },
{ LANGUAGE_QUECHUA_PERU, "qu", "PE" },
+ { LANGUAGE_QUECHUA_BOLIVIA, "qu", "BO" }, // macro: quh-BO, qul-BO
{ LANGUAGE_PASHTO, "ps", "AF" },
{ LANGUAGE_OROMO, "om", "ET" },
{ LANGUAGE_DHIVEHI, "dv", "MV" },
@@ -446,6 +446,8 @@ static MsLangId::IsoLangEntry const aImplIsoLangEntries[] =
{ LANGUAGE_USER_TETUN_TIMOR_LESTE, "tet", "TL" },
{ LANGUAGE_USER_TOK_PISIN, "tpi", "PG" },
{ LANGUAGE_USER_SHUSWAP, "shs", "CA" },
+ { LANGUAGE_USER_ANCIENT_GREEK, "grc", "GR" },
+ { LANGUAGE_USER_ASTURIAN, "ast", "ES" },
{ LANGUAGE_NONE, "zxx", "" }, // added to ISO 639-2 on 2006-01-11: Used to declare the absence of linguistic information
{ LANGUAGE_DONTKNOW, "", "" } // marks end of table
};
diff --git a/i18npool/source/isolang/langid.pl b/i18npool/source/isolang/langid.pl
index 40313c5cc707..f4852cc7197d 100755
--- a/i18npool/source/isolang/langid.pl
+++ b/i18npool/source/isolang/langid.pl
@@ -43,7 +43,7 @@ sub Usage()
"\n",
"langid - a hackish utility to lookup lang.h language defines and LangIDs,\n",
"isolang.cxx ISO639/ISO3166 mapping, locale data files, langtab.src language\n",
- "listbox entries, Langpack.ulf installer language and file_ooo.scp registry name.\n\n",
+ "listbox entries, postset.mk and file_ooo.scp registry name.\n\n",
"Usage: $0 [--single] {language string} | {LangID} | {primarylanguage sublanguage} | {language-country}\n\n",
@@ -104,11 +104,12 @@ sub makeLangID($$)
}
-sub grepFile($$$$$)
+sub grepFile($$$$@)
{
- my( $regex, $modifier, $path, $module, $name) = @_;
+ my( $regex, $path, $module, $name, @addregex) = @_;
my @result;
my $found = 0;
+ my $arefound = '';
my $file;
# Try module under current working directory first to catch local
# modifications. A Not yet delivered lang.h is a special case.
@@ -125,43 +126,51 @@ sub grepFile($$$$$)
print "No $file\n";
$file = "$path/$module.lnk/$name";
if (!($found = open( IN, $file))) {
- print "No $file either.\n"; }
+ print "No $file.\n";
+ $file = "$path/$module.link/$name";
+ if (!($found = open( IN, $file))) {
+ print "No $file either.\n"; }
+ }
}
}
if ($found)
{
$found = 0;
- if ($modifier eq "i")
+ while (my $line = <IN>)
{
- while (my $line = <IN>)
+ if ($line =~ /$regex/)
{
- if ($line =~ /$regex/i)
+ if (!$found)
{
- if (!$found)
- {
- $found = 1;
- print "$file:\n";
- }
- chomp( $line);
- print "$line\n";
- push( @result, $line);
+ $found = 1;
+ print "$file:\n";
}
+ chomp( $line);
+ print "$line\n";
+ push( @result, $line);
}
- }
- else
- {
- while (my $line = <IN>)
+ else
{
- if ($line =~ /$regex/)
+ for my $re (@addregex)
{
- if (!$found)
+ if ($re ne $arefound && $line =~ /$re/)
{
- $found = 1;
- print "$file:\n";
+ if ($arefound eq '')
+ {
+ $arefound = $re;
+ }
+ else
+ {
+ if (!$found)
+ {
+ $found = 1;
+ print "$file:\n";
+ }
+ chomp( $line);
+ print "$line\n";
+ push( @result, $line);
+ }
}
- chomp( $line);
- print "$line\n";
- push( @result, $line);
}
}
}
@@ -214,16 +223,16 @@ sub main()
Usage();
return 1;
}
- my $modifier = "i";
- my (@resultlist, @greplist, @lcidlist, $result);
+ my $modifier = "(?i)";
+ my (@resultlist, @greplist, $result);
# If no string was given on the command line, but value(s) were, lookup the
# LangID value to obtain the define identifier.
if ($grepdef)
{
# #define LANGUAGE_AFRIKAANS 0x0436
@resultlist = grepFile(
- '^\s*#\s*define\s+[A-Z_]*' . $grepdef, $modifier,
- $SOLENVINC, "i18npool", "lang.h");
+ $modifier . '^\s*#\s*define\s+[A-Z_]*' . $grepdef,
+ $SOLENVINC, "i18npool", "lang.h", ());
}
else
{
@@ -231,8 +240,8 @@ sub main()
$lcid, $parts[0], $parts[1]);
my $buf = sprintf( "0x%04X", $lcid);
@resultlist = grepFile(
- '^\s*#\s*define\s+\w+\s+' . $buf, "",
- $SOLENVINC, "i18npool", "lang.h");
+ '^\s*#\s*define\s+\w+\s+' . $buf,
+ $SOLENVINC, "i18npool", "lang.h", ());
}
for $result (@resultlist)
{
@@ -260,8 +269,8 @@ sub main()
$coun = uc($coun);
# { LANGUAGE_AFRIKAANS, "af", "ZA" },
@resultlist = grepFile(
- '^\s*\{\s*\w+\s*,\s*\"' . $lang . '\"\s*,\s*\"' . $coun . '\"\s*\}\s*,', "",
- "$SRC_ROOT", "i18npool", "source/isolang/isolang.cxx");
+ '^\s*\{\s*\w+\s*,\s*\"' . $lang . '\"\s*,\s*\"' . $coun . '\"\s*\}\s*,',
+ "$SRC_ROOT", "i18npool", "source/isolang/isolang.cxx", ());
for $result (@resultlist)
{
if ($result =~ /^\s*\{\s*(\w+)\s*,\s*\"\w+\"\s*,\s*\"(\w+)?\"\s*\}\s*,/)
@@ -279,10 +288,13 @@ sub main()
for $grepdef (@greplist)
{
print "\nUsing: " . $grepdef . "\n";
+
+ # Decimal LCID, was needed for Langpack.ulf but isn't used anymore,
+ # keep just in case we'd need it again.
# #define LANGUAGE_AFRIKAANS 0x0436
@resultlist = grepFile(
- '^\s*#\s*define\s+[A-Z_]*' . $grepdef, $modifier,
- $SOLENVINC, "i18npool", "lang.h");
+ $modifier . '^\s*#\s*define\s+[A-Z_]*' . $grepdef,
+ $SOLENVINC, "i18npool", "lang.h", ());
my @lcidlist;
for $result (@resultlist)
{
@@ -295,8 +307,8 @@ sub main()
# { LANGUAGE_AFRIKAANS, "af", "ZA" },
@resultlist = grepFile(
- '^\s*\{\s*.*' . $grepdef . '.*\s*,\s*\".*\"\s*,\s*\".*\"\s*\}\s*,', $modifier,
- "$SRC_ROOT", "i18npool", "source/isolang/isolang.cxx");
+ $modifier . '^\s*\{\s*.*' . $grepdef . '.*\s*,\s*\".*\"\s*,\s*\".*\"\s*\}\s*,',
+ "$SRC_ROOT", "i18npool", "source/isolang/isolang.cxx", ());
my @langcoungreplist;
for $result (@resultlist)
@@ -322,7 +334,11 @@ sub main()
if (!($found = open( LD, $file)))
{
$file = "$SRC_ROOT/i18npool.lnk/source/localedata/data/$loca.xml";
- $found = open( LD, $file);
+ if (!($found = open( LD, $file)))
+ {
+ $file = "$SRC_ROOT/i18npool.link/source/localedata/data/$loca.xml";
+ $found = open( LD, $file);
+ }
}
if ($found)
{
@@ -346,8 +362,8 @@ sub main()
# case LANGUAGE_ARABIC:
grepFile(
- '^\s*case\s*.*' . $grepdef . '.*\s*:', $modifier,
- "$SRC_ROOT", "i18npool", "source/isolang/mslangid.cxx");
+ $modifier . '^\s*case\s*.*' . $grepdef . '.*\s*:',
+ "$SRC_ROOT", "i18npool", "source/isolang/mslangid.cxx", ());
# With CWS 'langstatusbar' the language listbox resource file gets a new location.
my $module = "svx";
@@ -359,28 +375,26 @@ sub main()
# < "Afrikaans" ; LANGUAGE_AFRIKAANS ; > ;
# lookup define
@resultlist = grepFile(
- '^\s*<\s*\".*\"\s*;\s*.*' . $grepdef . '.*\s*;\s*>\s*;', $modifier,
- "$SRC_ROOT", $module, $name);
+ $modifier . '^\s*<\s*\".*\"\s*;\s*.*' . $grepdef . '.*\s*;\s*>\s*;',
+ "$SRC_ROOT", $module, $name, ());
# lookup string
if (!@resultlist) {
grepFile(
- '^\s*<\s*\".*' . $grepdef . '.*\"\s*;\s*.*\s*;\s*>\s*;', $modifier,
- "$SRC_ROOT", $module, $name); }
-
- for $lcid (@lcidlist)
- {
- # [OOO_LANGPACK_NAME_1033]
- grepFile(
- '^\s*\[OOO_LANGPACK_NAME_' . $lcid . '\]', "",
- "$SRC_ROOT", "instsetoo_native", "inc_openoffice/windows/msi_languages/Langpack.ulf");
- }
+ $modifier . '^\s*<\s*\".*' . $grepdef . '.*\"\s*;\s*.*\s*;\s*>\s*;',
+ "$SRC_ROOT", $module, $name, ()); }
for my $langcoun (@langcoungreplist)
{
# Name (xxx) = "/registry/spool/org/openoffice/Office/Common-ctl.xcu";
grepFile(
- '^\s*Name\s*\(' . $langcoun . '\)\s*=', "",
- "$SRC_ROOT", "scp2", "source/ooo/file_ooo.scp");
+ '^\s*Name\s*\(' . $langcoun . '\)\s*=',
+ "$SRC_ROOT", "scp2", "source/ooo/file_ooo.scp", ());
+ # completelangiso=af ar as-IN ... zu
+ grepFile(
+ '^\s*completelangiso\s*[= ](.{2,3}(-..)?)*' . $langcoun . '',
+ "$SRC_ROOT", "solenv", "inc/postset.mk",
+ # needs a duplicated pair of backslashes to produce a literal \\
+ ('^\s*completelangiso\s*=', '^\s+' . $langcoun . '\s*\\\\*$'));
}
}
return 0;
diff --git a/i18npool/source/isolang/mslangid.cxx b/i18npool/source/isolang/mslangid.cxx
index 070ddb9dc562..3476341fbc79 100644
--- a/i18npool/source/isolang/mslangid.cxx
+++ b/i18npool/source/isolang/mslangid.cxx
@@ -41,6 +41,9 @@
LanguageType MsLangId::nConfiguredSystemLanguage = LANGUAGE_SYSTEM;
LanguageType MsLangId::nConfiguredSystemUILanguage = LANGUAGE_SYSTEM;
+LanguageType MsLangId::nConfiguredWesternFallback = LANGUAGE_SYSTEM;
+LanguageType MsLangId::nConfiguredAsianFallback = LANGUAGE_SYSTEM;
+LanguageType MsLangId::nConfiguredComplexFallback = LANGUAGE_SYSTEM;
// static
void MsLangId::setConfiguredSystemLanguage( LanguageType nLang )
@@ -55,6 +58,23 @@ void MsLangId::setConfiguredSystemUILanguage( LanguageType nLang )
nConfiguredSystemUILanguage = nLang;
}
+// static
+void MsLangId::setConfiguredWesternFallback( LanguageType nLang )
+{
+ nConfiguredWesternFallback = nLang;
+}
+
+// static
+void MsLangId::setConfiguredAsianFallback( LanguageType nLang )
+{
+ nConfiguredAsianFallback = nLang;
+}
+
+// static
+void MsLangId::setConfiguredComplexFallback( LanguageType nLang )
+{
+ nConfiguredComplexFallback = nLang;
+}
// static
inline LanguageType MsLangId::simplifySystemLanguages( LanguageType nLang )
@@ -120,6 +140,40 @@ LanguageType MsLangId::getRealLanguage( LanguageType nLang )
// static
+LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType )
+{
+ if (nLang == LANGUAGE_NONE)
+ return nLang;
+
+ nLang = getRealLanguage(nLang);
+ if (nType != ::com::sun::star::i18n::ScriptType::WEAK && getScriptType(nLang) != nType)
+ {
+ switch(nType)
+ {
+ case ::com::sun::star::i18n::ScriptType::ASIAN:
+ if (nConfiguredAsianFallback == LANGUAGE_SYSTEM)
+ nLang = LANGUAGE_CHINESE_SIMPLIFIED;
+ else
+ nLang = nConfiguredComplexFallback;
+ break;
+ case ::com::sun::star::i18n::ScriptType::COMPLEX:
+ if (nConfiguredComplexFallback == LANGUAGE_SYSTEM)
+ nLang = LANGUAGE_HINDI;
+ else
+ nLang = nConfiguredComplexFallback;
+ break;
+ default:
+ if (nConfiguredWesternFallback == LANGUAGE_SYSTEM)
+ nLang = LANGUAGE_ENGLISH_US;
+ else
+ nLang = nConfiguredWesternFallback;
+ break;
+ }
+ }
+ return nLang;
+}
+
+// static
void MsLangId::convertLanguageToLocale( LanguageType nLang,
::com::sun::star::lang::Locale & rLocale )
{
@@ -211,10 +265,12 @@ bool MsLangId::isRightToLeft( LanguageType nLang )
{
case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY :
case LANGUAGE_HEBREW & LANGUAGE_MASK_PRIMARY :
+ case LANGUAGE_YIDDISH & LANGUAGE_MASK_PRIMARY :
case LANGUAGE_URDU & LANGUAGE_MASK_PRIMARY :
case LANGUAGE_FARSI & LANGUAGE_MASK_PRIMARY :
case LANGUAGE_KASHMIRI & LANGUAGE_MASK_PRIMARY :
case LANGUAGE_SINDHI & LANGUAGE_MASK_PRIMARY :
+ case LANGUAGE_UIGHUR_CHINA & LANGUAGE_MASK_PRIMARY :
return true;
default:
@@ -281,6 +337,7 @@ sal_Int16 MsLangId::getScriptType( LanguageType nLang )
case LANGUAGE_BURMESE:
case LANGUAGE_FARSI:
case LANGUAGE_HEBREW:
+ case LANGUAGE_YIDDISH:
case LANGUAGE_MARATHI:
case LANGUAGE_PUNJABI:
case LANGUAGE_GUJARATI:
diff --git a/i18npool/source/localedata/LocaleNode.cxx b/i18npool/source/localedata/LocaleNode.cxx
index 7596efc1087c..3f09e394a833 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -448,6 +448,11 @@ void LCCTYPENode::generateCode (const OFileWriter &of) const
if (aListSep == aThoSep)
fprintf( stderr, "Warning: %s\n",
"ListSeparator equals ThousandSeparator.");
+ if (aListSep.getLength() != 1 || aListSep.getStr()[0] != ';')
+ {
+ incError( "ListSeparator not ';' semicolon. Strongly recommended. Currently required.");
+ ++nSavErr; // format codes not affected
+ }
if (aTimeSep == aTime100Sep)
++nWarn, fprintf( stderr, "Warning: %s\n",
"Time100SecSeparator equals TimeSeparator, this is probably an error.");
@@ -1299,6 +1304,16 @@ void LCCalendarNode::generateCode (const OFileWriter &of) const
delete []nbOfEras;
}
+bool isIso4217( const OUString& rStr )
+{
+ const sal_Unicode* p = rStr.getStr();
+ return rStr.getLength() == 3
+ && 'A' <= p[0] && p[0] <= 'Z'
+ && 'A' <= p[1] && p[1] <= 'Z'
+ && 'A' <= p[2] && p[2] <= 'Z'
+ ;
+}
+
void LCCurrencyNode :: generateCode (const OFileWriter &of) const
{
::rtl::OUString useLocale = getAttr() -> getValueByName("ref");
@@ -1336,10 +1351,17 @@ void LCCurrencyNode :: generateCode (const OFileWriter &of) const
}
str = calNode -> findNode ("CurrencyID") -> getValue();
of.writeParameter("currencyID", str, nbOfCurrencies);
+ // CurrencyID MUST be ISO 4217.
+ if (!bLegacy && !isIso4217(str))
+ incError( "CurrencyID is not ISO 4217");
str = calNode -> findNode ("CurrencySymbol") -> getValue();
of.writeParameter("currencySymbol", str, nbOfCurrencies);
str = calNode -> findNode ("BankSymbol") -> getValue();
of.writeParameter("bankSymbol", str, nbOfCurrencies);
+ // BankSymbol currently must be ISO 4217. May change later if
+ // application always uses CurrencyID instead of BankSymbol.
+ if (!bLegacy && !isIso4217(str))
+ incError( "BankSymbol is not ISO 4217");
str = calNode -> findNode ("CurrencyName") -> getValue();
of.writeParameter("currencyName", str, nbOfCurrencies);
str = calNode -> findNode ("DecimalPlaces") -> getValue();
diff --git a/i18npool/source/localedata/data/ar_OM.xml b/i18npool/source/localedata/data/ar_OM.xml
new file mode 100644
index 000000000000..935e736f7c29
--- /dev/null
+++ b/i18npool/source/localedata/data/ar_OM.xml
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE Locale SYSTEM 'locale.dtd'>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>ar</LangID>
+ <DefaultName>Arabic, Omani Spoken</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>OM</CountryID>
+ <DefaultName>Oman</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>/</DateSeparator>
+ <ThousandSeparator>,</ThousandSeparator>
+ <DecimalSeparator>.</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>.</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>، </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>، </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>'</QuotationStart>
+ <QuotationEnd>'</QuotationEnd>
+ <DoubleQuotationStart>"</DoubleQuotationStart>
+ <DoubleQuotationEnd>"</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>ص</TimeAM>
+ <TimePM>م</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$ر.ع-2001]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#,###.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0.00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0.00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0.00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY]#,##0;-#,##0 [CURRENCY]</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY]#,##0.00;-#,##0.00 [CURRENCY]</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY]#,##0;[RED]-#,##0 [CURRENCY]</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY]#,##0.00;[RED]-#,##0.00 [CURRENCY]</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>CCC#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY]#,##0.--;[RED]-#,##0.-- [CURRENCY]</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>D/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNNDD، MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>DD/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>DD/MM/YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D، MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D، MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D، MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D، MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D، MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+ <FormatCode>NN، DD/MMM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+ <FormatCode>NN، D، MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN، D، MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND، MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>MMM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>DD/MM/YY HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>DD/MM/YYYY HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION>
+ <Collator default="true" unoid="alphanumeric"/>
+ <CollationOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </CollationOptions>
+ </LC_COLLATION>
+ <LC_SEARCH>
+ <SearchOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </SearchOptions>
+ </LC_SEARCH>
+ <LC_INDEX>
+ <IndexKey phonetic="false" default="true" unoid="alphanumeric">أ-ي</IndexKey>
+ <UnicodeScript>11</UnicodeScript>
+ <FollowPageWord>يتبع</FollowPageWord>
+ <FollowPageWord>يتبع</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>الأحد</DefaultAbbrvName>
+ <DefaultFullName>الأحد</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>الإثنين</DefaultAbbrvName>
+ <DefaultFullName>الإثنين</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>الثلاثاء</DefaultAbbrvName>
+ <DefaultFullName>الثلاثاء</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>الأربعاء</DefaultAbbrvName>
+ <DefaultFullName>الأربعاء</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>الخميس</DefaultAbbrvName>
+ <DefaultFullName>الخميس</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>الجمعة</DefaultAbbrvName>
+ <DefaultFullName>الجمعة</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>السبت</DefaultAbbrvName>
+ <DefaultFullName>السبت</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>يانير</DefaultAbbrvName>
+ <DefaultFullName>يانير</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>فبراير</DefaultAbbrvName>
+ <DefaultFullName>فبراير</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>مارس</DefaultAbbrvName>
+ <DefaultFullName>مارس</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>أبريل</DefaultAbbrvName>
+ <DefaultFullName>أبريل</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>مايو</DefaultAbbrvName>
+ <DefaultFullName>مايو</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>يونيو</DefaultAbbrvName>
+ <DefaultFullName>يونيو</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>يوليو</DefaultAbbrvName>
+ <DefaultFullName>يوليو</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>أغسطس</DefaultAbbrvName>
+ <DefaultFullName>أغسطس</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>سبتمبر</DefaultAbbrvName>
+ <DefaultFullName>سبتمبر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>أكتوبر</DefaultAbbrvName>
+ <DefaultFullName>أكتوبر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>نوفمبر</DefaultAbbrvName>
+ <DefaultFullName>نوفمبر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>ديسمبر</DefaultAbbrvName>
+ <DefaultFullName>ديسمبر</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>ق.م</DefaultAbbrvName>
+ <DefaultFullName>قبل الميلاد</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>م</DefaultAbbrvName>
+ <DefaultFullName>ميلادي</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>sat</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>OMR</CurrencyID>
+ <CurrencySymbol>ر.ع</CurrencySymbol>
+ <BankSymbol>OMR</BankSymbol>
+ <CurrencyName>ريال عماني</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION>
+ <Transliteration unoid="LOWERCASE_UPPERCASE"/>
+ <Transliteration unoid="UPPERCASE_LOWERCASE"/>
+ <Transliteration unoid="IGNORE_CASE"/>
+ </LC_TRANSLITERATION>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>صحيح</trueWord>
+ <falseWord>خاطئ</falseWord>
+ <quarter1Word>الربع الأول</quarter1Word>
+ <quarter2Word>الربع الثاني</quarter2Word>
+ <quarter3Word>الربع الثالث</quarter3Word>
+ <quarter4Word>الربع الرابع</quarter4Word>
+ <aboveWord>فوق</aboveWord>
+ <belowWord>تحت</belowWord>
+ <quarter1Abbreviation>الربع 1</quarter1Abbreviation>
+ <quarter2Abbreviation>الربع 2</quarter2Abbreviation>
+ <quarter3Abbreviation>الربع 3</quarter3Abbreviation>
+ <quarter4Abbreviation>الربع 4</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ </LC_NumberingLevel>
+ <LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/data/ast_ES.xml b/i18npool/source/localedata/data/ast_ES.xml
new file mode 100644
index 000000000000..05c63601828a
--- /dev/null
+++ b/i18npool/source/localedata/data/ast_ES.xml
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Locale SYSTEM "locale.dtd">
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>ast</LangID>
+ <DefaultName>Asturian</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>ES</CountryID>
+ <DefaultName>Spain</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>/</DateSeparator>
+ <ThousandSeparator>.</ThousandSeparator>
+ <DecimalSeparator>,</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>,</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>, </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>‘</QuotationStart>
+ <QuotationEnd>’</QuotationEnd>
+ <DoubleQuotationStart>“</DoubleQuotationStart>
+ <DoubleQuotationEnd>”</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>AM</TimeAM>
+ <TimePM>PM</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$€-64A]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#.##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#.##0,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#.###,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0,00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0,00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0,00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY]#.##0;-[CURRENCY]#.##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY]#.##0,00;-[CURRENCY]#.##0,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY]#.##0;[RED]-[CURRENCY]#.##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY]#.##0,00;[RED]-[CURRENCY]#.##0,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>CCC#.##0,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY]#.##0,--;[RED]-[CURRENCY]#.##0,--</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>D/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNNDD, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>DD/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>DD/MM/YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D, MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+ <FormatCode>NN, DD/MMM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+ <FormatCode>NN, D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN, D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>MMM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS,00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>DD/MM/YY HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>DD/MM/YYYY HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION>
+ <Collator default="true" unoid="alphanumeric"/>
+ <CollationOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </CollationOptions>
+ </LC_COLLATION>
+ <LC_SEARCH>
+ <SearchOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </SearchOptions>
+ </LC_SEARCH>
+ <LC_INDEX>
+ <IndexKey phonetic="false" default="true" unoid="alphanumeric">A Á B-C {CH} D-E É F-H Ḥ I Í J-K L {ḶḶ} M-N Ñ O Ó P-U Ú Ü V-Z</IndexKey>
+ <UnicodeScript>0</UnicodeScript>
+ <UnicodeScript>1</UnicodeScript>
+ <UnicodeScript>37</UnicodeScript>
+ <FollowPageWord>s/páx</FollowPageWord>
+ <FollowPageWord>s/pxs</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>Dom</DefaultAbbrvName>
+ <DefaultFullName>Domingu</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>Llu</DefaultAbbrvName>
+ <DefaultFullName>Llunes</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>Mar</DefaultAbbrvName>
+ <DefaultFullName>Martes</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>Mié</DefaultAbbrvName>
+ <DefaultFullName>Miércoles</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>Xue</DefaultAbbrvName>
+ <DefaultFullName>Xueves</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>Vie</DefaultAbbrvName>
+ <DefaultFullName>Vienres</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>Sáb</DefaultAbbrvName>
+ <DefaultFullName>Sábadu</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>Xin</DefaultAbbrvName>
+ <DefaultFullName>Xineru</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>Feb</DefaultAbbrvName>
+ <DefaultFullName>Febreru</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>Mar</DefaultAbbrvName>
+ <DefaultFullName>Marzu</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>Abr</DefaultAbbrvName>
+ <DefaultFullName>Abril</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>May</DefaultAbbrvName>
+ <DefaultFullName>Mayu</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>Xun</DefaultAbbrvName>
+ <DefaultFullName>Xunu</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>Xnt</DefaultAbbrvName>
+ <DefaultFullName>Xunetu</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>Ago</DefaultAbbrvName>
+ <DefaultFullName>Agostu</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>Set</DefaultAbbrvName>
+ <DefaultFullName>Setiembre</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>Och</DefaultAbbrvName>
+ <DefaultFullName>Ochobre</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>Pay</DefaultAbbrvName>
+ <DefaultFullName>Payares</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>Avi</DefaultAbbrvName>
+ <DefaultFullName>Avientu</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>edC</DefaultAbbrvName>
+ <DefaultFullName>edC</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>dC</DefaultAbbrvName>
+ <DefaultFullName>dC</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>mon</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>EUR</CurrencyID>
+ <CurrencySymbol>€</CurrencySymbol>
+ <BankSymbol>EUR</BankSymbol>
+ <CurrencyName>Euro</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION>
+ <Transliteration unoid="LOWERCASE_UPPERCASE"/>
+ <Transliteration unoid="UPPERCASE_LOWERCASE"/>
+ <Transliteration unoid="IGNORE_CASE"/>
+ </LC_TRANSLITERATION>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>Braero</trueWord>
+ <falseWord>Falso</falseWord>
+ <quarter1Word>1er Trimestre</quarter1Word>
+ <quarter2Word>2u Trimestre</quarter2Word>
+ <quarter3Word>3er Trimestre</quarter3Word>
+ <quarter4Word>4u Trimestre</quarter4Word>
+ <aboveWord>arriba</aboveWord>
+ <belowWord>abaxo</belowWord>
+ <quarter1Abbreviation>T1</quarter1Abbreviation>
+ <quarter2Abbreviation>T2</quarter2Abbreviation>
+ <quarter3Abbreviation>T3</quarter3Abbreviation>
+ <quarter4Abbreviation>T4</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ </LC_NumberingLevel>
+ <LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/data/az_AZ.xml b/i18npool/source/localedata/data/az_AZ.xml
index ad96a38099e5..268aca4cd927 100644
--- a/i18npool/source/localedata/data/az_AZ.xml
+++ b/i18npool/source/localedata/data/az_AZ.xml
@@ -299,14 +299,17 @@
</Calendar>
</LC_CALENDAR>
<LC_CURRENCY>
- <Currency default="true" usedInCompatibleFormatCodes="false">
+ <Currency default="true" usedInCompatibleFormatCodes="true">
<CurrencyID>AZN</CurrencyID>
<CurrencySymbol>man.</CurrencySymbol>
<BankSymbol>AZN</BankSymbol>
<CurrencyName>Manat</CurrencyName>
<DecimalPlaces>2</DecimalPlaces>
</Currency>
- <Currency default="false" usedInCompatibleFormatCodes="true">
+ <Currency default="false" usedInCompatibleFormatCodes="false" legacyOnly="true">
+ <!-- legacyOnly to avoid the duplicated listing in the number formatter
+ dialog because of the identical CurrencySymbol, which also confuses
+ the currency listbox selection mechanism. -->
<CurrencyID>AZM</CurrencyID>
<CurrencySymbol>man.</CurrencySymbol>
<BankSymbol>AZM</BankSymbol>
diff --git a/i18npool/source/localedata/data/gl_ES.xml b/i18npool/source/localedata/data/gl_ES.xml
index d9e6344f0cb0..26d21e913da7 100644
--- a/i18npool/source/localedata/data/gl_ES.xml
+++ b/i18npool/source/localedata/data/gl_ES.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Locale SYSTEM 'locale.dtd'>
-<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.2">
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.3">
<LC_INFO>
<Language>
<LangID>gl</LangID>
@@ -30,8 +30,8 @@
<DoubleQuotationStart>“</DoubleQuotationStart>
<DoubleQuotationEnd>”</DoubleQuotationEnd>
</Markers>
- <TimeAM>AM</TimeAM>
- <TimePM>PM</TimePM>
+ <TimeAM>a. m.</TimeAM>
+ <TimePM>p. m.</TimePM>
<MeasurementSystem>metric</MeasurementSystem>
</LC_CTYPE>
<LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$₧-456]">
@@ -184,37 +184,37 @@
<DaysOfWeek>
<Day>
<DayID>sun</DayID>
- <DefaultAbbrvName>do.</DefaultAbbrvName>
+ <DefaultAbbrvName>dom.</DefaultAbbrvName>
<DefaultFullName>domingo</DefaultFullName>
</Day>
<Day>
<DayID>mon</DayID>
- <DefaultAbbrvName>lu.</DefaultAbbrvName>
+ <DefaultAbbrvName>lun.</DefaultAbbrvName>
<DefaultFullName>luns</DefaultFullName>
</Day>
<Day>
<DayID>tue</DayID>
- <DefaultAbbrvName>ma.</DefaultAbbrvName>
+ <DefaultAbbrvName>mar.</DefaultAbbrvName>
<DefaultFullName>martes</DefaultFullName>
</Day>
<Day>
<DayID>wed</DayID>
- <DefaultAbbrvName>me.</DefaultAbbrvName>
+ <DefaultAbbrvName>mér.</DefaultAbbrvName>
<DefaultFullName>mércores</DefaultFullName>
</Day>
<Day>
<DayID>thu</DayID>
- <DefaultAbbrvName>xo.</DefaultAbbrvName>
+ <DefaultAbbrvName>xov.</DefaultAbbrvName>
<DefaultFullName>xoves</DefaultFullName>
</Day>
<Day>
<DayID>fri</DayID>
- <DefaultAbbrvName>ve.</DefaultAbbrvName>
+ <DefaultAbbrvName>ven.</DefaultAbbrvName>
<DefaultFullName>venres</DefaultFullName>
</Day>
<Day>
<DayID>sat</DayID>
- <DefaultAbbrvName>sa.</DefaultAbbrvName>
+ <DefaultAbbrvName>sáb.</DefaultAbbrvName>
<DefaultFullName>sábado</DefaultFullName>
</Day>
</DaysOfWeek>
@@ -231,7 +231,7 @@
</Month>
<Month>
<MonthID>mar</MonthID>
- <DefaultAbbrvName>mar</DefaultAbbrvName>
+ <DefaultAbbrvName>mar.</DefaultAbbrvName>
<DefaultFullName>marzo</DefaultFullName>
</Month>
<Month>
@@ -241,13 +241,13 @@
</Month>
<Month>
<MonthID>may</MonthID>
- <DefaultAbbrvName>mai</DefaultAbbrvName>
+ <DefaultAbbrvName>mai.</DefaultAbbrvName>
<DefaultFullName>maio</DefaultFullName>
</Month>
<Month>
<MonthID>jun</MonthID>
- <DefaultAbbrvName>xun</DefaultAbbrvName>
- <DefaultFullName>xunio</DefaultFullName>
+ <DefaultAbbrvName>xuñ.</DefaultAbbrvName>
+ <DefaultFullName>xuño</DefaultFullName>
</Month>
<Month>
<MonthID>jul</MonthID>
@@ -283,13 +283,13 @@
<Eras>
<Era>
<EraID>bc</EraID>
- <DefaultAbbrvName>A.C.</DefaultAbbrvName>
- <DefaultFullName>A.C.</DefaultFullName>
+ <DefaultAbbrvName>a. C.</DefaultAbbrvName>
+ <DefaultFullName>antes de Cristo</DefaultFullName>
</Era>
<Era>
<EraID>ad</EraID>
- <DefaultAbbrvName>D.C.</DefaultAbbrvName>
- <DefaultFullName>D.C.</DefaultFullName>
+ <DefaultAbbrvName>d. C.</DefaultAbbrvName>
+ <DefaultFullName>despois de Cristo</DefaultFullName>
</Era>
</Eras>
<StartDayOfWeek>
@@ -326,16 +326,16 @@
<ReservedWords>
<trueWord>verdadeiro</trueWord>
<falseWord>falso</falseWord>
- <quarter1Word>1er trimestre</quarter1Word>
- <quarter2Word>2on trimestre</quarter2Word>
- <quarter3Word>3er trimestre</quarter3Word>
- <quarter4Word>4rt trimestre</quarter4Word>
+ <quarter1Word>1.º trimestre</quarter1Word>
+ <quarter2Word>2.º trimestre</quarter2Word>
+ <quarter3Word>3.º trimestre</quarter3Word>
+ <quarter4Word>4.º trimestre</quarter4Word>
<aboveWord>enriba</aboveWord>
<belowWord>debaixo</belowWord>
- <quarter1Abbreviation>T1</quarter1Abbreviation>
- <quarter2Abbreviation>T2</quarter2Abbreviation>
- <quarter3Abbreviation>T3</quarter3Abbreviation>
- <quarter4Abbreviation>T4</quarter4Abbreviation>
+ <quarter1Abbreviation>1T</quarter1Abbreviation>
+ <quarter2Abbreviation>2T</quarter2Abbreviation>
+ <quarter3Abbreviation>3T</quarter3Abbreviation>
+ <quarter4Abbreviation>4T</quarter4Abbreviation>
</ReservedWords>
</LC_MISC>
<LC_NumberingLevel ref="en_US"/>
diff --git a/i18npool/source/localedata/data/locale.dtd b/i18npool/source/localedata/data/locale.dtd
index 7d58023a064a..b9ee78f69e79 100644
--- a/i18npool/source/localedata/data/locale.dtd
+++ b/i18npool/source/localedata/data/locale.dtd
@@ -20,13 +20,13 @@
A second possiblity is:
- temporarily change the DOCTYPE of your file to read (all on one line)
- <!DOCTYPE Locale SYSTEM "http://l10n.openoffice.org/unbranded-source/browse/*checkout*/l10n/i18npool/source/localedata/data/locale.dtd">
+ <!DOCTYPE Locale SYSTEM "http://svn.services.openoffice.org/ooo/trunk/i18npool/source/localedata/data/locale.dtd">
- upload it to the form available at http://www.validome.org/
This will validate the file against the HEAD revision of locale.dtd, for
- other revisions you'll have to specify the revision as in
- http://l10n.openoffice.org/unbranded-source/browse/*checkout*/l10n/i18npool/source/localedata/data/locale.dtd?rev=1.14.4.3
+ other revisions you'll have to specify the corresponding tags or cws branch
+ instead of trunk.
Please test locale data files either in a non-product (!) build, which
diff --git a/i18npool/source/localedata/data/localedata_euro.map b/i18npool/source/localedata/data/localedata_euro.map
index 9b46fd2adfa5..1a28eb537bd5 100644
--- a/i18npool/source/localedata/data/localedata_euro.map
+++ b/i18npool/source/localedata/data/localedata_euro.map
@@ -1,6 +1,7 @@
OOO_1.1 {
global:
GetVersionInfo;
+getAllCalendars_ast_ES;
getAllCalendars_be_BY;
getAllCalendars_bg_BG;
getAllCalendars_br_FR;
@@ -53,6 +54,7 @@ getAllCalendars_pt_BR;
getAllCalendars_pt_PT;
getAllCalendars_ro_RO;
getAllCalendars_ru_RU;
+getAllCalendars_sc_IT;
getAllCalendars_sh_ME;
getAllCalendars_sh_RS;
getAllCalendars_sh_YU;
@@ -66,6 +68,7 @@ getAllCalendars_sv_SE;
getAllCalendars_tr_TR;
getAllCalendars_uk_UA;
getAllCalendars_wa_BE;
+getAllCurrencies_ast_ES;
getAllCurrencies_be_BY;
getAllCurrencies_bg_BG;
getAllCurrencies_br_FR;
@@ -118,6 +121,7 @@ getAllCurrencies_pt_BR;
getAllCurrencies_pt_PT;
getAllCurrencies_ro_RO;
getAllCurrencies_ru_RU;
+getAllCurrencies_sc_IT;
getAllCurrencies_sh_ME;
getAllCurrencies_sh_RS;
getAllCurrencies_sh_YU;
@@ -131,6 +135,7 @@ getAllCurrencies_sv_SE;
getAllCurrencies_tr_TR;
getAllCurrencies_uk_UA;
getAllCurrencies_wa_BE;
+getAllFormats0_ast_ES;
getAllFormats0_be_BY;
getAllFormats0_bg_BG;
getAllFormats0_br_FR;
@@ -183,6 +188,7 @@ getAllFormats0_pt_BR;
getAllFormats0_pt_PT;
getAllFormats0_ro_RO;
getAllFormats0_ru_RU;
+getAllFormats0_sc_IT;
getAllFormats0_sh_ME;
getAllFormats0_sh_RS;
getAllFormats0_sh_YU;
@@ -196,6 +202,7 @@ getAllFormats0_sv_SE;
getAllFormats0_tr_TR;
getAllFormats0_uk_UA;
getAllFormats0_wa_BE;
+getBreakIteratorRules_ast_ES;
getBreakIteratorRules_be_BY;
getBreakIteratorRules_bg_BG;
getBreakIteratorRules_br_FR;
@@ -248,6 +255,7 @@ getBreakIteratorRules_pt_BR;
getBreakIteratorRules_pt_PT;
getBreakIteratorRules_ro_RO;
getBreakIteratorRules_ru_RU;
+getBreakIteratorRules_sc_IT;
getBreakIteratorRules_sh_ME;
getBreakIteratorRules_sh_RS;
getBreakIteratorRules_sh_YU;
@@ -261,6 +269,7 @@ getBreakIteratorRules_sv_SE;
getBreakIteratorRules_tr_TR;
getBreakIteratorRules_uk_UA;
getBreakIteratorRules_wa_BE;
+getCollationOptions_ast_ES;
getCollationOptions_be_BY;
getCollationOptions_bg_BG;
getCollationOptions_br_FR;
@@ -313,6 +322,7 @@ getCollationOptions_pt_BR;
getCollationOptions_pt_PT;
getCollationOptions_ro_RO;
getCollationOptions_ru_RU;
+getCollationOptions_sc_IT;
getCollationOptions_sh_ME;
getCollationOptions_sh_RS;
getCollationOptions_sh_YU;
@@ -326,6 +336,7 @@ getCollationOptions_sv_SE;
getCollationOptions_tr_TR;
getCollationOptions_uk_UA;
getCollationOptions_wa_BE;
+getCollatorImplementation_ast_ES;
getCollatorImplementation_be_BY;
getCollatorImplementation_bg_BG;
getCollatorImplementation_br_FR;
@@ -378,6 +389,7 @@ getCollatorImplementation_pt_BR;
getCollatorImplementation_pt_PT;
getCollatorImplementation_ro_RO;
getCollatorImplementation_ru_RU;
+getCollatorImplementation_sc_IT;
getCollatorImplementation_sh_ME;
getCollatorImplementation_sh_RS;
getCollatorImplementation_sh_YU;
@@ -391,6 +403,7 @@ getCollatorImplementation_sv_SE;
getCollatorImplementation_tr_TR;
getCollatorImplementation_uk_UA;
getCollatorImplementation_wa_BE;
+getContinuousNumberingLevels_ast_ES;
getContinuousNumberingLevels_be_BY;
getContinuousNumberingLevels_bg_BG;
getContinuousNumberingLevels_br_FR;
@@ -443,6 +456,7 @@ getContinuousNumberingLevels_pt_BR;
getContinuousNumberingLevels_pt_PT;
getContinuousNumberingLevels_ro_RO;
getContinuousNumberingLevels_ru_RU;
+getContinuousNumberingLevels_sc_IT;
getContinuousNumberingLevels_sh_ME;
getContinuousNumberingLevels_sh_RS;
getContinuousNumberingLevels_sh_YU;
@@ -456,6 +470,7 @@ getContinuousNumberingLevels_sv_SE;
getContinuousNumberingLevels_tr_TR;
getContinuousNumberingLevels_uk_UA;
getContinuousNumberingLevels_wa_BE;
+getFollowPageWords_ast_ES;
getFollowPageWords_be_BY;
getFollowPageWords_bg_BG;
getFollowPageWords_br_FR;
@@ -508,6 +523,7 @@ getFollowPageWords_pt_BR;
getFollowPageWords_pt_PT;
getFollowPageWords_ro_RO;
getFollowPageWords_ru_RU;
+getFollowPageWords_sc_IT;
getFollowPageWords_sh_ME;
getFollowPageWords_sh_RS;
getFollowPageWords_sh_YU;
@@ -521,6 +537,7 @@ getFollowPageWords_sv_SE;
getFollowPageWords_tr_TR;
getFollowPageWords_uk_UA;
getFollowPageWords_wa_BE;
+getForbiddenCharacters_ast_ES;
getForbiddenCharacters_be_BY;
getForbiddenCharacters_bg_BG;
getForbiddenCharacters_br_FR;
@@ -573,6 +590,7 @@ getForbiddenCharacters_pt_BR;
getForbiddenCharacters_pt_PT;
getForbiddenCharacters_ro_RO;
getForbiddenCharacters_ru_RU;
+getForbiddenCharacters_sc_IT;
getForbiddenCharacters_sh_ME;
getForbiddenCharacters_sh_RS;
getForbiddenCharacters_sh_YU;
@@ -586,6 +604,7 @@ getForbiddenCharacters_sv_SE;
getForbiddenCharacters_tr_TR;
getForbiddenCharacters_uk_UA;
getForbiddenCharacters_wa_BE;
+getIndexAlgorithm_ast_ES;
getIndexAlgorithm_be_BY;
getIndexAlgorithm_bg_BG;
getIndexAlgorithm_br_FR;
@@ -638,6 +657,7 @@ getIndexAlgorithm_pt_BR;
getIndexAlgorithm_pt_PT;
getIndexAlgorithm_ro_RO;
getIndexAlgorithm_ru_RU;
+getIndexAlgorithm_sc_IT;
getIndexAlgorithm_sh_ME;
getIndexAlgorithm_sh_RS;
getIndexAlgorithm_sh_YU;
@@ -651,6 +671,7 @@ getIndexAlgorithm_sv_SE;
getIndexAlgorithm_tr_TR;
getIndexAlgorithm_uk_UA;
getIndexAlgorithm_wa_BE;
+getLCInfo_ast_ES;
getLCInfo_be_BY;
getLCInfo_bg_BG;
getLCInfo_br_FR;
@@ -703,6 +724,7 @@ getLCInfo_pt_BR;
getLCInfo_pt_PT;
getLCInfo_ro_RO;
getLCInfo_ru_RU;
+getLCInfo_sc_IT;
getLCInfo_sh_ME;
getLCInfo_sh_RS;
getLCInfo_sh_YU;
@@ -716,6 +738,7 @@ getLCInfo_sv_SE;
getLCInfo_tr_TR;
getLCInfo_uk_UA;
getLCInfo_wa_BE;
+getLocaleItem_ast_ES;
getLocaleItem_be_BY;
getLocaleItem_bg_BG;
getLocaleItem_br_FR;
@@ -768,6 +791,7 @@ getLocaleItem_pt_BR;
getLocaleItem_pt_PT;
getLocaleItem_ro_RO;
getLocaleItem_ru_RU;
+getLocaleItem_sc_IT;
getLocaleItem_sh_ME;
getLocaleItem_sh_RS;
getLocaleItem_sh_YU;
@@ -781,6 +805,7 @@ getLocaleItem_sv_SE;
getLocaleItem_tr_TR;
getLocaleItem_uk_UA;
getLocaleItem_wa_BE;
+getOutlineNumberingLevels_ast_ES;
getOutlineNumberingLevels_be_BY;
getOutlineNumberingLevels_bg_BG;
getOutlineNumberingLevels_br_FR;
@@ -833,6 +858,7 @@ getOutlineNumberingLevels_pt_BR;
getOutlineNumberingLevels_pt_PT;
getOutlineNumberingLevels_ro_RO;
getOutlineNumberingLevels_ru_RU;
+getOutlineNumberingLevels_sc_IT;
getOutlineNumberingLevels_sh_ME;
getOutlineNumberingLevels_sh_RS;
getOutlineNumberingLevels_sh_YU;
@@ -846,6 +872,7 @@ getOutlineNumberingLevels_sv_SE;
getOutlineNumberingLevels_tr_TR;
getOutlineNumberingLevels_uk_UA;
getOutlineNumberingLevels_wa_BE;
+getReservedWords_ast_ES;
getReservedWords_be_BY;
getReservedWords_bg_BG;
getReservedWords_br_FR;
@@ -898,6 +925,7 @@ getReservedWords_pt_BR;
getReservedWords_pt_PT;
getReservedWords_ro_RO;
getReservedWords_ru_RU;
+getReservedWords_sc_IT;
getReservedWords_sh_ME;
getReservedWords_sh_RS;
getReservedWords_sh_YU;
@@ -911,6 +939,7 @@ getReservedWords_sv_SE;
getReservedWords_tr_TR;
getReservedWords_uk_UA;
getReservedWords_wa_BE;
+getSearchOptions_ast_ES;
getSearchOptions_be_BY;
getSearchOptions_bg_BG;
getSearchOptions_br_FR;
@@ -963,6 +992,7 @@ getSearchOptions_pt_BR;
getSearchOptions_pt_PT;
getSearchOptions_ro_RO;
getSearchOptions_ru_RU;
+getSearchOptions_sc_IT;
getSearchOptions_sh_ME;
getSearchOptions_sh_RS;
getSearchOptions_sh_YU;
@@ -976,6 +1006,7 @@ getSearchOptions_sv_SE;
getSearchOptions_tr_TR;
getSearchOptions_uk_UA;
getSearchOptions_wa_BE;
+getTransliterations_ast_ES;
getTransliterations_be_BY;
getTransliterations_bg_BG;
getTransliterations_br_FR;
@@ -1028,6 +1059,7 @@ getTransliterations_pt_BR;
getTransliterations_pt_PT;
getTransliterations_ro_RO;
getTransliterations_ru_RU;
+getTransliterations_sc_IT;
getTransliterations_sh_ME;
getTransliterations_sh_RS;
getTransliterations_sh_YU;
@@ -1041,6 +1073,7 @@ getTransliterations_sv_SE;
getTransliterations_tr_TR;
getTransliterations_uk_UA;
getTransliterations_wa_BE;
+getUnicodeScripts_ast_ES;
getUnicodeScripts_be_BY;
getUnicodeScripts_bg_BG;
getUnicodeScripts_br_FR;
@@ -1093,6 +1126,7 @@ getUnicodeScripts_pt_BR;
getUnicodeScripts_pt_PT;
getUnicodeScripts_ro_RO;
getUnicodeScripts_ru_RU;
+getUnicodeScripts_sc_IT;
getUnicodeScripts_sh_ME;
getUnicodeScripts_sh_RS;
getUnicodeScripts_sh_YU;
diff --git a/i18npool/source/localedata/data/localedata_others.map b/i18npool/source/localedata/data/localedata_others.map
index 5e32d8bb4a1b..a8212624e8e8 100644
--- a/i18npool/source/localedata/data/localedata_others.map
+++ b/i18npool/source/localedata/data/localedata_others.map
@@ -6,6 +6,7 @@ getAllCalendars_ak_GH;
getAllCalendars_am_ET;
getAllCalendars_ar_EG;
getAllCalendars_ar_LB;
+getAllCalendars_ar_OM;
getAllCalendars_ar_SA;
getAllCalendars_ar_TN;
getAllCalendars_az_AZ;
@@ -44,6 +45,7 @@ getAllCalendars_my_MM;
getAllCalendars_ne_NP;
getAllCalendars_nr_ZA;
getAllCalendars_nso_ZA;
+getAllCalendars_om_ET;
getAllCalendars_or_IN;
getAllCalendars_pa_IN;
getAllCalendars_rw_RW;
@@ -62,6 +64,7 @@ getAllCalendars_tk_TM;
getAllCalendars_tn_ZA;
getAllCalendars_tpi_PG;
getAllCalendars_ts_ZA;
+getAllCalendars_ug_CN;
getAllCalendars_uz_UZ;
getAllCalendars_ve_ZA;
getAllCalendars_vi_VN;
@@ -78,6 +81,7 @@ getAllCurrencies_ak_GH;
getAllCurrencies_am_ET;
getAllCurrencies_ar_EG;
getAllCurrencies_ar_LB;
+getAllCurrencies_ar_OM;
getAllCurrencies_ar_SA;
getAllCurrencies_ar_TN;
getAllCurrencies_az_AZ;
@@ -116,6 +120,7 @@ getAllCurrencies_my_MM;
getAllCurrencies_ne_NP;
getAllCurrencies_nr_ZA;
getAllCurrencies_nso_ZA;
+getAllCurrencies_om_ET;
getAllCurrencies_or_IN;
getAllCurrencies_pa_IN;
getAllCurrencies_rw_RW;
@@ -134,6 +139,7 @@ getAllCurrencies_tk_TM;
getAllCurrencies_tn_ZA;
getAllCurrencies_tpi_PG;
getAllCurrencies_ts_ZA;
+getAllCurrencies_ug_CN;
getAllCurrencies_uz_UZ;
getAllCurrencies_ve_ZA;
getAllCurrencies_vi_VN;
@@ -150,6 +156,7 @@ getAllFormats0_ak_GH;
getAllFormats0_am_ET;
getAllFormats0_ar_EG;
getAllFormats0_ar_LB;
+getAllFormats0_ar_OM;
getAllFormats0_ar_SA;
getAllFormats0_ar_TN;
getAllFormats0_az_AZ;
@@ -188,6 +195,7 @@ getAllFormats0_my_MM;
getAllFormats0_ne_NP;
getAllFormats0_nr_ZA;
getAllFormats0_nso_ZA;
+getAllFormats0_om_ET;
getAllFormats0_or_IN;
getAllFormats0_pa_IN;
getAllFormats0_rw_RW;
@@ -206,6 +214,7 @@ getAllFormats0_tk_TM;
getAllFormats0_tn_ZA;
getAllFormats0_tpi_PG;
getAllFormats0_ts_ZA;
+getAllFormats0_ug_CN;
getAllFormats0_uz_UZ;
getAllFormats0_ve_ZA;
getAllFormats0_vi_VN;
@@ -222,6 +231,7 @@ getBreakIteratorRules_ak_GH;
getBreakIteratorRules_am_ET;
getBreakIteratorRules_ar_EG;
getBreakIteratorRules_ar_LB;
+getBreakIteratorRules_ar_OM;
getBreakIteratorRules_ar_SA;
getBreakIteratorRules_ar_TN;
getBreakIteratorRules_az_AZ;
@@ -260,6 +270,7 @@ getBreakIteratorRules_my_MM;
getBreakIteratorRules_ne_NP;
getBreakIteratorRules_nr_ZA;
getBreakIteratorRules_nso_ZA;
+getBreakIteratorRules_om_ET;
getBreakIteratorRules_or_IN;
getBreakIteratorRules_pa_IN;
getBreakIteratorRules_rw_RW;
@@ -278,6 +289,7 @@ getBreakIteratorRules_tk_TM;
getBreakIteratorRules_tn_ZA;
getBreakIteratorRules_tpi_PG;
getBreakIteratorRules_ts_ZA;
+getBreakIteratorRules_ug_CN;
getBreakIteratorRules_uz_UZ;
getBreakIteratorRules_ve_ZA;
getBreakIteratorRules_vi_VN;
@@ -294,6 +306,7 @@ getCollationOptions_ak_GH;
getCollationOptions_am_ET;
getCollationOptions_ar_EG;
getCollationOptions_ar_LB;
+getCollationOptions_ar_OM;
getCollationOptions_ar_SA;
getCollationOptions_ar_TN;
getCollationOptions_az_AZ;
@@ -332,6 +345,7 @@ getCollationOptions_my_MM;
getCollationOptions_ne_NP;
getCollationOptions_nr_ZA;
getCollationOptions_nso_ZA;
+getCollationOptions_om_ET;
getCollationOptions_or_IN;
getCollationOptions_pa_IN;
getCollationOptions_rw_RW;
@@ -350,6 +364,7 @@ getCollationOptions_tk_TM;
getCollationOptions_tn_ZA;
getCollationOptions_tpi_PG;
getCollationOptions_ts_ZA;
+getCollationOptions_ug_CN;
getCollationOptions_uz_UZ;
getCollationOptions_ve_ZA;
getCollationOptions_vi_VN;
@@ -366,6 +381,7 @@ getCollatorImplementation_ak_GH;
getCollatorImplementation_am_ET;
getCollatorImplementation_ar_EG;
getCollatorImplementation_ar_LB;
+getCollatorImplementation_ar_OM;
getCollatorImplementation_ar_SA;
getCollatorImplementation_ar_TN;
getCollatorImplementation_az_AZ;
@@ -404,6 +420,7 @@ getCollatorImplementation_my_MM;
getCollatorImplementation_ne_NP;
getCollatorImplementation_nr_ZA;
getCollatorImplementation_nso_ZA;
+getCollatorImplementation_om_ET;
getCollatorImplementation_or_IN;
getCollatorImplementation_pa_IN;
getCollatorImplementation_rw_RW;
@@ -422,6 +439,7 @@ getCollatorImplementation_tk_TM;
getCollatorImplementation_tn_ZA;
getCollatorImplementation_tpi_PG;
getCollatorImplementation_ts_ZA;
+getCollatorImplementation_ug_CN;
getCollatorImplementation_uz_UZ;
getCollatorImplementation_ve_ZA;
getCollatorImplementation_vi_VN;
@@ -438,6 +456,7 @@ getContinuousNumberingLevels_ak_GH;
getContinuousNumberingLevels_am_ET;
getContinuousNumberingLevels_ar_EG;
getContinuousNumberingLevels_ar_LB;
+getContinuousNumberingLevels_ar_OM;
getContinuousNumberingLevels_ar_SA;
getContinuousNumberingLevels_ar_TN;
getContinuousNumberingLevels_az_AZ;
@@ -476,6 +495,7 @@ getContinuousNumberingLevels_my_MM;
getContinuousNumberingLevels_ne_NP;
getContinuousNumberingLevels_nr_ZA;
getContinuousNumberingLevels_nso_ZA;
+getContinuousNumberingLevels_om_ET;
getContinuousNumberingLevels_or_IN;
getContinuousNumberingLevels_pa_IN;
getContinuousNumberingLevels_rw_RW;
@@ -494,6 +514,7 @@ getContinuousNumberingLevels_tk_TM;
getContinuousNumberingLevels_tn_ZA;
getContinuousNumberingLevels_tpi_PG;
getContinuousNumberingLevels_ts_ZA;
+getContinuousNumberingLevels_ug_CN;
getContinuousNumberingLevels_uz_UZ;
getContinuousNumberingLevels_ve_ZA;
getContinuousNumberingLevels_vi_VN;
@@ -510,6 +531,7 @@ getFollowPageWords_ak_GH;
getFollowPageWords_am_ET;
getFollowPageWords_ar_EG;
getFollowPageWords_ar_LB;
+getFollowPageWords_ar_OM;
getFollowPageWords_ar_SA;
getFollowPageWords_ar_TN;
getFollowPageWords_az_AZ;
@@ -548,6 +570,7 @@ getFollowPageWords_my_MM;
getFollowPageWords_ne_NP;
getFollowPageWords_nr_ZA;
getFollowPageWords_nso_ZA;
+getFollowPageWords_om_ET;
getFollowPageWords_or_IN;
getFollowPageWords_pa_IN;
getFollowPageWords_rw_RW;
@@ -566,6 +589,7 @@ getFollowPageWords_tk_TM;
getFollowPageWords_tn_ZA;
getFollowPageWords_tpi_PG;
getFollowPageWords_ts_ZA;
+getFollowPageWords_ug_CN;
getFollowPageWords_uz_UZ;
getFollowPageWords_ve_ZA;
getFollowPageWords_vi_VN;
@@ -582,6 +606,7 @@ getForbiddenCharacters_ak_GH;
getForbiddenCharacters_am_ET;
getForbiddenCharacters_ar_EG;
getForbiddenCharacters_ar_LB;
+getForbiddenCharacters_ar_OM;
getForbiddenCharacters_ar_SA;
getForbiddenCharacters_ar_TN;
getForbiddenCharacters_az_AZ;
@@ -620,6 +645,7 @@ getForbiddenCharacters_my_MM;
getForbiddenCharacters_ne_NP;
getForbiddenCharacters_nr_ZA;
getForbiddenCharacters_nso_ZA;
+getForbiddenCharacters_om_ET;
getForbiddenCharacters_or_IN;
getForbiddenCharacters_pa_IN;
getForbiddenCharacters_rw_RW;
@@ -638,6 +664,7 @@ getForbiddenCharacters_tk_TM;
getForbiddenCharacters_tn_ZA;
getForbiddenCharacters_tpi_PG;
getForbiddenCharacters_ts_ZA;
+getForbiddenCharacters_ug_CN;
getForbiddenCharacters_uz_UZ;
getForbiddenCharacters_ve_ZA;
getForbiddenCharacters_vi_VN;
@@ -654,6 +681,7 @@ getIndexAlgorithm_ak_GH;
getIndexAlgorithm_am_ET;
getIndexAlgorithm_ar_EG;
getIndexAlgorithm_ar_LB;
+getIndexAlgorithm_ar_OM;
getIndexAlgorithm_ar_SA;
getIndexAlgorithm_ar_TN;
getIndexAlgorithm_az_AZ;
@@ -692,6 +720,7 @@ getIndexAlgorithm_my_MM;
getIndexAlgorithm_ne_NP;
getIndexAlgorithm_nr_ZA;
getIndexAlgorithm_nso_ZA;
+getIndexAlgorithm_om_ET;
getIndexAlgorithm_or_IN;
getIndexAlgorithm_pa_IN;
getIndexAlgorithm_rw_RW;
@@ -710,6 +739,7 @@ getIndexAlgorithm_tk_TM;
getIndexAlgorithm_tn_ZA;
getIndexAlgorithm_tpi_PG;
getIndexAlgorithm_ts_ZA;
+getIndexAlgorithm_ug_CN;
getIndexAlgorithm_uz_UZ;
getIndexAlgorithm_ve_ZA;
getIndexAlgorithm_vi_VN;
@@ -726,6 +756,7 @@ getLCInfo_ak_GH;
getLCInfo_am_ET;
getLCInfo_ar_EG;
getLCInfo_ar_LB;
+getLCInfo_ar_OM;
getLCInfo_ar_SA;
getLCInfo_ar_TN;
getLCInfo_az_AZ;
@@ -764,6 +795,7 @@ getLCInfo_my_MM;
getLCInfo_ne_NP;
getLCInfo_nr_ZA;
getLCInfo_nso_ZA;
+getLCInfo_om_ET;
getLCInfo_or_IN;
getLCInfo_pa_IN;
getLCInfo_rw_RW;
@@ -782,6 +814,7 @@ getLCInfo_tk_TM;
getLCInfo_tn_ZA;
getLCInfo_tpi_PG;
getLCInfo_ts_ZA;
+getLCInfo_ug_CN;
getLCInfo_uz_UZ;
getLCInfo_ve_ZA;
getLCInfo_vi_VN;
@@ -798,6 +831,7 @@ getLocaleItem_ak_GH;
getLocaleItem_am_ET;
getLocaleItem_ar_EG;
getLocaleItem_ar_LB;
+getLocaleItem_ar_OM;
getLocaleItem_ar_SA;
getLocaleItem_ar_TN;
getLocaleItem_az_AZ;
@@ -836,6 +870,7 @@ getLocaleItem_my_MM;
getLocaleItem_ne_NP;
getLocaleItem_nr_ZA;
getLocaleItem_nso_ZA;
+getLocaleItem_om_ET;
getLocaleItem_or_IN;
getLocaleItem_pa_IN;
getLocaleItem_rw_RW;
@@ -854,6 +889,7 @@ getLocaleItem_tk_TM;
getLocaleItem_tn_ZA;
getLocaleItem_tpi_PG;
getLocaleItem_ts_ZA;
+getLocaleItem_ug_CN;
getLocaleItem_uz_UZ;
getLocaleItem_ve_ZA;
getLocaleItem_vi_VN;
@@ -870,6 +906,7 @@ getOutlineNumberingLevels_ak_GH;
getOutlineNumberingLevels_am_ET;
getOutlineNumberingLevels_ar_EG;
getOutlineNumberingLevels_ar_LB;
+getOutlineNumberingLevels_ar_OM;
getOutlineNumberingLevels_ar_SA;
getOutlineNumberingLevels_ar_TN;
getOutlineNumberingLevels_az_AZ;
@@ -908,6 +945,7 @@ getOutlineNumberingLevels_my_MM;
getOutlineNumberingLevels_ne_NP;
getOutlineNumberingLevels_nr_ZA;
getOutlineNumberingLevels_nso_ZA;
+getOutlineNumberingLevels_om_ET;
getOutlineNumberingLevels_or_IN;
getOutlineNumberingLevels_pa_IN;
getOutlineNumberingLevels_rw_RW;
@@ -926,6 +964,7 @@ getOutlineNumberingLevels_tk_TM;
getOutlineNumberingLevels_tn_ZA;
getOutlineNumberingLevels_tpi_PG;
getOutlineNumberingLevels_ts_ZA;
+getOutlineNumberingLevels_ug_CN;
getOutlineNumberingLevels_uz_UZ;
getOutlineNumberingLevels_ve_ZA;
getOutlineNumberingLevels_vi_VN;
@@ -942,6 +981,7 @@ getReservedWords_ak_GH;
getReservedWords_am_ET;
getReservedWords_ar_EG;
getReservedWords_ar_LB;
+getReservedWords_ar_OM;
getReservedWords_ar_SA;
getReservedWords_ar_TN;
getReservedWords_az_AZ;
@@ -980,6 +1020,7 @@ getReservedWords_my_MM;
getReservedWords_ne_NP;
getReservedWords_nr_ZA;
getReservedWords_nso_ZA;
+getReservedWords_om_ET;
getReservedWords_or_IN;
getReservedWords_pa_IN;
getReservedWords_rw_RW;
@@ -998,6 +1039,7 @@ getReservedWords_tk_TM;
getReservedWords_tn_ZA;
getReservedWords_tpi_PG;
getReservedWords_ts_ZA;
+getReservedWords_ug_CN;
getReservedWords_uz_UZ;
getReservedWords_ve_ZA;
getReservedWords_vi_VN;
@@ -1014,6 +1056,7 @@ getSearchOptions_ak_GH;
getSearchOptions_am_ET;
getSearchOptions_ar_EG;
getSearchOptions_ar_LB;
+getSearchOptions_ar_OM;
getSearchOptions_ar_SA;
getSearchOptions_ar_TN;
getSearchOptions_az_AZ;
@@ -1052,6 +1095,7 @@ getSearchOptions_my_MM;
getSearchOptions_ne_NP;
getSearchOptions_nr_ZA;
getSearchOptions_nso_ZA;
+getSearchOptions_om_ET;
getSearchOptions_or_IN;
getSearchOptions_pa_IN;
getSearchOptions_rw_RW;
@@ -1070,6 +1114,7 @@ getSearchOptions_tk_TM;
getSearchOptions_tn_ZA;
getSearchOptions_tpi_PG;
getSearchOptions_ts_ZA;
+getSearchOptions_ug_CN;
getSearchOptions_uz_UZ;
getSearchOptions_ve_ZA;
getSearchOptions_vi_VN;
@@ -1086,6 +1131,7 @@ getTransliterations_ak_GH;
getTransliterations_am_ET;
getTransliterations_ar_EG;
getTransliterations_ar_LB;
+getTransliterations_ar_OM;
getTransliterations_ar_SA;
getTransliterations_ar_TN;
getTransliterations_az_AZ;
@@ -1124,6 +1170,7 @@ getTransliterations_my_MM;
getTransliterations_ne_NP;
getTransliterations_nr_ZA;
getTransliterations_nso_ZA;
+getTransliterations_om_ET;
getTransliterations_or_IN;
getTransliterations_pa_IN;
getTransliterations_rw_RW;
@@ -1142,6 +1189,7 @@ getTransliterations_tk_TM;
getTransliterations_tn_ZA;
getTransliterations_tpi_PG;
getTransliterations_ts_ZA;
+getTransliterations_ug_CN;
getTransliterations_uz_UZ;
getTransliterations_ve_ZA;
getTransliterations_vi_VN;
@@ -1158,6 +1206,7 @@ getUnicodeScripts_ak_GH;
getUnicodeScripts_am_ET;
getUnicodeScripts_ar_EG;
getUnicodeScripts_ar_LB;
+getUnicodeScripts_ar_OM;
getUnicodeScripts_ar_SA;
getUnicodeScripts_ar_TN;
getUnicodeScripts_az_AZ;
@@ -1196,6 +1245,7 @@ getUnicodeScripts_my_MM;
getUnicodeScripts_ne_NP;
getUnicodeScripts_nr_ZA;
getUnicodeScripts_nso_ZA;
+getUnicodeScripts_om_ET;
getUnicodeScripts_or_IN;
getUnicodeScripts_pa_IN;
getUnicodeScripts_rw_RW;
@@ -1214,6 +1264,7 @@ getUnicodeScripts_tk_TM;
getUnicodeScripts_tn_ZA;
getUnicodeScripts_tpi_PG;
getUnicodeScripts_ts_ZA;
+getUnicodeScripts_ug_CN;
getUnicodeScripts_uz_UZ;
getUnicodeScripts_ve_ZA;
getUnicodeScripts_vi_VN;
diff --git a/i18npool/source/localedata/data/makefile.mk b/i18npool/source/localedata/data/makefile.mk
index 3eca889e7ccc..9fc29c722fb2 100644
--- a/i18npool/source/localedata/data/makefile.mk
+++ b/i18npool/source/localedata/data/makefile.mk
@@ -76,6 +76,7 @@ MY_MISC_CXXFILES = \
$(MISC)$/localedata_ar_LB.cxx \
$(MISC)$/localedata_ar_SA.cxx \
$(MISC)$/localedata_ar_TN.cxx \
+ $(MISC)$/localedata_ast_ES.cxx \
$(MISC)$/localedata_az_AZ.cxx \
$(MISC)$/localedata_be_BY.cxx \
$(MISC)$/localedata_bg_BG.cxx \
@@ -193,6 +194,7 @@ MY_MISC_CXXFILES = \
$(MISC)$/localedata_nr_ZA.cxx \
$(MISC)$/localedata_nso_ZA.cxx \
$(MISC)$/localedata_oc_FR.cxx \
+ $(MISC)$/localedata_om_ET.cxx \
$(MISC)$/localedata_or_IN.cxx \
$(MISC)$/localedata_pa_IN.cxx \
$(MISC)$/localedata_pl_PL.cxx \
@@ -227,6 +229,7 @@ MY_MISC_CXXFILES = \
$(MISC)$/localedata_tpi_PG.cxx \
$(MISC)$/localedata_tr_TR.cxx \
$(MISC)$/localedata_ts_ZA.cxx \
+ $(MISC)$/localedata_ug_CN.cxx \
$(MISC)$/localedata_uk_UA.cxx \
$(MISC)$/localedata_uz_UZ.cxx \
$(MISC)$/localedata_ve_ZA.cxx \
@@ -323,6 +326,7 @@ DEF3NAME=$(SHL3TARGET)
SHL3STDLIBS= $(LINK_LOCALEDATA_EN_LIB)
SHL3DEPN=$(SHL1TARGETN) $(SHL2TARGETN)
SHL3OBJS= \
+ $(SLO)$/localedata_ast_ES.obj \
$(SLO)$/localedata_be_BY.obj \
$(SLO)$/localedata_bg_BG.obj \
$(SLO)$/localedata_br_FR.obj \
@@ -375,6 +379,7 @@ SHL3OBJS= \
$(SLO)$/localedata_pt_PT.obj \
$(SLO)$/localedata_ru_RU.obj \
$(SLO)$/localedata_ro_RO.obj \
+ $(SLO)$/localedata_sc_IT.obj \
$(SLO)$/localedata_sh_ME.obj \
$(SLO)$/localedata_sh_RS.obj \
$(SLO)$/localedata_sh_YU.obj \
@@ -412,6 +417,7 @@ SHL4OBJS= \
$(SLO)$/localedata_am_ET.obj \
$(SLO)$/localedata_ar_EG.obj \
$(SLO)$/localedata_ar_LB.obj \
+ $(SLO)$/localedata_ar_OM.obj \
$(SLO)$/localedata_ar_SA.obj \
$(SLO)$/localedata_ar_TN.obj \
$(SLO)$/localedata_az_AZ.obj \
@@ -450,6 +456,7 @@ SHL4OBJS= \
$(SLO)$/localedata_ne_NP.obj \
$(SLO)$/localedata_nr_ZA.obj \
$(SLO)$/localedata_nso_ZA.obj \
+ $(SLO)$/localedata_om_ET.obj \
$(SLO)$/localedata_or_IN.obj \
$(SLO)$/localedata_pa_IN.obj \
$(SLO)$/localedata_rw_RW.obj \
@@ -468,6 +475,7 @@ SHL4OBJS= \
$(SLO)$/localedata_tn_ZA.obj \
$(SLO)$/localedata_tpi_PG.obj \
$(SLO)$/localedata_ts_ZA.obj \
+ $(SLO)$/localedata_ug_CN.obj \
$(SLO)$/localedata_uz_UZ.obj \
$(SLO)$/localedata_ve_ZA.obj \
$(SLO)$/localedata_vi_VN.obj \
diff --git a/i18npool/source/localedata/data/oc_FR.xml b/i18npool/source/localedata/data/oc_FR.xml
index 236f1c8dbb09..ef3dd47c0dc6 100644
--- a/i18npool/source/localedata/data/oc_FR.xml
+++ b/i18npool/source/localedata/data/oc_FR.xml
@@ -18,7 +18,7 @@
<DecimalSeparator>,</DecimalSeparator>
<TimeSeparator>:</TimeSeparator>
<Time100SecSeparator>,</Time100SecSeparator>
- <ListSeparator>:</ListSeparator>
+ <ListSeparator>;</ListSeparator>
<LongDateDayOfWeekSeparator> </LongDateDayOfWeekSeparator>
<LongDateDaySeparator>, </LongDateDaySeparator>
<LongDateMonthSeparator> de </LongDateMonthSeparator>
diff --git a/i18npool/source/localedata/data/om_ET.xml b/i18npool/source/localedata/data/om_ET.xml
new file mode 100644
index 000000000000..88418fbb7ebb
--- /dev/null
+++ b/i18npool/source/localedata/data/om_ET.xml
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Locale SYSTEM "locale.dtd">
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>om</LangID>
+ <DefaultName>Oromo, West Central</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>ET</CountryID>
+ <DefaultName>Ethiopia</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>/</DateSeparator>
+ <ThousandSeparator>,</ThousandSeparator>
+ <DecimalSeparator>.</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>.</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>, </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>‘</QuotationStart>
+ <QuotationEnd>’</QuotationEnd>
+ <DoubleQuotationStart>“</DoubleQuotationStart>
+ <DoubleQuotationEnd>”</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>AM</TimeAM>
+ <TimePM>PM</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$Qar-0472]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#,###.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0.00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0.00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0.00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY]#,##0;([CURRENCY]#,##0)</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY]#,##0.00;([CURRENCY]#,##0.00)</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY]#,##0;[RED]([CURRENCY]#,##0)</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY]#,##0.00;[RED]([CURRENCY]#,##0.00)</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>CCC#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY]#,##0.--;[RED]([CURRENCY]#,##0.--)</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>D/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNNDD, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>DD/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>DD/MM/YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D, MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+ <FormatCode>NN, DD/MMM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+ <FormatCode>NN, D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN, D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>MMM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>DD/MM/YY HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>DD/MM/YYYY HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION>
+ <Collator default="true" unoid="alphanumeric"/>
+ <CollationOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </CollationOptions>
+ </LC_COLLATION>
+ <LC_SEARCH>
+ <SearchOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </SearchOptions>
+ </LC_SEARCH>
+ <LC_INDEX>
+ <IndexKey phonetic="false" default="true" unoid="alphanumeric">A-Z</IndexKey>
+ <UnicodeScript>0</UnicodeScript>
+ <UnicodeScript>1</UnicodeScript>
+ <FollowPageWord>Fl</FollowPageWord>
+ <FollowPageWord>Flt</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>Dil</DefaultAbbrvName>
+ <DefaultFullName>Dilbata</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>Wix</DefaultAbbrvName>
+ <DefaultFullName>Wiixata</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>Kib</DefaultAbbrvName>
+ <DefaultFullName>Kibxata</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>Rob</DefaultAbbrvName>
+ <DefaultFullName>Roobii</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>Kam</DefaultAbbrvName>
+ <DefaultFullName>Kamisa</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>Jim</DefaultAbbrvName>
+ <DefaultFullName>Jimaata</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>San</DefaultAbbrvName>
+ <DefaultFullName>Sanbat-Xiqqaa</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>Amj</DefaultAbbrvName>
+ <DefaultFullName>Amajjii</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>Gur</DefaultAbbrvName>
+ <DefaultFullName>Gurraandhala</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>Bit</DefaultAbbrvName>
+ <DefaultFullName>Bitootessa</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>Cam</DefaultAbbrvName>
+ <DefaultFullName>Caamsaa</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>Ebl</DefaultAbbrvName>
+ <DefaultFullName>Ebla</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>Wax</DefaultAbbrvName>
+ <DefaultFullName>Waxabajjii</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>Ado</DefaultAbbrvName>
+ <DefaultFullName>Adoolessa</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>Hag</DefaultAbbrvName>
+ <DefaultFullName>Hagayya </DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>Ful</DefaultAbbrvName>
+ <DefaultFullName>Fulbaana</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>Onk</DefaultAbbrvName>
+ <DefaultFullName>Onkoloolessa </DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>Sad</DefaultAbbrvName>
+ <DefaultFullName>Sadaasa</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>Mud</DefaultAbbrvName>
+ <DefaultFullName>Muddee</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>DKD</DefaultAbbrvName>
+ <DefaultFullName>Dhaloota Kiristoosiin Dura</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>DKB</DefaultAbbrvName>
+ <DefaultFullName>Dhaloota Kiristoosiin Booda</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>mon</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>ETB</CurrencyID>
+ <CurrencySymbol>Qar</CurrencySymbol>
+ <BankSymbol>ETB</BankSymbol>
+ <CurrencyName>Qarshii</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION>
+ <Transliteration unoid="LOWERCASE_UPPERCASE"/>
+ <Transliteration unoid="UPPERCASE_LOWERCASE"/>
+ <Transliteration unoid="IGNORE_CASE"/>
+ </LC_TRANSLITERATION>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>Dhugaa</trueWord>
+ <falseWord>Soba</falseWord>
+ <quarter1Word>Bona</quarter1Word>
+ <quarter2Word>Arfaasaa</quarter2Word>
+ <quarter3Word>Ganna</quarter3Word>
+ <quarter4Word>Birraa</quarter4Word>
+ <aboveWord>Gubbaa</aboveWord>
+ <belowWord>Jala</belowWord>
+ <quarter1Abbreviation>Bn</quarter1Abbreviation>
+ <quarter2Abbreviation>Ar</quarter2Abbreviation>
+ <quarter3Abbreviation>Gn</quarter3Abbreviation>
+ <quarter4Abbreviation>Br</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ </LC_NumberingLevel>
+ <LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/data/ro_RO.xml b/i18npool/source/localedata/data/ro_RO.xml
index b5033ce9bb27..ed92d9243cb6 100644
--- a/i18npool/source/localedata/data/ro_RO.xml
+++ b/i18npool/source/localedata/data/ro_RO.xml
@@ -1,380 +1,390 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Locale SYSTEM 'locale.dtd'>
-<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.2">
-<LC_INFO>
-<Language>
-<LangID>ro</LangID>
-<DefaultName>Romanian</DefaultName>
-</Language>
-<Country>
-<CountryID>RO</CountryID>
-<DefaultName>Romania</DefaultName>
-</Country>
-</LC_INFO>
-<LC_CTYPE unoid="generic">
-<Separators>
-<DateSeparator>.</DateSeparator>
-<ThousandSeparator>.</ThousandSeparator>
-<DecimalSeparator>,</DecimalSeparator>
-<TimeSeparator>:</TimeSeparator>
-<Time100SecSeparator>,</Time100SecSeparator>
-<ListSeparator>;</ListSeparator>
-<LongDateDayOfWeekSeparator> </LongDateDayOfWeekSeparator>
-<LongDateDaySeparator> </LongDateDaySeparator>
-<LongDateMonthSeparator> </LongDateMonthSeparator>
-<LongDateYearSeparator> </LongDateYearSeparator>
-</Separators>
-<Markers>
-<QuotationStart>‘</QuotationStart>
-<QuotationEnd>’</QuotationEnd>
-<DoubleQuotationStart>„</DoubleQuotationStart>
-<DoubleQuotationEnd>”</DoubleQuotationEnd>
-</Markers>
-<TimeAM>AM</TimeAM>
-<TimePM>PM</TimePM>
-<MeasurementSystem>Metric</MeasurementSystem>
-</LC_CTYPE>
-<LC_FORMAT>
-<FormatElement msgid="DateFormatskey1" default="true" type="short" usage="DATE" formatindex="18">
-<FormatCode>DD.MM.YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="28">
-<FormatCode>NN DD.MMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="34">
-<FormatCode>MM.YY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="35">
-<FormatCode>DD MMM</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="36">
-<FormatCode>MMMM</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey6" default="false" type="medium" usage="DATE" formatindex="37">
-<FormatCode>QQ/YY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="21">
-<FormatCode>DD.MM.YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey8" default="true" type="medium" usage="DATE" formatindex="20">
-<FormatCode>DD.MM.YY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey9" default="true" type="long" usage="DATE" formatindex="19">
-<FormatCode>NNNND MMMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey10" default="false" type="long" usage="DATE" formatindex="22">
-<FormatCode>D MMM YY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey11" default="false" type="long" usage="DATE" formatindex="23">
-<FormatCode>D MMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey12" default="false" type="long" usage="DATE" formatindex="25">
-<FormatCode>D MMMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey13" default="false" type="long" usage="DATE" formatindex="27">
-<FormatCode>NN D MMM YY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey14" default="false" type="long" usage="DATE" formatindex="29">
-<FormatCode>NN D MMMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="30">
-<FormatCode>NNNND MMMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="24">
-<FormatCode>D. MMM. YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="26">
-<FormatCode>D. MMMM YYYY</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey18" default="false" type="short" usage="DATE" formatindex="31">
-<FormatCode>MM-DD</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey19" default="false" type="medium" usage="DATE" formatindex="32">
-<FormatCode>YY-MM-DD</FormatCode>
-<DefaultName>ISO 8601</DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey20" default="false" type="medium" usage="DATE" formatindex="33">
-<FormatCode>YYYY-MM-DD</FormatCode>
-<DefaultName>ISO 8601</DefaultName>
-</FormatElement>
-<FormatElement msgid="DateFormatskey21" default="false" type="medium" usage="DATE" formatindex="38">
-<FormatCode>WW</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey1" default="true" type="short" usage="TIME" formatindex="39">
-<FormatCode>HH:MM</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey2" default="true" type="medium" usage="TIME" formatindex="40">
-<FormatCode>HH:MM:SS</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey3" default="false" type="short" usage="TIME" formatindex="41">
-<FormatCode>HH:MM AM/PM</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey4" default="false" type="medium" usage="TIME" formatindex="42">
-<FormatCode>HH:MM:SS AM/PM</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
-<FormatCode>[HH]:MM:SS</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
-<FormatCode>MM:SS,00</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
-<FormatCode>[HH]:MM:SS,00</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
-<FormatCode>DD.MM.YY HH:MM</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
-<FormatCode>DD.MM.YYYY HH:MM:SS</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
-<FormatCode>Standard</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
-<FormatCode>0</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
-<FormatCode>0,00</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
-<FormatCode>#.##0</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
-<FormatCode>#.##0,00</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
-<FormatCode>#.###,00</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
-<FormatCode>#.##0 [$lei-418];-#.##0 [$lei-418]</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
-<FormatCode>#.##0,00 [$lei-418];-#.##0,00 [$lei-418]</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
-<FormatCode>#.##0 [$lei-418];[RED]-#.##0 [$lei-418]</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
-<FormatCode>#.##0,00 [$lei-418];[RED]-#.##0,00 [$lei-418]</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
-<FormatCode>#.##0,00 CCC</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
-<FormatCode>#.##0,-- [$lei-418];[RED]-#.##0,-- [$lei-418]</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
-<FormatCode>0%</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
-<FormatCode>0,00%</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
-<FormatCode>0,00E+000</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-<FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
-<FormatCode>0,00E+00</FormatCode>
-<DefaultName></DefaultName>
-</FormatElement>
-</LC_FORMAT>
-<LC_COLLATION ref="en_US"/>
-<LC_SEARCH ref="en_US"/>
-<LC_INDEX>
-<IndexKey unoid="alphanumeric" default="true" phonetic="false">A Ă Â B-I Î J-S Ş T Ţ U-Z</IndexKey>
-<UnicodeScript>0</UnicodeScript>
-<UnicodeScript>1</UnicodeScript>
-<UnicodeScript>2</UnicodeScript>
-<FollowPageWord>p.</FollowPageWord>
-<FollowPageWord>pp.</FollowPageWord>
-</LC_INDEX>
-<LC_CALENDAR>
-<Calendar unoid="gregorian" default="true">
-<DaysOfWeek>
-<Day>
-<DayID>sun</DayID>
-<DefaultAbbrvName>D</DefaultAbbrvName>
-<DefaultFullName>duminică</DefaultFullName>
-</Day>
-<Day>
-<DayID>mon</DayID>
-<DefaultAbbrvName>L</DefaultAbbrvName>
-<DefaultFullName>luni</DefaultFullName>
-</Day>
-<Day>
-<DayID>tue</DayID>
-<DefaultAbbrvName>Ma</DefaultAbbrvName>
-<DefaultFullName>marţi</DefaultFullName>
-</Day>
-<Day>
-<DayID>wed</DayID>
-<DefaultAbbrvName>Mi</DefaultAbbrvName>
-<DefaultFullName>miercuri</DefaultFullName>
-</Day>
-<Day>
-<DayID>thu</DayID>
-<DefaultAbbrvName>J</DefaultAbbrvName>
-<DefaultFullName>joi</DefaultFullName>
-</Day>
-<Day>
-<DayID>fri</DayID>
-<DefaultAbbrvName>V</DefaultAbbrvName>
-<DefaultFullName>vineri</DefaultFullName>
-</Day>
-<Day>
-<DayID>sat</DayID>
-<DefaultAbbrvName>S</DefaultAbbrvName>
-<DefaultFullName>sâmbătă</DefaultFullName>
-</Day>
-</DaysOfWeek>
-<MonthsOfYear>
-<Month>
-<MonthID>jan</MonthID>
-<DefaultAbbrvName>ian</DefaultAbbrvName>
-<DefaultFullName>ianuarie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>feb</MonthID>
-<DefaultAbbrvName>febr</DefaultAbbrvName>
-<DefaultFullName>februarie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>mar</MonthID>
-<DefaultAbbrvName>mar</DefaultAbbrvName>
-<DefaultFullName>martie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>apr</MonthID>
-<DefaultAbbrvName>apr</DefaultAbbrvName>
-<DefaultFullName>aprilie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>may</MonthID>
-<DefaultAbbrvName>mai</DefaultAbbrvName>
-<DefaultFullName>mai</DefaultFullName>
-</Month>
-<Month>
-<MonthID>jun</MonthID>
-<DefaultAbbrvName>iun</DefaultAbbrvName>
-<DefaultFullName>iunie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>jul</MonthID>
-<DefaultAbbrvName>iul</DefaultAbbrvName>
-<DefaultFullName>iulie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>aug</MonthID>
-<DefaultAbbrvName>aug</DefaultAbbrvName>
-<DefaultFullName>august</DefaultFullName>
-</Month>
-<Month>
-<MonthID>sep</MonthID>
-<DefaultAbbrvName>sept</DefaultAbbrvName>
-<DefaultFullName>septembrie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>oct</MonthID>
-<DefaultAbbrvName>oct</DefaultAbbrvName>
-<DefaultFullName>octombrie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>nov</MonthID>
-<DefaultAbbrvName>nov</DefaultAbbrvName>
-<DefaultFullName>noiembrie</DefaultFullName>
-</Month>
-<Month>
-<MonthID>dec</MonthID>
-<DefaultAbbrvName>dec</DefaultAbbrvName>
-<DefaultFullName>decembrie</DefaultFullName>
-</Month>
-</MonthsOfYear>
-<Eras>
-<Era>
-<EraID>bc</EraID>
-<DefaultAbbrvName>î.Hr.</DefaultAbbrvName>
-<DefaultFullName>î.Hr.</DefaultFullName>
-</Era>
-<Era>
-<EraID>ad</EraID>
-<DefaultAbbrvName>d.Hr.</DefaultAbbrvName>
-<DefaultFullName>d.Hr.</DefaultFullName>
-</Era>
-</Eras>
-<StartDayOfWeek>
-<DayID>mon</DayID>
-</StartDayOfWeek>
-<MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
-</Calendar>
-</LC_CALENDAR>
-<LC_CURRENCY>
-<Currency default="true" usedInCompatibleFormatCodes="true">
-<CurrencyID>ROL</CurrencyID>
-<CurrencySymbol>lei</CurrencySymbol>
-<BankSymbol>ROL</BankSymbol>
-<CurrencyName>Leu</CurrencyName>
-<DecimalPlaces>2</DecimalPlaces>
-</Currency>
-</LC_CURRENCY>
-<LC_TRANSLITERATION ref="en_US"/>
-<LC_MISC>
-<ReservedWords>
-<trueWord>adevărat</trueWord>
-<falseWord>fals</falseWord>
-<quarter1Word>trimestrul 1</quarter1Word>
-<quarter2Word>trimestrul 2</quarter2Word>
-<quarter3Word>trimestrul 3</quarter3Word>
-<quarter4Word>trimestrul 4</quarter4Word>
-<aboveWord>deasupra</aboveWord>
-<belowWord>sub</belowWord>
-<quarter1Abbreviation>T1</quarter1Abbreviation>
-<quarter2Abbreviation>T2</quarter2Abbreviation>
-<quarter3Abbreviation>T3</quarter3Abbreviation>
-<quarter4Abbreviation>T4</quarter4Abbreviation>
-</ReservedWords>
-</LC_MISC>
-<LC_NumberingLevel ref="en_US"/>
-<LC_OutLineNumberingLevel ref="en_US"/>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.3">
+ <LC_INFO>
+ <Language>
+ <LangID>ro</LangID>
+ <DefaultName>Romanian</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>RO</CountryID>
+ <DefaultName>Romania</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>.</DateSeparator>
+ <ThousandSeparator>.</ThousandSeparator>
+ <DecimalSeparator>,</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>,</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator> </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator> </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>‘</QuotationStart>
+ <QuotationEnd>’</QuotationEnd>
+ <DoubleQuotationStart>„</DoubleQuotationStart>
+ <DoubleQuotationEnd>”</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>AM</TimeAM>
+ <TimePM>PM</TimePM>
+ <MeasurementSystem>Metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT>
+ <FormatElement msgid="DateFormatskey1" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>DD.MM.YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="28">
+ <FormatCode>NN DD.MMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM.YY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>DD MMM</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ/YY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>DD.MM.YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>DD.MM.YY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNND MMMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D MMM YY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D MMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D MMMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey13" default="false" type="long" usage="DATE" formatindex="27">
+ <FormatCode>NN D MMM YY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN D MMMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND MMMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D. MMM. YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D. MMMM YYYY</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM-DD</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="true" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="true" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="false" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="false" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS,00</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS,00</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>DD.MM.YY HH:MM</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>DD.MM.YYYY HH:MM:SS</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>Standard</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0,00</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#.##0</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#.##0,00</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#.###,00</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>#.##0 [$lei-418];-#.##0 [$lei-418]</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>#.##0,00 [$lei-418];-#.##0,00 [$lei-418]</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>#.##0 [$lei-418];[RED]-#.##0 [$lei-418]</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>#.##0,00 [$lei-418];[RED]-#.##0,00 [$lei-418]</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>#.##0,00 CCC</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>#.##0,-- [$lei-418];[RED]-#.##0,-- [$lei-418]</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0,00%</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0,00E+000</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0,00E+00</FormatCode>
+ <DefaultName></DefaultName>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION ref="en_US"/>
+ <LC_SEARCH ref="en_US"/>
+ <LC_INDEX>
+ <IndexKey unoid="alphanumeric" default="true" phonetic="false">A Ă Â B-I Î J-S Ş T Ţ U-Z</IndexKey>
+ <UnicodeScript>0</UnicodeScript>
+ <UnicodeScript>1</UnicodeScript>
+ <UnicodeScript>2</UnicodeScript>
+ <FollowPageWord>p.</FollowPageWord>
+ <FollowPageWord>pp.</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>D</DefaultAbbrvName>
+ <DefaultFullName>duminică</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>L</DefaultAbbrvName>
+ <DefaultFullName>luni</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>Ma</DefaultAbbrvName>
+ <DefaultFullName>marţi</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>Mi</DefaultAbbrvName>
+ <DefaultFullName>miercuri</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>J</DefaultAbbrvName>
+ <DefaultFullName>joi</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>V</DefaultAbbrvName>
+ <DefaultFullName>vineri</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>S</DefaultAbbrvName>
+ <DefaultFullName>sâmbătă</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>ian</DefaultAbbrvName>
+ <DefaultFullName>ianuarie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>febr</DefaultAbbrvName>
+ <DefaultFullName>februarie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>mar</DefaultAbbrvName>
+ <DefaultFullName>martie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>apr</DefaultAbbrvName>
+ <DefaultFullName>aprilie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>mai</DefaultAbbrvName>
+ <DefaultFullName>mai</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>iun</DefaultAbbrvName>
+ <DefaultFullName>iunie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>iul</DefaultAbbrvName>
+ <DefaultFullName>iulie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>aug</DefaultAbbrvName>
+ <DefaultFullName>august</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>sept</DefaultAbbrvName>
+ <DefaultFullName>septembrie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>oct</DefaultAbbrvName>
+ <DefaultFullName>octombrie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>nov</DefaultAbbrvName>
+ <DefaultFullName>noiembrie</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>dec</DefaultAbbrvName>
+ <DefaultFullName>decembrie</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>î.Hr.</DefaultAbbrvName>
+ <DefaultFullName>î.Hr.</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>d.Hr.</DefaultAbbrvName>
+ <DefaultFullName>d.Hr.</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>mon</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>RON</CurrencyID>
+ <CurrencySymbol>lei</CurrencySymbol>
+ <BankSymbol>RON</BankSymbol>
+ <CurrencyName>Leu</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ <Currency default="false" usedInCompatibleFormatCodes="false" legacyOnly="true">
+ <!-- legacyOnly to avoid the duplicated listing in the number formatter
+ dialog because of the identical CurrencySymbol, which also confuses
+ the currency listbox selection mechanism. -->
+ <CurrencyID>ROL</CurrencyID>
+ <CurrencySymbol>lei</CurrencySymbol>
+ <BankSymbol>ROL</BankSymbol>
+ <CurrencyName>Leu</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION ref="en_US"/>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>adevărat</trueWord>
+ <falseWord>fals</falseWord>
+ <quarter1Word>trimestrul 1</quarter1Word>
+ <quarter2Word>trimestrul 2</quarter2Word>
+ <quarter3Word>trimestrul 3</quarter3Word>
+ <quarter4Word>trimestrul 4</quarter4Word>
+ <aboveWord>deasupra</aboveWord>
+ <belowWord>sub</belowWord>
+ <quarter1Abbreviation>T1</quarter1Abbreviation>
+ <quarter2Abbreviation>T2</quarter2Abbreviation>
+ <quarter3Abbreviation>T3</quarter3Abbreviation>
+ <quarter4Abbreviation>T4</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel ref="en_US"/>
+ <LC_OutLineNumberingLevel ref="en_US"/>
</Locale>
diff --git a/i18npool/source/localedata/data/sc_IT.xml b/i18npool/source/localedata/data/sc_IT.xml
new file mode 100644
index 000000000000..81b446995891
--- /dev/null
+++ b/i18npool/source/localedata/data/sc_IT.xml
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE Locale SYSTEM 'locale.dtd'>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+<LC_INFO>
+<Language>
+<LangID>sc</LangID>
+<DefaultName>Sardinian</DefaultName>
+</Language>
+<Country>
+<CountryID>IT</CountryID>
+<DefaultName>Italy</DefaultName>
+</Country>
+</LC_INFO>
+<LC_CTYPE unoid="generic">
+<Separators>
+<DateSeparator>/</DateSeparator>
+<ThousandSeparator>,</ThousandSeparator>
+<DecimalSeparator>.</DecimalSeparator>
+<TimeSeparator>:</TimeSeparator>
+<Time100SecSeparator>.</Time100SecSeparator>
+<ListSeparator>;</ListSeparator>
+<LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
+<LongDateDaySeparator>, </LongDateDaySeparator>
+<LongDateMonthSeparator> </LongDateMonthSeparator>
+<LongDateYearSeparator> </LongDateYearSeparator>
+</Separators>
+<Markers>
+<QuotationStart>‘</QuotationStart>
+<QuotationEnd>’</QuotationEnd>
+<DoubleQuotationStart>“</DoubleQuotationStart>
+<DoubleQuotationEnd>”</DoubleQuotationEnd>
+</Markers>
+<TimeAM>a.m.</TimeAM>
+<TimePM>p.m.</TimePM>
+<MeasurementSystem>metric</MeasurementSystem>
+</LC_CTYPE>
+<LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$€-627]">
+<FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+<FormatCode>General</FormatCode>
+</FormatElement>
+<FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+<FormatCode>0</FormatCode>
+</FormatElement>
+<FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+<FormatCode>0.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+<FormatCode>#,##0</FormatCode>
+</FormatElement>
+<FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+<FormatCode>#,##0.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+<FormatCode>#,###.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+<FormatCode>0.00E+00</FormatCode>
+</FormatElement>
+<FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+<FormatCode>0.00E+000</FormatCode>
+</FormatElement>
+<FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+<FormatCode>0%</FormatCode>
+</FormatElement>
+<FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+<FormatCode>0.00%</FormatCode>
+</FormatElement>
+<FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+<FormatCode>[CURRENCY] #,##0;-[CURRENCY] #,##0</FormatCode>
+</FormatElement>
+<FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+<FormatCode>[CURRENCY] #,##0.00;-[CURRENCY] #,##0.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+<FormatCode>[CURRENCY] #,##0;[RED]-[CURRENCY] #,##0</FormatCode>
+</FormatElement>
+<FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+<FormatCode>[CURRENCY] #,##0.00;[RED]-[CURRENCY] #,##0.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+<FormatCode>CCC #,##0.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+<FormatCode>[CURRENCY] #,##0.--;[RED]-[CURRENCY] #,##0.--</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+<FormatCode>D/MM/YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+<FormatCode>NNNNDD, MMMM YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+<FormatCode>DD/MM/YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+<FormatCode>DD/MM/YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+<FormatCode>D, MMM YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+<FormatCode>D, MMM YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+<FormatCode>D, MMM YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+<FormatCode>D, MMMM YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+<FormatCode>D, MMMM YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+<FormatCode>NN, DD/MMM/YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+<FormatCode>NN, D, MMM YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+<FormatCode>NN, D, MMMM YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+<FormatCode>NNNND, MMMM YYYY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+<FormatCode>MM/DD</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+<FormatCode>YY-MM-DD</FormatCode>
+<DefaultName>ISO 8601</DefaultName>
+</FormatElement>
+<FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+<FormatCode>YYYY-MM-DD</FormatCode>
+<DefaultName>ISO 8601</DefaultName>
+</FormatElement>
+<FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+<FormatCode>MM/YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+<FormatCode>MMM/DD</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+<FormatCode>MMMM</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+<FormatCode>QQ YY</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+<FormatCode>WW</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+<FormatCode>HH:MM</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+<FormatCode>HH:MM:SS</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+<FormatCode>HH:MM AM/PM</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+<FormatCode>HH:MM:SS AM/PM</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+<FormatCode>[HH]:MM:SS</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+<FormatCode>MM:SS.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+<FormatCode>[HH]:MM:SS.00</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+<FormatCode>DD/MM/YY HH:MM</FormatCode>
+</FormatElement>
+<FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+<FormatCode>DD/MM/YYYY HH:MM:SS AM/PM</FormatCode>
+</FormatElement>
+</LC_FORMAT>
+<LC_COLLATION>
+<Collator default="true" unoid="alphanumeric"/>
+<CollationOptions>
+<TransliterationModules>IGNORE_CASE</TransliterationModules>
+</CollationOptions>
+</LC_COLLATION>
+<LC_SEARCH>
+<SearchOptions>
+<TransliterationModules>IGNORE_CASE</TransliterationModules>
+</SearchOptions>
+</LC_SEARCH>
+<LC_INDEX>
+<IndexKey phonetic="false" default="true" unoid="alphanumeric">A-Z</IndexKey>
+<UnicodeScript>0</UnicodeScript>
+<UnicodeScript>1</UnicodeScript>
+<FollowPageWord>s.</FollowPageWord>
+<FollowPageWord>ss.</FollowPageWord>
+</LC_INDEX>
+<LC_CALENDAR>
+<Calendar unoid="gregorian" default="true">
+<DaysOfWeek>
+<Day>
+<DayID>sun</DayID>
+<DefaultAbbrvName>Dom</DefaultAbbrvName>
+<DefaultFullName>Domìniga</DefaultFullName>
+</Day>
+<Day>
+<DayID>mon</DayID>
+<DefaultAbbrvName>Lun</DefaultAbbrvName>
+<DefaultFullName>Lunis</DefaultFullName>
+</Day>
+<Day>
+<DayID>tue</DayID>
+<DefaultAbbrvName>Mar</DefaultAbbrvName>
+<DefaultFullName>Martis</DefaultFullName>
+</Day>
+<Day>
+<DayID>wed</DayID>
+<DefaultAbbrvName>Mer</DefaultAbbrvName>
+<DefaultFullName>Mèrcuris</DefaultFullName>
+</Day>
+<Day>
+<DayID>thu</DayID>
+<DefaultAbbrvName>Gio</DefaultAbbrvName>
+<DefaultFullName>Giòvia</DefaultFullName>
+</Day>
+<Day>
+<DayID>fri</DayID>
+<DefaultAbbrvName>Che</DefaultAbbrvName>
+<DefaultFullName>Chenàbura</DefaultFullName>
+</Day>
+<Day>
+<DayID>sat</DayID>
+<DefaultAbbrvName>Sab</DefaultAbbrvName>
+<DefaultFullName>Sàbadu</DefaultFullName>
+</Day>
+</DaysOfWeek>
+<MonthsOfYear>
+<Month>
+<MonthID>jan</MonthID>
+<DefaultAbbrvName>Ghe</DefaultAbbrvName>
+<DefaultFullName>Ghennàrgiu</DefaultFullName>
+</Month>
+<Month>
+<MonthID>feb</MonthID>
+<DefaultAbbrvName>Fre</DefaultAbbrvName>
+<DefaultFullName>Freàrgiu</DefaultFullName>
+</Month>
+<Month>
+<MonthID>mar</MonthID>
+<DefaultAbbrvName>Mar</DefaultAbbrvName>
+<DefaultFullName>Martzu</DefaultFullName>
+</Month>
+<Month>
+<MonthID>apr</MonthID>
+<DefaultAbbrvName>Abr</DefaultAbbrvName>
+<DefaultFullName>Abrile</DefaultFullName>
+</Month>
+<Month>
+<MonthID>may</MonthID>
+<DefaultAbbrvName>Maj</DefaultAbbrvName>
+<DefaultFullName>Maju</DefaultFullName>
+</Month>
+<Month>
+<MonthID>jun</MonthID>
+<DefaultAbbrvName>Làm</DefaultAbbrvName>
+<DefaultFullName>Làmpadas</DefaultFullName>
+</Month>
+<Month>
+<MonthID>jul</MonthID>
+<DefaultAbbrvName>Trì</DefaultAbbrvName>
+<DefaultFullName>Trìulas</DefaultFullName>
+</Month>
+<Month>
+<MonthID>aug</MonthID>
+<DefaultAbbrvName>Aus</DefaultAbbrvName>
+<DefaultFullName>Austu</DefaultFullName>
+</Month>
+<Month>
+<MonthID>sep</MonthID>
+<DefaultAbbrvName>Cab</DefaultAbbrvName>
+<DefaultFullName>Cabudanni</DefaultFullName>
+</Month>
+<Month>
+<MonthID>oct</MonthID>
+<DefaultAbbrvName>Sga</DefaultAbbrvName>
+<DefaultFullName>Santugaine</DefaultFullName>
+</Month>
+<Month>
+<MonthID>nov</MonthID>
+<DefaultAbbrvName>San</DefaultAbbrvName>
+<DefaultFullName>Santandria</DefaultFullName>
+</Month>
+<Month>
+<MonthID>dec</MonthID>
+<DefaultAbbrvName>Nad</DefaultAbbrvName>
+<DefaultFullName>Nadale</DefaultFullName>
+</Month>
+</MonthsOfYear>
+<Eras>
+<Era>
+<EraID>bc</EraID>
+<DefaultAbbrvName>a.C.</DefaultAbbrvName>
+<DefaultFullName>in antis de Cristos</DefaultFullName>
+</Era>
+<Era>
+<EraID>ad</EraID>
+<DefaultAbbrvName>p.C.</DefaultAbbrvName>
+<DefaultFullName>a pustis de Cristos</DefaultFullName>
+</Era>
+</Eras>
+<StartDayOfWeek>
+<DayID>mon</DayID>
+</StartDayOfWeek>
+<MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+</Calendar>
+</LC_CALENDAR>
+<LC_CURRENCY>
+<Currency default="true" usedInCompatibleFormatCodes="true">
+<CurrencyID>EUR</CurrencyID>
+<CurrencySymbol>€</CurrencySymbol>
+<BankSymbol>EUR</BankSymbol>
+<CurrencyName>èuro</CurrencyName>
+<DecimalPlaces>2</DecimalPlaces>
+</Currency>
+</LC_CURRENCY>
+<LC_TRANSLITERATION>
+<Transliteration unoid="LOWERCASE_UPPERCASE"/>
+<Transliteration unoid="UPPERCASE_LOWERCASE"/>
+<Transliteration unoid="IGNORE_CASE"/>
+</LC_TRANSLITERATION>
+<LC_MISC>
+<ReservedWords>
+<trueWord>Beru</trueWord>
+<falseWord>Farsu</falseWord>
+<quarter1Word>Cuartu 1</quarter1Word>
+<quarter2Word>Cuartu 2</quarter2Word>
+<quarter3Word>Cuartu 3</quarter3Word>
+<quarter4Word>Cuartu 4</quarter4Word>
+<aboveWord>Subra</aboveWord>
+<belowWord>Suta</belowWord>
+<quarter1Abbreviation>C.tu 1</quarter1Abbreviation>
+<quarter2Abbreviation>C.tu 2</quarter2Abbreviation>
+<quarter3Abbreviation>C.tu 3</quarter3Abbreviation>
+<quarter4Abbreviation>C.tu 4</quarter4Abbreviation>
+</ReservedWords>
+</LC_MISC>
+<LC_NumberingLevel>
+<NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+<NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+<NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+<NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+<NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+<NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+<NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+<NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+</LC_NumberingLevel>
+<LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/data/so_SO.xml b/i18npool/source/localedata/data/so_SO.xml
index f5d666ec7e5a..981cb54aff3e 100644
--- a/i18npool/source/localedata/data/so_SO.xml
+++ b/i18npool/source/localedata/data/so_SO.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Locale SYSTEM 'locale.dtd'>
-<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.1">
<LC_INFO>
<Language>
<LangID>so</LangID>
@@ -13,12 +13,12 @@
</LC_INFO>
<LC_CTYPE unoid="generic">
<Separators>
- <DateSeparator>.</DateSeparator>
- <ThousandSeparator> </ThousandSeparator>
+ <DateSeparator>/</DateSeparator>
+ <ThousandSeparator>,</ThousandSeparator>
<DecimalSeparator>.</DecimalSeparator>
<TimeSeparator>:</TimeSeparator>
<Time100SecSeparator>.</Time100SecSeparator>
- <ListSeparator>,</ListSeparator>
+ <ListSeparator>;</ListSeparator>
<LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
<LongDateDaySeparator>, </LongDateDaySeparator>
<LongDateMonthSeparator> </LongDateMonthSeparator>
@@ -30,11 +30,11 @@
<DoubleQuotationStart>‘</DoubleQuotationStart>
<DoubleQuotationEnd>’</DoubleQuotationEnd>
</Markers>
- <TimeAM>AM</TimeAM>
- <TimePM>PM</TimePM>
+ <TimeAM>XH</TimeAM>
+ <TimePM>XD</TimePM>
<MeasurementSystem>metric</MeasurementSystem>
</LC_CTYPE>
- <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$So. Sh.-477]">
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$Ssh-477]">
<FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
<FormatCode>General</FormatCode>
</FormatElement>
@@ -45,13 +45,13 @@
<FormatCode>0.00</FormatCode>
</FormatElement>
<FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
- <FormatCode># ##0</FormatCode>
+ <FormatCode>#,##0</FormatCode>
</FormatElement>
<FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
- <FormatCode># ##0.00</FormatCode>
+ <FormatCode>#,##0.00</FormatCode>
</FormatElement>
<FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
- <FormatCode># ###.00</FormatCode>
+ <FormatCode>#,###.00</FormatCode>
</FormatElement>
<FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
<FormatCode>0.00E+00</FormatCode>
@@ -66,34 +66,34 @@
<FormatCode>0.00%</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
- <FormatCode># ##0 [CURRENCY];-# ##0 [CURRENCY]</FormatCode>
+ <FormatCode>[CURRENCY]#,##0;-[CURRENCY]#,##0</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
- <FormatCode># ##0.00 [CURRENCY];-# ##0.00 [CURRENCY]</FormatCode>
+ <FormatCode>[CURRENCY]#,##0.00;-[CURRENCY]#,##0.00</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
- <FormatCode># ##0 [CURRENCY];[RED]-# ##0 [CURRENCY]</FormatCode>
+ <FormatCode>[CURRENCY]#,##0;[RED]-[CURRENCY]#,##0</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
- <FormatCode># ##0.00 [CURRENCY];[RED]-# ##0.00 [CURRENCY]</FormatCode>
+ <FormatCode>[CURRENCY]#,##0.00;[RED]-[CURRENCY]#,##0.00</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
- <FormatCode># ##0.00CCC</FormatCode>
+ <FormatCode>CCC#,##0.00</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
- <FormatCode># ##0.-- [CURRENCY];[RED]-# ##0.-- [CURRENCY]</FormatCode>
+ <FormatCode>[CURRENCY]#,##0.--;[RED]-[CURRENCY]#,##0.--</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
- <FormatCode>D.MM.YY</FormatCode>
+ <FormatCode>D/MM/YY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
<FormatCode>NNNNDD, MMMM YYYY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
- <FormatCode>DD.MM.YY</FormatCode>
+ <FormatCode>DD/MM/YY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
- <FormatCode>DD.MM.YYYY</FormatCode>
+ <FormatCode>DD/MM/YYYY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
<FormatCode>D, MMM YY</FormatCode>
@@ -111,7 +111,7 @@
<FormatCode>D, MMMM YY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
- <FormatCode>NN, DD.MMM.YY</FormatCode>
+ <FormatCode>NN, DD/MMM/YY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
<FormatCode>NN, D, MMM YY</FormatCode>
@@ -123,7 +123,7 @@
<FormatCode>NNNND, MMMM YYYY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
- <FormatCode>MM.DD</FormatCode>
+ <FormatCode>MM/DD</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
<FormatCode>YY-MM-DD</FormatCode>
@@ -134,10 +134,10 @@
<DefaultName>ISO 8601</DefaultName>
</FormatElement>
<FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
- <FormatCode>MM.YY</FormatCode>
+ <FormatCode>MM/YY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
- <FormatCode>MMM.DD</FormatCode>
+ <FormatCode>MMM/DD</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
<FormatCode>MMMM</FormatCode>
@@ -170,10 +170,10 @@
<FormatCode>[HH]:MM:SS.00</FormatCode>
</FormatElement>
<FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
- <FormatCode>DD.MM.YY HH:MM</FormatCode>
+ <FormatCode>DD/MM/YY HH:MM</FormatCode>
</FormatElement>
<FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
- <FormatCode>DD.MM.YYYY HH:MM:SS AM/PM</FormatCode>
+ <FormatCode>DD/MM/YYYY HH:MM:SS AM/PM</FormatCode>
</FormatElement>
</LC_FORMAT>
<LC_COLLATION>
@@ -191,15 +191,15 @@
<IndexKey phonetic="false" default="true" unoid="alphanumeric">A-Z</IndexKey>
<UnicodeScript>0</UnicodeScript>
<UnicodeScript>1</UnicodeScript>
- <FollowPageWord>bg.</FollowPageWord>
- <FollowPageWord>bgg.</FollowPageWord>
+ <FollowPageWord>bg.s</FollowPageWord>
+ <FollowPageWord>bgg.s</FollowPageWord>
</LC_INDEX>
<LC_CALENDAR>
<Calendar unoid="gregorian" default="true">
<DaysOfWeek>
<Day>
<DayID>sun</DayID>
- <DefaultAbbrvName>Axd</DefaultAbbrvName>
+ <DefaultAbbrvName>Axa</DefaultAbbrvName>
<DefaultFullName>Axad</DefaultFullName>
</Day>
<Day>
@@ -215,7 +215,7 @@
<Day>
<DayID>wed</DayID>
<DefaultAbbrvName>Arb</DefaultAbbrvName>
- <DefaultFullName>Arbaco</DefaultFullName>
+ <DefaultFullName>Arboco</DefaultFullName>
</Day>
<Day>
<DayID>thu</DayID>
@@ -247,7 +247,7 @@
<Month>
<MonthID>mar</MonthID>
<DefaultAbbrvName>Mar</DefaultAbbrvName>
- <DefaultFullName>Maarso</DefaultFullName>
+ <DefaultFullName>Marso</DefaultFullName>
</Month>
<Month>
<MonthID>apr</MonthID>
@@ -256,18 +256,18 @@
</Month>
<Month>
<MonthID>may</MonthID>
- <DefaultAbbrvName>Ma</DefaultAbbrvName>
- <DefaultFullName>Maajo</DefaultFullName>
+ <DefaultAbbrvName>Maj</DefaultAbbrvName>
+ <DefaultFullName>Majo</DefaultFullName>
</Month>
<Month>
<MonthID>jun</MonthID>
<DefaultAbbrvName>Jun</DefaultAbbrvName>
- <DefaultFullName>Juun</DefaultFullName>
+ <DefaultFullName>Junyo</DefaultFullName>
</Month>
<Month>
<MonthID>jul</MonthID>
- <DefaultAbbrvName>Lul</DefaultAbbrvName>
- <DefaultFullName>Luulyo</DefaultFullName>
+ <DefaultAbbrvName>Jul</DefaultAbbrvName>
+ <DefaultFullName>Julaayo</DefaultFullName>
</Month>
<Month>
<MonthID>aug</MonthID>
@@ -277,7 +277,7 @@
<Month>
<MonthID>sep</MonthID>
<DefaultAbbrvName>Seb</DefaultAbbrvName>
- <DefaultFullName>Sebteembar</DefaultFullName>
+ <DefaultFullName>Sebtembar </DefaultFullName>
</Month>
<Month>
<MonthID>oct</MonthID>
@@ -292,19 +292,19 @@
<Month>
<MonthID>dec</MonthID>
<DefaultAbbrvName>Dis</DefaultAbbrvName>
- <DefaultFullName>Diseembar</DefaultFullName>
+ <DefaultFullName>Disembar</DefaultFullName>
</Month>
</MonthsOfYear>
<Eras>
<Era>
<EraID>bc</EraID>
- <DefaultAbbrvName>CD</DefaultAbbrvName>
- <DefaultFullName>N. Ciise ka hor (CS)</DefaultFullName>
+ <DefaultAbbrvName>CH</DefaultAbbrvName>
+ <DefaultFullName>Ciise Hortiis</DefaultFullName>
</Era>
<Era>
<EraID>ad</EraID>
- <DefaultAbbrvName>AD</DefaultAbbrvName>
- <DefaultFullName>N. Ciise Ka dib (CS)</DefaultFullName>
+ <DefaultAbbrvName>CD</DefaultAbbrvName>
+ <DefaultFullName>Ciise Dabadiis</DefaultFullName>
</Era>
</Eras>
<StartDayOfWeek>
@@ -316,6 +316,13 @@
<LC_CURRENCY>
<Currency default="true" usedInCompatibleFormatCodes="true">
<CurrencyID>SOS</CurrencyID>
+ <CurrencySymbol>Ssh</CurrencySymbol>
+ <BankSymbol>SOS</BankSymbol>
+ <CurrencyName>Shilin Soomaali</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ <Currency default="false" usedInCompatibleFormatCodes="false" legacyOnly="true">
+ <CurrencyID>SOS</CurrencyID>
<CurrencySymbol>So. Sh.</CurrencySymbol>
<BankSymbol>SOS</BankSymbol>
<CurrencyName>Shilin Soomaali</CurrencyName>
@@ -331,27 +338,27 @@
<ReservedWords>
<trueWord>Run</trueWord>
<falseWord>Been</falseWord>
- <quarter1Word>Rubaca kowaad</quarter1Word>
- <quarter2Word>Rubaca labaad</quarter2Word>
- <quarter3Word>Rubaca sadaxaad</quarter3Word>
- <quarter4Word>Rubaca afaraad</quarter4Word>
- <aboveWord>ka kor</aboveWord>
- <belowWord>ka hoos</belowWord>
- <quarter1Abbreviation>Q1</quarter1Abbreviation>
- <quarter2Abbreviation>Q2</quarter2Abbreviation>
- <quarter3Abbreviation>Q3</quarter3Abbreviation>
- <quarter4Abbreviation>Q4</quarter4Abbreviation>
+ <quarter1Word>Afarmeeloodka 1aad</quarter1Word>
+ <quarter2Word>Afarmeeloodka 2aad</quarter2Word>
+ <quarter3Word>Afarmeeloodka 3aad</quarter3Word>
+ <quarter4Word>Afarmeeloodka 4aad</quarter4Word>
+ <aboveWord>Kor</aboveWord>
+ <belowWord>Hoos</belowWord>
+ <quarter1Abbreviation>AM1</quarter1Abbreviation>
+ <quarter2Abbreviation>AM2</quarter2Abbreviation>
+ <quarter3Abbreviation>AM3</quarter3Abbreviation>
+ <quarter4Abbreviation>AM4</quarter4Abbreviation>
</ReservedWords>
</LC_MISC>
<LC_NumberingLevel>
- <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
- <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
- <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
- <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
- <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
- <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
- <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
- <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
</LC_NumberingLevel>
<LC_OutLineNumberingLevel ref="en_US"/>
</Locale>
diff --git a/i18npool/source/localedata/data/ug_CN.xml b/i18npool/source/localedata/data/ug_CN.xml
new file mode 100644
index 000000000000..b99f1f89a7ee
--- /dev/null
+++ b/i18npool/source/localedata/data/ug_CN.xml
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE Locale SYSTEM 'locale.dtd'>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>ug</LangID>
+ <DefaultName>Uyghur</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>CN</CountryID>
+ <DefaultName>China</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>-</DateSeparator>
+ <ThousandSeparator>,</ThousandSeparator>
+ <DecimalSeparator>.</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>.</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>, </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>»</QuotationStart>
+ <QuotationEnd>«</QuotationEnd>
+ <DoubleQuotationStart>’</DoubleQuotationStart>
+ <DoubleQuotationEnd>‘</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>چ ب</TimeAM>
+ <TimePM>چ ك</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$¥-0480]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#,###.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0.00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0.00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0.00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY]#,##0;[CURRENCY]-#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY]#,##0.00;[CURRENCY]-#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY]#,##0;[RED][CURRENCY]-#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY]#,##0.00;[RED][CURRENCY]-#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>CCC#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY]#,##0.--;[RED][CURRENCY]-#,##0.--</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>YY-MM-DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNNDD, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>YY-MM-DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+ <FormatCode>NN, DD-MMM-YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+ <FormatCode>NN, D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN, D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM-DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>YY-MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>MMM-DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>YY-MM-DD HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>YYYY-MM-DD HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION>
+ <Collator default="true" unoid="alphanumeric"/>
+ <CollationOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </CollationOptions>
+ </LC_COLLATION>
+ <LC_SEARCH>
+ <SearchOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </SearchOptions>
+ </LC_SEARCH>
+ <LC_INDEX>
+ <IndexKey phonetic="false" default="true" unoid="alphanumeric">ا-ە-ب-پ-ت-ج-چ-خ-د-ر-زژس-ش-غ-ف-ق-ك-گ-ڭ-ل-م-ن-ھ-و-ۇ-ۆ-ۈ-ۋ-ې-ى-ئ</IndexKey>
+ <UnicodeScript>0</UnicodeScript>
+ <UnicodeScript>1</UnicodeScript>
+ <UnicodeScript>2</UnicodeScript>
+ <UnicodeScript>3</UnicodeScript>
+ <UnicodeScript>8</UnicodeScript>
+ <UnicodeScript>11</UnicodeScript>
+ <UnicodeScript>80</UnicodeScript>
+ <UnicodeScript>84</UnicodeScript>
+ <FollowPageWord>ئەگەش</FollowPageWord>
+ <FollowPageWord>ئەگەش</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>ي</DefaultAbbrvName>
+ <DefaultFullName>يەكشەنبە</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>د</DefaultAbbrvName>
+ <DefaultFullName>دۈشەنبە</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>س</DefaultAbbrvName>
+ <DefaultFullName>سەيشەنبە</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>چ</DefaultAbbrvName>
+ <DefaultFullName>چارشەنبە</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>پ</DefaultAbbrvName>
+ <DefaultFullName>پەيشەنبە</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>ج</DefaultAbbrvName>
+ <DefaultFullName>جۈمە</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>ش</DefaultAbbrvName>
+ <DefaultFullName>شەنبە</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>قەھرىتان</DefaultAbbrvName>
+ <DefaultFullName>قەھرىتان</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>ھۇت</DefaultAbbrvName>
+ <DefaultFullName>ھۇت</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>نەۋرۇز</DefaultAbbrvName>
+ <DefaultFullName>نەۋرۇز</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>ئۇمۇت</DefaultAbbrvName>
+ <DefaultFullName>ئۇمۇت</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>باھار</DefaultAbbrvName>
+ <DefaultFullName>باھار</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>سەپەر</DefaultAbbrvName>
+ <DefaultFullName>سەپەر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>چىللە</DefaultAbbrvName>
+ <DefaultFullName>چىللە</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>تومۇز</DefaultAbbrvName>
+ <DefaultFullName>تومۇز</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>مىزان</DefaultAbbrvName>
+ <DefaultFullName>مىزان</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>ئوغۇز</DefaultAbbrvName>
+ <DefaultFullName>ئوغۇز</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>ئوغلاق</DefaultAbbrvName>
+ <DefaultFullName>ئوغلاق</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>كۆنەك</DefaultAbbrvName>
+ <DefaultFullName>كۆنەك</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>م ئى</DefaultAbbrvName>
+ <DefaultFullName>مىلادىيەدىن ئىلگىرى</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>م</DefaultAbbrvName>
+ <DefaultFullName>مىلادىيە</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>sun</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>CNY</CurrencyID>
+ <CurrencySymbol>¥</CurrencySymbol>
+ <BankSymbol>CNY</BankSymbol>
+ <CurrencyName>يۈەن</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION>
+ <Transliteration unoid="LOWERCASE_UPPERCASE"/>
+ <Transliteration unoid="UPPERCASE_LOWERCASE"/>
+ <Transliteration unoid="IGNORE_CASE"/>
+ </LC_TRANSLITERATION>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>راست</trueWord>
+ <falseWord>يالغان</falseWord>
+ <quarter1Word>بىرىنچى چارەك</quarter1Word>
+ <quarter2Word>ئىككىنچى چارەك</quarter2Word>
+ <quarter3Word>ئۈچىنچى چارەك</quarter3Word>
+ <quarter4Word>تۆتىنچى چارەك</quarter4Word>
+ <aboveWord>ئۈستى</aboveWord>
+ <belowWord>ئاستى</belowWord>
+ <quarter1Abbreviation>1 چارەك</quarter1Abbreviation>
+ <quarter2Abbreviation>2 چارەك</quarter2Abbreviation>
+ <quarter3Abbreviation>3 چارەك</quarter3Abbreviation>
+ <quarter4Abbreviation>4 چارەك</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ </LC_NumberingLevel>
+ <LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx
index 456bb1761b41..083fbc548c8c 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -175,6 +175,8 @@ static const struct {
{ "fy_NL", lcl_DATA_EURO },
{ "oc_FR", lcl_DATA_EURO },
{ "mt_MT", lcl_DATA_EURO },
+ { "sc_IT", lcl_DATA_EURO },
+ { "ast_ES", lcl_DATA_EURO },
{ "ja_JP", lcl_DATA_OTHERS },
{ "ko_KR", lcl_DATA_OTHERS },
@@ -250,6 +252,9 @@ static const struct {
{ "my_MM", lcl_DATA_OTHERS },
{ "shs_CA", lcl_DATA_OTHERS },
{ "tpi_PG", lcl_DATA_OTHERS },
+ { "ar_OM", lcl_DATA_OTHERS },
+ { "ug_CN", lcl_DATA_OTHERS },
+ { "om_ET", lcl_DATA_OTHERS },
};
static const sal_Unicode under = sal_Unicode('_');
@@ -1393,6 +1398,7 @@ OutlineNumbering::OutlineNumbering(const OutlineNumberingLevel_Impl* pOutlnLevel
OutlineNumbering::~OutlineNumbering()
{
+ delete [] m_pOutlineLevels;
}
sal_Int32 OutlineNumbering::getCount( ) throw(RuntimeException)
diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx b/i18npool/source/nativenumber/nativenumbersupplier.cxx
index 543cdc1d4fee..6922290bd10c 100644
--- a/i18npool/source/nativenumber/nativenumbersupplier.cxx
+++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx
@@ -737,9 +737,8 @@ NativeNumberXmlAttributes SAL_CALL NativeNumberSupplier::convertToXmlAttributes(
break;
}
}
- NativeNumberXmlAttributes att(rLocale, OUString(&NumberChar[number][1], 1),
+ return NativeNumberXmlAttributes(rLocale, OUString(&NumberChar[number][1], 1),
OUString::createFromAscii(attType[type]));
- return att;
}
static sal_Bool natNumIn(sal_Int16 num, sal_Int16 natnum[], sal_Int16 len)
diff --git a/i18npool/source/registerservices/registerservices.cxx b/i18npool/source/registerservices/registerservices.cxx
index 870c49939648..3cb29cd6838f 100644
--- a/i18npool/source/registerservices/registerservices.cxx
+++ b/i18npool/source/registerservices/registerservices.cxx
@@ -207,6 +207,7 @@ IMPL_CREATEINSTANCE( NumToCharLower_zh_CN )
IMPL_CREATEINSTANCE( NumToCharUpper_zh_CN )
IMPL_CREATEINSTANCE( NumToCharLower_zh_TW )
IMPL_CREATEINSTANCE( NumToCharUpper_zh_TW )
+IMPL_CREATEINSTANCE( NumToCharHalfwidth )
IMPL_CREATEINSTANCE( NumToCharFullwidth )
IMPL_CREATEINSTANCE( NumToCharKanjiShort_ja_JP )
IMPL_CREATEINSTANCE( NumToCharKanjiTraditional_ja_JP )
@@ -469,6 +470,7 @@ static const struct InstancesArray {
IMPL_TRANSLITERATION_ITEM (NumToCharLower_zh_CN),
IMPL_TRANSLITERATION_ITEM (NumToCharUpper_zh_TW),
IMPL_TRANSLITERATION_ITEM (NumToCharLower_zh_TW),
+ IMPL_TRANSLITERATION_ITEM (NumToCharHalfwidth),
IMPL_TRANSLITERATION_ITEM (NumToCharFullwidth),
IMPL_TRANSLITERATION_ITEM (NumToCharKanjiShort_ja_JP),
IMPL_TRANSLITERATION_ITEM (NumToCharKanjiTraditional_ja_JP),
diff --git a/o3tl/qa/makefile.mk b/o3tl/qa/makefile.mk
index a6ebfbba4bb9..70fe224cf6a9 100644
--- a/o3tl/qa/makefile.mk
+++ b/o3tl/qa/makefile.mk
@@ -39,7 +39,7 @@ ENABLE_EXCEPTIONS=TRUE
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
-
+.IF "$(L10N_framework)"==""
# --- Common ----------------------------------------------------------
# BEGIN ----------------------------------------------------------------
@@ -65,12 +65,13 @@ SHL1VERSIONMAP = export.map
SLOFILES=$(SHL1OBJS)
# --- Targets ------------------------------------------------------
+.ENDIF # L10N_framework
.INCLUDE : target.mk
.INCLUDE : _cppunit.mk
# --- Enable test execution in normal build ------------------------
-
+.IF "$(L10N_framework)"==""
unittest : $(SHL1TARGETN)
@echo ----------------------------------------------------------
@echo - start unit test on library $(SHL1TARGETN)
@@ -78,3 +79,5 @@ unittest : $(SHL1TARGETN)
$(TESTSHL2) -sf $(mktmp ) $(SHL1TARGETN)
ALLTAR : unittest
+.ENDIF # L10N_framework
+
diff --git a/padmin/source/adddlg.cxx b/padmin/source/adddlg.cxx
index c10be2d83fcd..052de2cbb731 100644
--- a/padmin/source/adddlg.cxx
+++ b/padmin/source/adddlg.cxx
@@ -147,27 +147,31 @@ void APChooseDriverPage::fill( PrinterInfo& rInfo )
}
}
-void APChooseDriverPage::updateDrivers()
+void APChooseDriverPage::updateDrivers( bool bRefresh, const rtl::OUString& rSelectDriver )
{
for( int k = 0; k < m_aDriverBox.GetEntryCount(); k++ )
delete (String*)m_aDriverBox.GetEntryData( k );
m_aDriverBox.Clear();
std::list< rtl::OUString > aDrivers;
- psp::PPDParser::getKnownPPDDrivers( aDrivers );
+ psp::PPDParser::getKnownPPDDrivers( aDrivers, bRefresh );
+ rtl::OUString aSelectDriver( psp::PPDParser::getPPDPrinterName( rSelectDriver ) );
+
+ rtl::OUString aSelectedEntry;
for( std::list< rtl::OUString >::const_iterator it = aDrivers.begin(); it != aDrivers.end(); ++it )
{
- String aDriver( ::psp::PPDParser::getPPDPrinterName( *it ) );
- if( aDriver.Len() )
+ rtl::OUString aDriver( psp::PPDParser::getPPDPrinterName( *it ) );
+ if( aDriver.getLength() )
{
int nPos = m_aDriverBox.InsertEntry( aDriver );
m_aDriverBox.SetEntryData( nPos, new String( *it ) );
- if( it->equalsAscii( "SGENPRT" ) )
- m_aDriverBox.SelectEntryPos( nPos );
+ if( aDriver == aSelectDriver )
+ aSelectedEntry = aDriver;
}
}
+ m_aDriverBox.SelectEntry( aSelectedEntry );
m_aRemBtn.Enable( m_aDriverBox.GetEntryCount() > 0 );
}
@@ -185,7 +189,13 @@ IMPL_LINK( APChooseDriverPage, ClickBtnHdl, PushButton*, pButton )
{
PPDImportDialog aDlg( this );
if( aDlg.Execute() )
- updateDrivers();
+ {
+ const std::list< rtl::OUString >& rImported( aDlg.getImportedFiles() );
+ if( rImported.empty() )
+ updateDrivers( true );
+ else
+ updateDrivers( true, rImported.front() );
+ }
}
else if( pButton == &m_aRemBtn )
{
@@ -259,11 +269,10 @@ IMPL_LINK( APChooseDriverPage, ClickBtnHdl, PushButton*, pButton )
rPIManager.removePrinter( *it );
}
- ::std::list< rtl::OUString > aDirs;
+ std::list< rtl::OUString > aDirs;
// get only psprint's directories, not eventual system dirs
psp::getPrinterPathList( aDirs, NULL );
- ::std::list< rtl::OUString >::iterator dir;
-
+ std::list< rtl::OUString >::iterator dir;
for( dir = aDirs.begin(); dir != aDirs.end(); ++dir )
{
::std::list< String > aFiles;
@@ -271,10 +280,11 @@ IMPL_LINK( APChooseDriverPage, ClickBtnHdl, PushButton*, pButton )
OUStringBuffer aDir( *dir );
aDir.append( sal_Unicode( '/' ) );
aDir.appendAscii( PRINTER_PPDDIR );
- FindFiles( aDir.makeStringAndClear(), aFiles, String( RTL_CONSTASCII_USTRINGPARAM( "PS;PPD;PS.GZ;PPD.GZ" ) ), true );
+ rtl::OUString aPPDDir( aDir.makeStringAndClear() );
+ FindFiles( aPPDDir, aFiles, String( RTL_CONSTASCII_USTRINGPARAM( "PS;PPD;PS.GZ;PPD.GZ" ) ), true );
for( file = aFiles.begin(); file != aFiles.end(); ++file )
{
- String aFile( *dir );
+ String aFile( aPPDDir );
if( aFile.GetChar( aFile.Len() ) != '/' )
aFile.AppendAscii( "/" );
aFile.Append( *file );
diff --git a/padmin/source/adddlg.hxx b/padmin/source/adddlg.hxx
index e6fe17f30188..bb17044e800a 100644
--- a/padmin/source/adddlg.hxx
+++ b/padmin/source/adddlg.hxx
@@ -96,7 +96,7 @@ class APChooseDriverPage : public APTabPage
DECL_LINK( ClickBtnHdl, PushButton* );
DECL_LINK( DelPressedHdl, ListBox* );
- void updateDrivers();
+ void updateDrivers( bool bRefresh = false, const rtl::OUString& rSelectDriver = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SGENPRT" ) ) );
public:
APChooseDriverPage( AddPrinterDialog* pParent );
~APChooseDriverPage();
diff --git a/padmin/source/makefile.mk b/padmin/source/makefile.mk
index 336631f1ceaa..91e4ca2a25f4 100644
--- a/padmin/source/makefile.mk
+++ b/padmin/source/makefile.mk
@@ -105,8 +105,7 @@ APP1STDLIBS= \
$(COMPHELPERLIB) \
$(CPPUHELPERLIB) \
$(CPPULIB) \
- $(SALLIB) \
- -lXext -lX11
+ $(SALLIB)
UNIXTEXT = $(MISC)$/spadmin.sh
diff --git a/padmin/source/newppdlg.cxx b/padmin/source/newppdlg.cxx
index 8d5414a2ceef..0fd6aa32c984 100644
--- a/padmin/source/newppdlg.cxx
+++ b/padmin/source/newppdlg.cxx
@@ -172,6 +172,7 @@ IMPL_LINK( PPDImportDialog, ClickBtnHdl, PushButton*, pButton )
::std::list< rtl::OUString > aToDirs;
psp::getPrinterPathList( aToDirs, PRINTER_PPDDIR );
::std::list< rtl::OUString >::iterator writeDir = aToDirs.begin();
+ m_aImportedFiles.clear();
for( int i = 0; i < m_aDriverLB.GetSelectEntryCount(); i++ )
{
@@ -186,7 +187,10 @@ IMPL_LINK( PPDImportDialog, ClickBtnHdl, PushButton*, pButton )
aToFile.Append( aFile.GetName() );
OUString aToUni( aToFile.GetMainURL(INetURLObject::DECODE_TO_IURI) );
if( ! File::copy( aFromUni, aToUni ) )
+ {
+ m_aImportedFiles.push_back( aToUni );
break;
+ }
++writeDir;
} while( writeDir != aToDirs.end() );
}
diff --git a/padmin/source/newppdlg.hxx b/padmin/source/newppdlg.hxx
index 4d6d637efcc9..bd73b5ffed3e 100644
--- a/padmin/source/newppdlg.hxx
+++ b/padmin/source/newppdlg.hxx
@@ -64,9 +64,14 @@ namespace padmin {
DECL_LINK( ModifyHdl, ComboBox* );
void Import();
+
+ std::list< rtl::OUString > m_aImportedFiles;
public:
PPDImportDialog( Window* pParent );
~PPDImportDialog();
+
+ const std::list< rtl::OUString >& getImportedFiles() const
+ { return m_aImportedFiles; }
};
} // namespace
diff --git a/rsc/source/parser/rscibas.cxx b/rsc/source/parser/rscibas.cxx
index c95f1adc7b52..75f558398bb5 100644
--- a/rsc/source/parser/rscibas.cxx
+++ b/rsc/source/parser/rscibas.cxx
@@ -67,7 +67,7 @@ void RscTypCont::SETCONST( RscConst * pClass, const char * szString, UINT32 nVal
void RscTypCont::SETCONST( RscConst * pClass, Atom nName, UINT32 nVal )
{
#if OSL_DEBUG_LEVEL > 2
- fprintf( stderr, "setconst hash: %d\n", nName );
+ fprintf( stderr, "setconst hash: %u\n", (unsigned int)nName );
#endif
pClass->SetConstant( aNmTb.Put( nName,
CONSTNAME, nVal ), nVal );
@@ -106,9 +106,9 @@ void RscLangEnum::Init( RscNameTable& rNames )
{
#if OSL_DEBUG_LEVEL > 2
fprintf( stderr, "ISO Language in : %d %d %s\n",
- nIndex,
- pLangEntry->meLang,
- MsLangId::convertLanguageToIsoByteString( pLangEntry->meLang ).GetBuffer() );
+ (int)nIndex,
+ pLangEntry->mnLang,
+ MsLangId::convertLanguageToIsoByteString( pLangEntry->mnLang ).getStr() );
#endif
aLang = pLangEntry->maLangStr;
aCountry = pLangEntry->maCountry;
@@ -118,7 +118,7 @@ void RscLangEnum::Init( RscNameTable& rNames )
if ( ! GetLangId( aLang ))
ULong_Iso_map[ aLang ] = mnLangId;
#if OSL_DEBUG_LEVEL > 2
- fprintf( stderr, "ISO Language out: %s 0x%hx\n", aLang.GetBuffer(), mnLangId );
+ fprintf( stderr, "ISO Language out: %s 0x%lx\n", aLang.GetBuffer(), mnLangId );
#endif
mnLangId++;
}
@@ -128,7 +128,7 @@ void RscLangEnum::Init( RscNameTable& rNames )
if ( ! GetLangId( aLang ))
ULong_Iso_map[ aLang ] = mnLangId;
#if OSL_DEBUG_LEVEL > 2
- fprintf( stderr, "ISO Language out: %s 0x%hx", aLang.GetBuffer(), mnLangId );
+ fprintf( stderr, "ISO Language out: %s 0x%lx", aLang.GetBuffer(), mnLangId );
#endif
mnLangId++;
aLang += csep;
@@ -137,7 +137,7 @@ void RscLangEnum::Init( RscNameTable& rNames )
if ( ! GetLangId( aLang ))
ULong_Iso_map[ aLang ] = mnLangId;
#if OSL_DEBUG_LEVEL > 2
- fprintf( stderr, " %s 0x%hx\n", aLang.GetBuffer(), mnLangId );
+ fprintf( stderr, " %s 0x%lx\n", aLang.GetBuffer(), mnLangId );
#endif
mnLangId++;
// hack - survive "x-no-translate"
@@ -167,7 +167,7 @@ void RscLangEnum::Init( RscNameTable& rNames )
if ( ! GetLangId( aIsoToken ))
ULong_Iso_map[ aIsoToken ] = mnLangId;
#if OSL_DEBUG_LEVEL > 2
- fprintf( stderr, "Env ISO Language out: %s 0x%hx\n", aIsoToken.GetBuffer(), mnLangId );
+ fprintf( stderr, "Env ISO Language out: %s 0x%lx\n", aIsoToken.GetBuffer(), mnLangId );
#endif
mnLangId++;
}
diff --git a/rsc/source/parser/rscicpx.cxx b/rsc/source/parser/rscicpx.cxx
index bced7f36c3b6..e59a1e056f4b 100644
--- a/rsc/source/parser/rscicpx.cxx
+++ b/rsc/source/parser/rscicpx.cxx
@@ -1449,6 +1449,9 @@ RscTop * RscTypCont::InitClassNumericFormatter( RscTop * pSuper )
nId = aNmTb.Put( "Value", VARNAME );
pClassNumeric->SetVariable( nId, &aIdLong, NULL,
0, NUMERICFORMATTER_VALUE );
+ nId = aNmTb.Put( "NoThousandSep", VARNAME );
+ pClassNumeric->SetVariable( nId, &aBool, NULL,
+ 0, NUMERICFORMATTER_NOTHOUSANDSEP );
return pClassNumeric;
}
@@ -1633,7 +1636,6 @@ RscTop * RscTypCont::InitClassNumericField( RscTop * pSuper )
nId = aNmTb.Put( "SpinSize", VARNAME );
pClassNumericField->SetVariable( nId, &aIdLong, NULL,
0, NUMERICFIELD_SPINSIZE );
-
return pClassNumericField;
}
diff --git a/sax/inc/sax/fshelper.hxx b/sax/inc/sax/fshelper.hxx
index b1ce4ba39d1b..5223c253af91 100644
--- a/sax/inc/sax/fshelper.hxx
+++ b/sax/inc/sax/fshelper.hxx
@@ -39,11 +39,13 @@
#include <sax/fastattribs.hxx>
#include "sax/dllapi.h"
-#define FSNS(namespace, element) ((namespace << 16) | element)
-#define FSEND -1 // same as XML_TOKEN_INVALID
+#define FSNS(namespc, element) ((namespc << 16) | element)
+const sal_Int32 FSEND = -1; // same as XML_TOKEN_INVALID
namespace sax_fastparser {
+enum MergeMarksEnum { MERGE_MARKS_APPEND = 0, MERGE_MARKS_PREPEND = 1, MERGE_MARKS_POSTPONE = 2 };
+
typedef ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList > XFastAttributeListRef;
class FastSaxSerializer;
@@ -82,6 +84,10 @@ public:
inline void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
{ singleElementV(FSNS( namespaceTokenId, elementTokenId), xAttrList); }
+ void startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList);
+ inline void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
+ { startElementV( FSNS( namespaceTokenId, elementTokenId ), xAttrList ); }
+
FastSerializerHelper* write(const char* value);
FastSerializerHelper* write(const rtl::OUString& value);
FastSerializerHelper* write(sal_Int32 value);
@@ -99,7 +105,7 @@ public:
FastAttributeList *createAttrList();
void mark();
- void mergeTopMarks( bool bPrepend = false );
+ void mergeTopMarks( MergeMarksEnum eMergeType = MERGE_MARKS_APPEND );
private:
diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx
index d9553113c759..e1f5161b7e3a 100644
--- a/sax/source/expatwrap/sax_expat.cxx
+++ b/sax/source/expatwrap/sax_expat.cxx
@@ -39,6 +39,7 @@
#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
#include <com/sun/star/xml/sax/XParser.hpp>
#include <com/sun/star/xml/sax/SAXParseException.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
#include <cppuhelper/factory.hxx>
#include <cppuhelper/weak.hxx>
@@ -135,6 +136,11 @@ OUString XmlChar2OUString( const XML_Char *p )
pThis->rDocumentLocator->getColumnNumber()\
) );\
}\
+ catch( com::sun::star::uno::RuntimeException &e ) {\
+ pThis->bExceptionWasThrown = sal_True; \
+ pThis->bRTExceptionWasThrown = sal_True; \
+ pImpl->rtexception = e; \
+ }\
}\
((void)0)
@@ -255,7 +261,9 @@ public: // module scope
// Exception cannot be thrown through the C-XmlParser (possible resource leaks),
// therefor the exception must be saved somewhere.
SAXParseException exception;
- sal_Bool bExceptionWasThrown;
+ RuntimeException rtexception;
+ sal_Bool bExceptionWasThrown;
+ sal_Bool bRTExceptionWasThrown;
Locale locale;
@@ -374,7 +382,8 @@ extern "C"
// LocatorImpl
//---------------------------------------------
class LocatorImpl :
- public WeakImplHelper1< XLocator >
+ public WeakImplHelper2< XLocator, com::sun::star::io::XSeekable >
+ // should use a different interface for stream positions!
{
public:
LocatorImpl( SaxExpatParser_Impl *p )
@@ -400,6 +409,20 @@ public: //XLocator
return m_pParser->getEntity().structSource.sSystemId;
}
+ // XSeekable (only for getPosition)
+
+ virtual void SAL_CALL seek( sal_Int64 ) throw()
+ {
+ }
+ virtual sal_Int64 SAL_CALL getPosition() throw()
+ {
+ return XML_GetCurrentByteIndex( m_pParser->getEntity().pParser );
+ }
+ virtual ::sal_Int64 SAL_CALL getLength() throw()
+ {
+ return 0;
+ }
+
private:
SaxExpatParser_Impl *m_pParser;
@@ -421,6 +444,7 @@ SaxExpatParser::SaxExpatParser( )
m_pImpl->rAttrList = Reference< XAttributeList > ( m_pImpl->pAttrList );
m_pImpl->bExceptionWasThrown = sal_False;
+ m_pImpl->bRTExceptionWasThrown = sal_False;
}
SaxExpatParser::~SaxExpatParser()
@@ -721,6 +745,9 @@ void SaxExpatParser_Impl::parse( )
if( ! bContinue || this->bExceptionWasThrown ) {
+ if ( this->bRTExceptionWasThrown )
+ throw rtexception;
+
// Error during parsing !
XML_Error xmlE = XML_GetErrorCode( getEntity().pParser );
OUString sSystemId = rDocumentLocator->getSystemId();
diff --git a/sax/source/expatwrap/saxwriter.cxx b/sax/source/expatwrap/saxwriter.cxx
index 9be52cdd24c3..717767d86e11 100644
--- a/sax/source/expatwrap/saxwriter.cxx
+++ b/sax/source/expatwrap/saxwriter.cxx
@@ -208,6 +208,8 @@ public:
// If there are invalid characters in the string it returns sal_False.
// Than the calling method has to throw the needed Exception.
inline sal_Bool comment(const rtl::OUString& rComment) throw( SAXException );
+
+ inline void clearBuffer() throw( SAXException );
};
const sal_Bool g_bValidCharsBelow32[32] =
@@ -434,7 +436,7 @@ inline sal_Bool SaxWriterHelper::convertToXML( const sal_Unicode * pStr,
OSL_ENSURE( nSurrogate != 0, "lone 2nd Unicode surrogate" );
nSurrogate = ( nSurrogate << 10 ) | ( c & 0x03ff );
- if( nSurrogate > 0x00010000 && nSurrogate <= 0x001FFFFF )
+ if( nSurrogate >= 0x00010000 && nSurrogate <= 0x0010FFFF )
{
sal_Int8 aBytes[] = { sal_Int8(0xF0 | ((nSurrogate >> 18) & 0x0F)),
sal_Int8(0x80 | ((nSurrogate >> 12) & 0x3F)),
@@ -693,6 +695,17 @@ inline void SaxWriterHelper::endDocument() throw( SAXException )
}
}
+inline void SaxWriterHelper::clearBuffer() throw( SAXException )
+{
+ FinishStartElement();
+ if (nCurrentPos > 0)
+ {
+ m_Sequence.realloc(nCurrentPos);
+ nCurrentPos = writeSequence();
+ m_Sequence.realloc(SEQUENCESIZE);
+ }
+}
+
inline sal_Bool SaxWriterHelper::processingInstruction(const rtl::OUString& rTarget, const rtl::OUString& rData) throw( SAXException )
{
FinishStartElement();
@@ -851,7 +864,7 @@ inline sal_Int32 calcXMLByteLength( const sal_Unicode *pStr, sal_Int32 nStrLen,
{
// 2. surrogate: write as UTF-8 (if range is OK
nSurrogate = ( nSurrogate << 10 ) | ( c & 0x03ff );
- if( nSurrogate > 0x00010000 && nSurrogate <= 0x001FFFFF )
+ if( nSurrogate >= 0x00010000 && nSurrogate <= 0x0010FFFF )
nOutputLength += 4;
nSurrogate = 0;
}
@@ -927,12 +940,20 @@ public: // XActiveDataSource
virtual void SAL_CALL setOutputStream(const Reference< XOutputStream > & aStream)
throw (RuntimeException)
{
+ // temporary: set same stream again to clear buffer
+ if ( m_out == aStream && mp_SaxWriterHelper && m_bDocStarted )
+ mp_SaxWriterHelper->clearBuffer();
+ else
+ {
+
m_out = aStream;
delete mp_SaxWriterHelper;
mp_SaxWriterHelper = new SaxWriterHelper(m_out);
m_bDocStarted = sal_False;
m_nLevel = 0;
m_bIsCDATA = sal_False;
+
+ }
}
virtual Reference< XOutputStream > SAL_CALL getOutputStream(void)
throw(RuntimeException)
diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx
index 4603ceed3343..da4fdfb261db 100644
--- a/sax/source/tools/fastserializer.cxx
+++ b/sax/source/tools/fastserializer.cxx
@@ -326,43 +326,29 @@ namespace sax_fastparser {
void FastSaxSerializer::mark()
{
- maMarkStack.push( Int8Sequence() );
+ maMarkStack.push( ForMerge() );
}
- void FastSaxSerializer::mergeTopMarks( bool bPrepend )
+ void FastSaxSerializer::mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType )
{
if ( maMarkStack.empty() )
return;
if ( maMarkStack.size() == 1 )
{
- mxOutputStream->writeBytes( maMarkStack.top() );
+ mxOutputStream->writeBytes( maMarkStack.top().getData() );
maMarkStack.pop();
+ return;
}
- else
- {
- const Int8Sequence aMerge( maMarkStack.top() );
- maMarkStack.pop();
- sal_Int32 nMergeLen = aMerge.getLength();
- if ( nMergeLen > 0 )
- {
- Int8Sequence &rTop = maMarkStack.top();
- sal_Int32 nTopLen = rTop.getLength();
-
- rTop.realloc( nTopLen + nMergeLen );
- if ( bPrepend )
- {
- // prepend the aMerge to the rTop
- memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen );
- memcpy( rTop.getArray(), aMerge.getConstArray(), nMergeLen );
- }
- else
- {
- // append the aMerge to the rTop
- memcpy( rTop.getArray() + nTopLen, aMerge.getConstArray(), nMergeLen );
- }
- }
+ const Int8Sequence aMerge( maMarkStack.top().getData() );
+ maMarkStack.pop();
+
+ switch ( eMergeType )
+ {
+ case MERGE_MARKS_APPEND: maMarkStack.top().append( aMerge ); break;
+ case MERGE_MARKS_PREPEND: maMarkStack.top().prepend( aMerge ); break;
+ case MERGE_MARKS_POSTPONE: maMarkStack.top().postpone( aMerge ); break;
}
}
@@ -371,15 +357,50 @@ namespace sax_fastparser {
if ( maMarkStack.empty() )
mxOutputStream->writeBytes( aData );
else
+ maMarkStack.top().append( aData );
+ }
+
+ FastSaxSerializer::Int8Sequence& FastSaxSerializer::ForMerge::getData()
+ {
+ merge( maData, maPostponed, true );
+ maPostponed.realloc( 0 );
+
+ return maData;
+ }
+
+ void FastSaxSerializer::ForMerge::prepend( const Int8Sequence &rWhat )
+ {
+ merge( maData, rWhat, false );
+ }
+
+ void FastSaxSerializer::ForMerge::append( const Int8Sequence &rWhat )
+ {
+ merge( maData, rWhat, true );
+ }
+
+ void FastSaxSerializer::ForMerge::postpone( const Int8Sequence &rWhat )
+ {
+ merge( maPostponed, rWhat, true );
+ }
+
+ void FastSaxSerializer::ForMerge::merge( Int8Sequence &rTop, const Int8Sequence &rMerge, bool bAppend )
+ {
+ sal_Int32 nMergeLen = rMerge.getLength();
+ if ( nMergeLen > 0 )
{
- sal_Int32 nDataLen = aData.getLength();
- if ( nDataLen > 0 )
- {
- Int8Sequence &rTop = maMarkStack.top();
- sal_Int32 nTopLen = rTop.getLength();
+ sal_Int32 nTopLen = rTop.getLength();
- rTop.realloc( nTopLen + nDataLen );
- memcpy( rTop.getArray() + nTopLen, aData.getConstArray(), nDataLen );
+ rTop.realloc( nTopLen + nMergeLen );
+ if ( bAppend )
+ {
+ // append the rMerge to the rTop
+ memcpy( rTop.getArray() + nTopLen, rMerge.getConstArray(), nMergeLen );
+ }
+ else
+ {
+ // prepend the rMerge to the rTop
+ memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen );
+ memcpy( rTop.getArray(), rMerge.getConstArray(), nMergeLen );
}
}
}
diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx
index 132b495c0a8b..b0baf8af5df8 100644
--- a/sax/source/tools/fastserializer.hxx
+++ b/sax/source/tools/fastserializer.hxx
@@ -45,6 +45,7 @@
#include <stack>
#include "sax/dllapi.h"
+#include "sax/fshelper.hxx"
#define SERIALIZER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastSerializer"
#define SERIALIZER_SERVICE_NAME "com.sun.star.xml.sax.FastSerializer"
@@ -112,23 +113,45 @@ public:
/** Merge 2 topmost marks.
- There are 2 possibilities - prepend the top before the second top-most
- mark, or append it; prepending brings the possibility to switch parts
- of the output.
+ There are 3 possibilities - prepend the top before the second top-most
+ mark, append it, or append it later; prepending brings the possibility
+ to switch parts of the output, appending later allows to write some
+ output in advance.
Writes the result to the output stream if the mark stack becomes empty
by the operation.
+ When the MERGE_MARKS_POSTPONE is specified, the merge happens just
+ before the next merge.
+
@see mark()
*/
- void mergeTopMarks( bool bPrepend = false );
+ void mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType = sax_fastparser::MERGE_MARKS_APPEND );
private:
::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream;
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxFastTokenHandler;
typedef ::com::sun::star::uno::Sequence< ::sal_Int8 > Int8Sequence;
- ::std::stack< Int8Sequence > maMarkStack;
+ class ForMerge
+ {
+ Int8Sequence maData;
+ Int8Sequence maPostponed;
+
+ public:
+ ForMerge() : maData(), maPostponed() {}
+
+ Int8Sequence& getData();
+
+ void prepend( const Int8Sequence &rWhat );
+ void append( const Int8Sequence &rWhat );
+ void postpone( const Int8Sequence &rWhat );
+
+ private:
+ static void merge( Int8Sequence &rTop, const Int8Sequence &rMerge, bool bAppend );
+ };
+
+ ::std::stack< ForMerge > maMarkStack;
void writeFastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs );
void write( const ::rtl::OUString& s );
@@ -144,4 +167,3 @@ protected:
} // namespace sax_fastparser
#endif
-
diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx
index 594a60ba1d76..743f499fb4f0 100644
--- a/sax/source/tools/fshelper.cxx
+++ b/sax/source/tools/fshelper.cxx
@@ -114,6 +114,12 @@ void FastSerializerHelper::endElement(sal_Int32 elementTokenId)
mpSerializer->endFastElement(elementTokenId);
}
+void FastSerializerHelper::startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
+{
+ mpSerializer->startFastElement(elementTokenId, xAttrList);
+}
+
+
void FastSerializerHelper::singleElement(const char* elementName, XFastAttributeListRef xAttrList)
{
mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList);
@@ -181,9 +187,9 @@ void FastSerializerHelper::mark()
mpSerializer->mark();
}
-void FastSerializerHelper::mergeTopMarks( bool bPrepend )
+void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType )
{
- mpSerializer->mergeTopMarks( bPrepend );
+ mpSerializer->mergeTopMarks( eMergeType );
}
FastAttributeList * FastSerializerHelper::createAttrList()
diff --git a/svtools/inc/dialogcontrolling.hxx b/svtools/inc/dialogcontrolling.hxx
index 9efb098ee013..edb425f78b00 100644
--- a/svtools/inc/dialogcontrolling.hxx
+++ b/svtools/inc/dialogcontrolling.hxx
@@ -52,7 +52,15 @@ namespace svt
class SVT_DLLPUBLIC SAL_NO_VTABLE IWindowOperator
{
public:
- virtual void operateOn( Window& _rOperateOn ) const = 0;
+ /** called when an event happened which should be reacted to
+
+ @param _rTrigger
+ the event which triggered the call. If the Id of the event is 0, then this is the initial
+ call which is made when ->_rOperateOn is added to the responsibility of the DialogController.
+ @param _rOperateOn
+ the window on which to operate
+ */
+ virtual void operateOn( const VclWindowEvent& _rTrigger, Window& _rOperateOn ) const = 0;
virtual ~IWindowOperator();
};
@@ -61,13 +69,13 @@ namespace svt
//=====================================================================
//= IWindowEventFilter
//=====================================================================
- /** an abstract interface for deciding whether a ->VclSimpleEvent
+ /** an abstract interface for deciding whether a ->VclWindowEvent
is worth paying attention to
*/
class SVT_DLLPUBLIC SAL_NO_VTABLE IWindowEventFilter
{
public:
- virtual bool payAttentionTo( const VclSimpleEvent& _rEvent ) const = 0;
+ virtual bool payAttentionTo( const VclWindowEvent& _rEvent ) const = 0;
virtual ~IWindowEventFilter();
};
@@ -96,7 +104,7 @@ namespace svt
::std::auto_ptr< DialogController_Data > m_pImpl;
public:
- DialogController( Window& _rInstigator, const PWindowEventFilter _pEventFilter, const PWindowOperator _pOperator );
+ DialogController( Window& _rInstigator, const PWindowEventFilter& _pEventFilter, const PWindowOperator& _pOperator );
virtual ~DialogController();
/** adds a window to the list of dependent windows
@@ -117,10 +125,10 @@ namespace svt
private:
void impl_Init();
- void impl_updateAll();
- void impl_update( Window& _rWindow );
+ void impl_updateAll( const VclWindowEvent& _rTriggerEvent );
+ void impl_update( const VclWindowEvent& _rTriggerEvent, Window& _rWindow );
- DECL_LINK( OnWindowEvent, const VclSimpleEvent* );
+ DECL_LINK( OnWindowEvent, const VclWindowEvent* );
private:
DialogController( const DialogController& ); // never implemented
@@ -184,10 +192,9 @@ namespace svt
/** adds a non-standard controller whose functionality is not covered by the other methods
@param _pController
- the controller to add to the manager. Must not be <NULL/>. The manager takes ownership
- of the controller.
+ the controller to add to the manager. Must not be <NULL/>.
*/
- void addController( DialogController* _pController );
+ void addController( const PDialogController& _pController );
private:
ControlDependencyManager( const ControlDependencyManager& ); // never implemented
@@ -224,7 +231,7 @@ namespace svt
{
}
- virtual void operateOn( Window& _rOperateOn ) const
+ virtual void operateOn( const VclWindowEvent& /*_rTrigger*/, Window& _rOperateOn ) const
{
_rOperateOn.Enable( m_rCheckable.IsChecked() );
}
@@ -248,12 +255,11 @@ namespace svt
{
}
- bool payAttentionTo( const VclSimpleEvent& _rEvent ) const
+ bool payAttentionTo( const VclWindowEvent& _rEvent ) const
{
- const VclWindowEvent& rWindowEvent = dynamic_cast< const VclWindowEvent& >( _rEvent );
- if ( ( rWindowEvent.GetWindow() == &m_rWindow )
- && ( ( rWindowEvent.GetId() == VCLEVENT_RADIOBUTTON_TOGGLE )
- || ( rWindowEvent.GetId() == VCLEVENT_CHECKBOX_TOGGLE )
+ if ( ( _rEvent.GetWindow() == &m_rWindow )
+ && ( ( _rEvent.GetId() == VCLEVENT_RADIOBUTTON_TOGGLE )
+ || ( _rEvent.GetId() == VCLEVENT_CHECKBOX_TOGGLE )
)
)
return true;
diff --git a/svtools/inc/docmspasswdrequest.hxx b/svtools/inc/docmspasswdrequest.hxx
deleted file mode 100644
index 684bffe71760..000000000000
--- a/svtools/inc/docmspasswdrequest.hxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright IBM Corporation 2009.
- * Copyright 2009 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: docmspasswdrequest.hxx,v $
- * $Revision: 1.0 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX
-#define INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX
-
-#include "svtools/svldllapi.h"
-#include <com/sun/star/task/DocumentMSPasswordRequest.hpp>
-#include <com/sun/star/task/XInteractionRequest.hpp>
-#include <rtl/ustring.hxx>
-#include <cppuhelper/implbase1.hxx>
-
-class MSAbortContinuation;
-class MSPasswordContinuation;
-
-class SVL_DLLPUBLIC RequestMSDocumentPassword : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
-{
- ::com::sun::star::uno::Any m_aRequest;
-
- ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >
- > m_lContinuations;
-
- MSAbortContinuation* m_pAbort;
- MSPasswordContinuation* m_pPassword;
-
-public:
- RequestMSDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName );
-
- sal_Bool isAbort();
- sal_Bool isPassword();
-
- ::rtl::OUString getPassword();
-
- virtual ::com::sun::star::uno::Any SAL_CALL getRequest()
- throw( ::com::sun::star::uno::RuntimeException );
-
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >
- > SAL_CALL getContinuations()
- throw( ::com::sun::star::uno::RuntimeException );
-};
-
-#endif /* INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX */
diff --git a/svtools/inc/docpasswdrequest.hxx b/svtools/inc/docpasswdrequest.hxx
deleted file mode 100644
index 69095fbe5a5c..000000000000
--- a/svtools/inc/docpasswdrequest.hxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: docpasswdrequest.hxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef INCLUDED_SVTOOLS_DOCPASSWDREQUEST_HXX
-#define INCLUDED_SVTOOLS_DOCPASSWDREQUEST_HXX
-
-#include "svtools/svldllapi.h"
-#include <com/sun/star/task/DocumentPasswordRequest.hpp>
-#include <com/sun/star/task/XInteractionRequest.hpp>
-#include <rtl/ustring.hxx>
-#include <cppuhelper/implbase1.hxx>
-
-class AbortContinuation;
-class PasswordContinuation;
-
-class SVL_DLLPUBLIC RequestDocumentPassword : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
-{
- ::com::sun::star::uno::Any m_aRequest;
-
- ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >
- > m_lContinuations;
-
- AbortContinuation* m_pAbort;
- PasswordContinuation* m_pPassword;
-
-public:
- RequestDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName );
-
- sal_Bool isAbort();
- sal_Bool isPassword();
-
- ::rtl::OUString getPassword();
-
- virtual ::com::sun::star::uno::Any SAL_CALL getRequest()
- throw( ::com::sun::star::uno::RuntimeException );
-
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >
- > SAL_CALL getContinuations()
- throw( ::com::sun::star::uno::RuntimeException );
-};
-
-#endif /* INCLUDED_SVTOOLS_DOCPASSWDREQUEST_HXX */
diff --git a/svtools/inc/eventcfg.hxx b/svtools/inc/eventcfg.hxx
index 4478d3f48028..4ee175f5b7e0 100644
--- a/svtools/inc/eventcfg.hxx
+++ b/svtools/inc/eventcfg.hxx
@@ -40,6 +40,35 @@
#include <hash_map>
#include <vector>
+#define STR_EVENT_STARTAPP 0
+#define STR_EVENT_CLOSEAPP 1
+#define STR_EVENT_DOCCREATED 2
+#define STR_EVENT_CREATEDOC 3
+#define STR_EVENT_LOADFINISHED 4
+#define STR_EVENT_OPENDOC 5
+#define STR_EVENT_PREPARECLOSEDOC 6
+#define STR_EVENT_CLOSEDOC 7
+#define STR_EVENT_SAVEDOC 8
+#define STR_EVENT_SAVEDOCDONE 9
+#define STR_EVENT_SAVEDOCFAILED 10
+#define STR_EVENT_SAVEASDOC 11
+#define STR_EVENT_SAVEASDOCDONE 12
+#define STR_EVENT_SAVEASDOCFAILED 13
+#define STR_EVENT_SAVETODOC 14
+#define STR_EVENT_SAVETODOCDONE 15
+#define STR_EVENT_SAVETODOCFAILED 16
+#define STR_EVENT_ACTIVATEDOC 17
+#define STR_EVENT_DEACTIVATEDOC 18
+#define STR_EVENT_PRINTDOC 19
+#define STR_EVENT_VIEWCREATED 20
+#define STR_EVENT_PREPARECLOSEVIEW 21
+#define STR_EVENT_CLOSEVIEW 22
+#define STR_EVENT_MODIFYCHANGED 23
+#define STR_EVENT_TITLECHANGED 24
+#define STR_EVENT_VISAREACHANGED 25
+#define STR_EVENT_MODECHANGED 26
+#define STR_EVENT_STORAGECHANGED 27
+
typedef ::std::hash_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > EventBindingHash;
typedef ::std::vector< ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XFrame > > FrameVector;
typedef ::std::vector< ::rtl::OUString > SupportedEventsVector;
@@ -67,7 +96,7 @@ public:
::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException);
::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException);
::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException);
-
+ ::rtl::OUString GetEventName( sal_Int32 nID );
};
class SVL_DLLPUBLIC GlobalEventConfig:
@@ -86,7 +115,7 @@ class SVL_DLLPUBLIC GlobalEventConfig:
::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException);
::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException);
::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException);
-
+ static ::rtl::OUString GetEventName( sal_Int32 nID );
private:
static GlobalEventConfig_Impl* m_pImpl;
diff --git a/svtools/inc/sfxecode.hxx b/svtools/inc/sfxecode.hxx
index 01292f1c87fa..d87fff819748 100644
--- a/svtools/inc/sfxecode.hxx
+++ b/svtools/inc/sfxecode.hxx
@@ -85,6 +85,7 @@
#define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 52)
#define ERRCODE_SFX_BROKENSIGNATURE (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 53)
#define ERRCODE_SFX_SHARED_NOPASSWORDCHANGE (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 54)
+#define ERRCODE_SFX_INCOMPLETE_ENCRYPTION (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 55)
diff --git a/svtools/inc/svtools/embedhlp.hxx b/svtools/inc/svtools/embedhlp.hxx
index 08fe3c7d162a..f4cccd3115b8 100644
--- a/svtools/inc/svtools/embedhlp.hxx
+++ b/svtools/inc/svtools/embedhlp.hxx
@@ -131,6 +131,7 @@ namespace svt
BOOL is() const { return mxObj.is(); }
BOOL IsChart() const;
+ void SetDefaultSizeForChart( const Size& rSizeIn_100TH_MM );//#i103460# charts do not necessaryly have an own size within ODF files, in this case they need to use the size settings from the surrounding frame, which is made available with this method
};
}
diff --git a/svtools/inc/svtools/loginerr.hxx b/svtools/inc/svtools/loginerr.hxx
deleted file mode 100644
index f04e569b41e0..000000000000
--- a/svtools/inc/svtools/loginerr.hxx
+++ /dev/null
@@ -1,156 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: loginerr.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef _LOGINERR_HXX
-#define _LOGINERR_HXX
-
-#include <tools/string.hxx>
-#include <tools/errcode.hxx>
-#include <svtools/hint.hxx>
-
-//=========================================================================
-
-#define LOGINERROR_FLAG_SET_SAVE_PASSWORD 1
-#define LOGINERROR_FLAG_MODIFY_ACCOUNT 2
-#define LOGINERROR_FLAG_MODIFY_USER_NAME 4
-#define LOGINERROR_FLAG_PERSISTENT_PASSWORD 8
-
-class LoginErrorInfo
-{
-private:
- String _aTitle;
- String _aServer;
- String _aAccount;
- String _aUserName;
- String _aPassword;
- String _aPath;
- String _aErrorText;
- BYTE _nFlags;
- USHORT _nRet;
-
-public:
- LoginErrorInfo()
- : _nFlags( LOGINERROR_FLAG_MODIFY_USER_NAME ),
- _nRet( ERRCODE_BUTTON_CANCEL )
- {
- }
-
- const String& GetTitle() const { return _aTitle; }
- const String& GetServer() const { return _aServer; }
- const String& GetAccount() const { return _aAccount; }
- const String& GetUserName() const { return _aUserName; }
- const String& GetPassword() const { return _aPassword; }
- const String& GetPath() const { return _aPath; }
- const String& GetErrorText() const { return _aErrorText; }
- BOOL GetIsPersistentPassword() const
- { return ( _nFlags & LOGINERROR_FLAG_PERSISTENT_PASSWORD ); }
- BOOL GetIsSavePassword() const
- { return ( _nFlags & LOGINERROR_FLAG_SET_SAVE_PASSWORD ); }
- BYTE GetFlags() const { return _nFlags; }
- USHORT GetResult() const { return _nRet; }
-
- void SetTitle( const String& aTitle )
- { _aTitle = aTitle; }
- void SetServer( const String& aServer )
- { _aServer = aServer; }
- void SetAccount( const String& aAccount )
- { _aAccount = aAccount; }
- void SetUserName( const String& aUserName )
- { _aUserName = aUserName; }
- void SetPassword( const String& aPassword )
- { _aPassword = aPassword; }
- void SetPath( const String& aPath )
- { _aPath = aPath; }
- void SetErrorText( const String& aErrorText )
- { _aErrorText = aErrorText; }
- void SetFlags( BYTE nFlags )
- { _nFlags = nFlags; }
- inline void SetSavePassword( BOOL bSet );
- inline void SetPersistentPassword( BOOL bSet );
- inline void SetModifyAccount( BOOL bSet );
- inline void SetModifyUserName( BOOL bSet );
- void SetResult( USHORT nRet )
- { _nRet = nRet; }
-};
-
-inline void LoginErrorInfo::SetSavePassword( BOOL bSet )
-{
- if ( bSet )
- _nFlags |= LOGINERROR_FLAG_SET_SAVE_PASSWORD;
- else
- _nFlags &= ~LOGINERROR_FLAG_SET_SAVE_PASSWORD;
-}
-
-inline void LoginErrorInfo::SetPersistentPassword( BOOL bSet )
-{
- if ( bSet )
- _nFlags |= LOGINERROR_FLAG_PERSISTENT_PASSWORD;
- else
- _nFlags &= ~LOGINERROR_FLAG_PERSISTENT_PASSWORD;
-}
-
-inline void LoginErrorInfo::SetModifyAccount( BOOL bSet )
-{
- if ( bSet )
- _nFlags |= LOGINERROR_FLAG_MODIFY_ACCOUNT;
- else
- _nFlags &= ~LOGINERROR_FLAG_MODIFY_ACCOUNT;
-}
-
-inline void LoginErrorInfo::SetModifyUserName( BOOL bSet )
-{
- if ( bSet )
- _nFlags |= LOGINERROR_FLAG_MODIFY_USER_NAME;
- else
- _nFlags &= ~LOGINERROR_FLAG_MODIFY_USER_NAME;
-}
-
-//=========================================================================
-
-class CntLoginErrorHint : public SfxHint
-{
-private:
- LoginErrorInfo* _pInfo;
-
- CntLoginErrorHint( const CntLoginErrorHint& ); // n.i.
- CntLoginErrorHint& operator=( const CntLoginErrorHint& ); // n.i.
-
-public:
- TYPEINFO();
-
- CntLoginErrorHint( LoginErrorInfo* pInfo )
- : _pInfo( pInfo )
- {
- }
-
- LoginErrorInfo& GetErrorInfo() const { return *_pInfo; }
-};
-
-#endif
diff --git a/svtools/inc/svtools/optionsdrawinglayer.hxx b/svtools/inc/svtools/optionsdrawinglayer.hxx
index e0b287002f34..120cccfa4232 100644
--- a/svtools/inc/svtools/optionsdrawinglayer.hxx
+++ b/svtools/inc/svtools/optionsdrawinglayer.hxx
@@ -190,6 +190,15 @@ class SVL_DLLPUBLIC SvtOptionsDrawinglayer
void SetQuadratic3DRenderLimit(sal_uInt32 nNew);
void SetQuadraticFormControlRenderLimit(sal_uInt32 nNew);
+ // #i97672# selection settings
+ sal_Bool IsTransparentSelection() const;
+ sal_uInt16 GetTransparentSelectionPercent() const;
+ sal_uInt16 GetSelectionMaximumLuminancePercent() const;
+
+ void SetTransparentSelection( sal_Bool bState );
+ void SetTransparentSelectionPercent( sal_uInt16 nPercent );
+ void SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent );
+
//-------------------------------------------------------------------------------------------------------------
// private methods
//-------------------------------------------------------------------------------------------------------------
diff --git a/svtools/inc/svtools/saveopt.hxx b/svtools/inc/svtools/saveopt.hxx
index 6dfd083a3ca2..2966e2f24aba 100644
--- a/svtools/inc/svtools/saveopt.hxx
+++ b/svtools/inc/svtools/saveopt.hxx
@@ -60,12 +60,16 @@ public:
E_ODFDEFAULTVERSION
};
+ // keep enum values sorted that a less or greater compare maps to older and newer versions!
enum ODFDefaultVersion
{
ODFVER_UNKNOWN = 0, // unknown
- ODFVER_010, // ODF 1.0
- ODFVER_011, // ODF 1.1
- ODFVER_012 // ODF 1.2
+ ODFVER_010 = 1, // ODF 1.0
+ ODFVER_011 = 2, // ODF 1.1
+ DO_NOT_USE = 3, // Do not use this, only here for compatibility with pre OOo 3.2 configuration
+ ODFVER_012 = 4, // ODF 1.2
+
+ ODFVER_LATEST = SAL_MAX_ENUM, // ODF latest version with enhancements
};
SvtSaveOptions();
diff --git a/svtools/inc/svtools/table/abstracttablecontrol.hxx b/svtools/inc/svtools/table/abstracttablecontrol.hxx
new file mode 100644
index 000000000000..03bc0a999f7a
--- /dev/null
+++ b/svtools/inc/svtools/table/abstracttablecontrol.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
+#define SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
+
+#include <sal/types.h>
+#include <vcl/event.hxx>
+#include <vcl/seleng.hxx>
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ enum TableControlAction
+ {
+ /// moves the cursor in the table control one row up, if possible, by keeping the current column
+ cursorUp,
+ /// moves the cursor in the table control one row down, if possible, by keeping the current column
+ cursorDown,
+ /// moves the cursor in the table control one column to the left, if possible, by keeping the current row
+ cursorLeft,
+ /// moves the cursor in the table control one column to the right, if possible, by keeping the current row
+ cursorRight,
+ /// moves the cursor to the beginning of the current line
+ cursorToLineStart,
+ /// moves the cursor to the end of the current line
+ cursorToLineEnd,
+ /// moves the cursor to the first row, keeping the current column
+ cursorToFirstLine,
+ /// moves the cursor to the last row, keeping the current column
+ cursorToLastLine,
+ /// moves the cursor one page up, keeping the current column
+ cursorPageUp,
+ /// moves the cursor one page down, keeping the current column
+ cursorPageDown,
+ /// moves the cursor to the top-most, left-most cell
+ cursorTopLeft,
+ /// moves the cursor to the bottom-most, right-most cell
+ cursorBottomRight,
+ /// selects the row, where the actual cursor is
+ cursorSelectRow,
+ /// selects the rows, above the actual cursor is
+ cursorSelectRowUp,
+ /// selects the row, beneath the actual cursor is
+ cursorSelectRowDown,
+ /// selects the row, from the actual cursor till top
+ cursorSelectRowAreaTop,
+ /// selects the row, from the actual cursor till bottom
+ cursorSelectRowAreaBottom,
+
+
+ /// invalid and final enumeration value, not to be actually used
+ invalidTableControlAction
+ };
+
+ //====================================================================
+ //= IAbstractTableControl
+ //====================================================================
+ /** defines a callback interface to be implemented by a concrete table control
+ */
+ class SAL_NO_VTABLE IAbstractTableControl
+ {
+ public:
+ /** hides the cell cursor
+
+ The method cares for successive calls, that is, for every call to
+ ->hideCursor(), you need one call to ->showCursor. Only if the number
+ of both calls matches, the cursor is really shown.
+
+ @see showCursor
+ */
+ virtual void hideCursor() = 0;
+
+ /** shows the cell cursor
+
+ @see hideCursor
+ */
+ virtual void showCursor() = 0;
+
+ /** dispatches an action to the table control
+
+ @return
+ <TRUE/> if the action could be dispatched successfully, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the action, or impossibility
+ to execute the action at all (for instance moving up one row when already positioned
+ on the very first row).
+
+ @see TableControlAction
+ */
+ virtual bool dispatchAction( TableControlAction _eAction ) = 0;
+ /** to be called on mouse button up/down
+ @return
+ <TRUE/> if the click was in the visible area of the table control,
+ <FALSE/> otherwise.*/
+ virtual bool isClickInVisibleArea( const Point& _rPoint ) = 0;
+ /** returns selection engine*/
+ virtual SelectionEngine* getSelEngine() = 0;
+ virtual void setCursorAtCurrentCell(const Point& rPoint) = 0;
+
+ virtual ~IAbstractTableControl() {};
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
diff --git a/svtools/inc/svtools/table/defaultinputhandler.hxx b/svtools/inc/svtools/table/defaultinputhandler.hxx
new file mode 100644
index 000000000000..eb1c14b43a85
--- /dev/null
+++ b/svtools/inc/svtools/table/defaultinputhandler.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX
+#define SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX
+
+#include <svtools/table/tableinputhandler.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ struct DefaultInputHandler_Impl;
+
+ //====================================================================
+ //= DefaultInputHandler
+ //====================================================================
+ class DefaultInputHandler : public ITableInputHandler
+ {
+ friend class TableDataWindow;
+ private:
+ DefaultInputHandler_Impl* m_pImpl;
+
+ public:
+ DefaultInputHandler();
+ ~DefaultInputHandler();
+
+ virtual bool MouseMove ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt );
+ virtual bool MouseButtonDown ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt );
+ virtual bool MouseButtonUp ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt );
+ virtual bool KeyInput ( IAbstractTableControl& _rControl, const KeyEvent& rKEvt );
+ virtual bool GetFocus ( IAbstractTableControl& _rControl );
+ virtual bool LoseFocus ( IAbstractTableControl& _rControl );
+ virtual bool RequestHelp ( IAbstractTableControl& _rControl, const HelpEvent& rHEvt );
+ virtual bool Command ( IAbstractTableControl& _rControl, const CommandEvent& rCEvt );
+ virtual bool PreNotify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt );
+ virtual bool Notify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt );
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX
diff --git a/svtools/inc/svtools/table/gridtablerenderer.hxx b/svtools/inc/svtools/table/gridtablerenderer.hxx
new file mode 100644
index 000000000000..a935f6b7386e
--- /dev/null
+++ b/svtools/inc/svtools/table/gridtablerenderer.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX
+#define SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX
+
+#include <svtools/table/tablemodel.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ struct GridTableRenderer_Impl;
+
+ //====================================================================
+ //= GridTableRenderer
+ //====================================================================
+ /** a default implementation for the ->ITableRenderer interface
+
+ This class is able to paint a table grid, table headers, and cell
+ backgrounds according to the selected/active state of cells.
+
+ TODO update the documentation when it's decided whether this renderer
+ also does value handling
+ */
+ class GridTableRenderer : public ITableRenderer
+ {
+ private:
+ GridTableRenderer_Impl* m_pImpl;
+
+ public:
+ /** creates a table renderer associated with the given model
+
+ @param _rModel
+ the model which should be rendered. The caller is responsible
+ for lifetime control, that is, the model instance must live
+ at least as long as the renderer instance lives
+ */
+ GridTableRenderer( ITableModel& _rModel );
+ ~GridTableRenderer();
+
+ /** returns the index of the row currently being painted
+
+ According to the ->ITableRenderer interface, one call is made
+ to the renderer with a row to prepare (->PrepareRow()), and subsequent
+ calls do not carry the row index anymore, but are relative to the
+ row which has previously been prepared.
+
+ This method returns the index of the last row which has been prepared
+ */
+ RowPos getCurrentRow();
+
+ protected:
+ // ITableRenderer overridables
+ virtual void PaintHeaderArea(
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle );
+ virtual void PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle );
+ virtual void PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rRowArea,
+ const StyleSettings& _rStyle );
+ virtual void PaintRowHeader(
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText );
+ virtual void PaintCell( ColPos _nColumn,
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText );
+ virtual void ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect);
+ virtual void HideCellCursor( Window& _rView, const Rectangle& _rCursorRect);
+ };
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX
diff --git a/svtools/inc/svtools/table/tablecontrol.hxx b/svtools/inc/svtools/table/tablecontrol.hxx
new file mode 100644
index 000000000000..98fddcb7d9e1
--- /dev/null
+++ b/svtools/inc/svtools/table/tablecontrol.hxx
@@ -0,0 +1,174 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLECONTROL_HXX
+#define SVTOOLS_INC_TABLE_TABLECONTROL_HXX
+
+#include <svtools/table/tablemodel.hxx>
+#include <vcl/ctrl.hxx>
+#include <vcl/seleng.hxx>
+#include <svtools/table/tabledatawindow.hxx>
+//........................................................................
+
+namespace svt { namespace table
+{
+//........................................................................
+
+ class TableControl_Impl;
+ class TableDataWindow;
+ //====================================================================
+ //= TableControl
+ //====================================================================
+ /** a basic control which manages table-like data, i.e. a number of cells
+ organized in <code>m</code> rows and <code>n</code> columns.
+
+ The control itself does not do any assumptions about the concrete data
+ it displays, this is encapsulated in an instance supporting the
+ ->ITableModel interface.
+
+ Also, the control does not do any assumptions about how the model's
+ content is rendered. This is the responsibility of a component
+ supporting the ->ITableRenderer interface (the renderer is obtained from
+ the model).
+
+ The control supports the concept of a <em>current</em> (or <em>active</em>
+ cell).
+
+ // TODO: scrolling?
+ */
+ class TableControl : public Control
+ {
+ private:
+ DECL_LINK( ImplMouseButtonDownHdl, MouseEvent* );
+ DECL_LINK( ImplMouseButtonUpHdl, MouseEvent* );
+
+ TableControl_Impl* m_pImpl;
+ public:
+ TableControl( Window* _pParent, WinBits _nStyle );
+ ~TableControl();
+
+ /// sets a new table model
+ void SetModel( PTableModel _pModel );
+ /// retrieves the current table model
+ PTableModel GetModel() const;
+
+ /// returns the top row, i.e. the first visible row
+ RowPos GetTopRow() const;
+ /// sets a new top row. The top row is the first visible row in the control
+ void SetTopRow( RowPos _nRow );
+
+ /** retrieves the current row
+
+ The current row is the one which contains the active cell.
+
+ @return
+ the row index of the active cell, or ->ROW_INVALID
+ if there is no active cell, e.g. because the table does
+ not contain any rows or columns.
+ */
+ RowPos GetCurrentRow() const;
+
+ /** returns the row, which contains the input point*/
+
+ RowPos GetCurrentRow (const Point& rPoint);
+
+ /** retrieves the current column
+
+ The current col is the one which contains the active cell.
+
+ @return
+ the column index of the active cell, or ->COL_INVALID
+ if there is no active cell, e.g. because the table does
+ not contain any rows or columns.
+ */
+ ColPos GetCurrentColumn() const;
+
+ /** activates the cell at the given position
+
+ @return
+ <TRUE/> if the move was successful, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the move,
+ or impossibility to execute the move at all (for instance because
+ of invalid coordinates).
+ */
+ bool GoTo( ColPos _nColumn, RowPos _nRow );
+
+ /** moves the active cell to the given column, by keeping the active row
+
+ @return
+ <TRUE/> if the move was successful, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the move,
+ or impossibility to execute the move at all (for instance because
+ of invalid coordinates).
+ */
+ inline bool GoToColumn( ColPos _nColumn )
+ {
+ return GoTo( _nColumn, GetCurrentRow() );
+ }
+
+ /** moves the active cell to the given row, by keeping the active column
+
+ @return
+ <TRUE/> if the move was successful, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the move,
+ or impossibility to execute the move at all (for instance because
+ of invalid coordinates).
+ */
+ bool GoToRow( RowPos _nRow )
+ {
+ return GoTo( GetCurrentColumn(), _nRow );
+ }
+ virtual void Resize();
+
+ /**invalidates the table if table has been changed e.g. new row added
+ */
+ void InvalidateDataWindow(RowPos _nRowStart, bool _bRemoved);
+ /**gets the vector, which contains the selected rows
+ */
+ std::vector<RowPos> getSelectedRows();
+ /**after removing a row, updates the vector which contains the selected rows
+ if the row, which should be removed, is selected, it will be erased from the vector
+ */
+ void removeSelectedRow(RowPos _nRowPos);
+ SelectionEngine* getSelEngine();
+ TableDataWindow* getDataWindow();
+ // protected:
+ // Window overridables
+ virtual void GetFocus();
+ virtual void LoseFocus();
+ virtual void KeyInput( const KeyEvent& rKEvt );
+ //virtual long Notify(NotifyEvent& rNEvt);
+
+ private:
+ TableControl(); // never implemented
+ TableControl( const TableControl& ); // never implemented
+ TableControl& operator=( const TableControl& ); // never implemented
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLECONTROL_HXX
diff --git a/svtools/inc/svtools/table/tabledatawindow.hxx b/svtools/inc/svtools/table/tabledatawindow.hxx
new file mode 100644
index 000000000000..fddbfdcd4a3c
--- /dev/null
+++ b/svtools/inc/svtools/table/tabledatawindow.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX
+#define SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX
+
+#ifndef _SV_WINDOW_HXX
+#include <vcl/window.hxx>
+#endif
+#include <vcl/seleng.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ class TableControl_Impl;
+ class TableFunctionSet;
+
+
+ //====================================================================
+ //= TableDataWindow
+ //====================================================================
+ /** the window containing the content area (including headers) of
+ a table control
+ */
+ class TableDataWindow : public Window
+ {
+ friend class TableFunctionSet;
+ private:
+ TableControl_Impl& m_rTableControl;
+ Link m_aMouseButtonDownHdl;
+ Link m_aMouseButtonUpHdl;
+
+ public:
+ TableDataWindow( TableControl_Impl& _rTableControl );
+ inline void SetMouseButtonDownHdl( const Link& rLink ) { m_aMouseButtonDownHdl = rLink; }
+ inline const Link& GetMouseButtonDownHdl() const { return m_aMouseButtonDownHdl; }
+ inline void SetMouseButtonUpHdl( const Link& rLink ) { m_aMouseButtonUpHdl = rLink; }
+ inline const Link& GetMouseButtonUpHdl() const { return m_aMouseButtonUpHdl; }
+
+ // Window overridables
+ virtual void Paint( const Rectangle& rRect );
+ virtual void MouseMove( const MouseEvent& rMEvt);
+ virtual void MouseButtonDown( const MouseEvent& rMEvt);
+ virtual void MouseButtonUp( const MouseEvent& rMEvt);
+
+ };
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX
diff --git a/svtools/inc/svtools/table/tableinputhandler.hxx b/svtools/inc/svtools/table/tableinputhandler.hxx
new file mode 100644
index 000000000000..c0d3a2b5c18a
--- /dev/null
+++ b/svtools/inc/svtools/table/tableinputhandler.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX
+#define SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX
+
+#include <boost/shared_ptr.hpp>
+
+class MouseEvent;
+class KeyEvent;
+class HelpEvent;
+class CommandEvent;
+class NotifyEvent;
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ class IAbstractTableControl;
+
+ //====================================================================
+ //= ITableInputHandler
+ //====================================================================
+ /** interface for components handling input in a ->TableControl
+ */
+ class ITableInputHandler
+ {
+ public:
+ // all those methods have the same semantics as the equal-named methods of ->Window,
+ // with the additional option to return a boolean value indicating whether
+ // the event should be further processed by the ->Window implementations (<FALSE/>),
+ // or whether it has been sufficiently handled by the ->ITableInputHandler instance
+ // (<FALSE/>).
+
+ virtual bool MouseMove ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool MouseButtonDown ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool MouseButtonUp ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool KeyInput ( IAbstractTableControl& _rControl, const KeyEvent& rKEvt ) = 0;
+ virtual bool GetFocus ( IAbstractTableControl& _rControl ) = 0;
+ virtual bool LoseFocus ( IAbstractTableControl& _rControl ) = 0;
+ virtual bool RequestHelp ( IAbstractTableControl& _rControl, const HelpEvent& rHEvt ) = 0;
+ virtual bool Command ( IAbstractTableControl& _rControl, const CommandEvent& rCEvt ) = 0;
+ virtual bool PreNotify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ) = 0;
+ virtual bool Notify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ) = 0;
+
+ virtual ~ITableInputHandler() { }
+ };
+ typedef ::boost::shared_ptr< ITableInputHandler > PTableInputHandler;
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX
diff --git a/svtools/inc/svtools/table/tablemodel.hxx b/svtools/inc/svtools/table/tablemodel.hxx
new file mode 100644
index 000000000000..a1af1e1750ed
--- /dev/null
+++ b/svtools/inc/svtools/table/tablemodel.hxx
@@ -0,0 +1,454 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLEMODEL_HXX
+#define SVTOOLS_INC_TABLE_TABLEMODEL_HXX
+
+#include <svtools/table/tabletypes.hxx>
+#include <svtools/table/tablerenderer.hxx>
+#include <svtools/table/tableinputhandler.hxx>
+
+#include <sal/types.h>
+
+#include <boost/shared_ptr.hpp>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+
+ //====================================================================
+ //= cell data
+ //====================================================================
+ struct CellEntryType
+ {
+ String m_aStr;
+ //Image m_aImage;
+ //Control m_aControl;
+ CellEntryType( const String& _rStr ) :
+ m_aStr( _rStr )
+ {}
+ };
+
+ //typedef ::std::vector<CellEntryType*> CellColumnContent;
+ //vector, which contains text data for each cell
+ typedef ::std::vector<String> CellColumnContent;
+ //vector, which contains data for rows
+ typedef ::std::vector<CellColumnContent> CellContent;
+ //====================================================================
+ //= ScrollbarVisibility
+ //====================================================================
+ enum ScrollbarVisibility
+ {
+ /** enumeration value denoting that a scrollbar should never be visible, even
+ if needed normally
+ */
+ ScrollbarShowNever,
+ /** enumeration value denoting that a scrollbar should be visible when needed only
+ */
+ ScrollbarShowSmart,
+ /** enumeration value denoting that a scrollbar should always be visible, even
+ if not needed normally
+ */
+ ScrollbarShowAlways
+ };
+
+ //====================================================================
+ //= ITableModelListener
+ //====================================================================
+ /** declares an interface to be implemented by components interested in
+ changes in an ->ITableModel
+ */
+ class SAL_NO_VTABLE ITableModelListener
+ {
+ public:
+ //virtual void onTableModelChanged(PTableModel pTableModel) = 0;
+ /** notifies the listener that one or more rows have been inserted into
+ the table
+
+ @param first
+ the index of the first newly inserted row
+ @param last
+ the index of the last newly inserted row. Must not be smaller
+ than ->first
+ */
+ virtual void rowsInserted( RowPos first, RowPos last ) = 0;
+
+ /** notifies the listener that one or more rows have been removed from
+ the table
+
+ @param first
+ the old index of the first removed row
+ @param last
+ the old index of the last removed row. Must not be smaller
+ than ->first
+ */
+ virtual void rowsRemoved( RowPos first, RowPos last ) = 0;
+
+ /** notifies the listener that one or more columns have been inserted into
+ the table
+
+ @param first
+ the index of the first newly inserted row
+ @param last
+ the index of the last newly inserted row. Must not be smaller
+ than ->first
+ */
+ virtual void columnsInserted( ColPos first, ColPos last ) = 0;
+
+ /** notifies the listener that one or more columns have been removed from
+ the table
+
+ @param first
+ the old index of the first removed row
+ @param last
+ the old index of the last removed row. Must not be smaller
+ than ->first
+ */
+ virtual void columnsRemoved( ColPos first, ColPos last ) = 0;
+
+ /** notifies the listener that a column in the table has moved
+
+ @param oldIndex
+ the old index of the column within the model
+ @param newIndex
+ the new index of the column within the model
+ */
+ virtual void columnMoved( ColPos oldIndex, ColPos newIndex ) = 0;
+
+ /** notifies the listener that a rectangular cell range in the table
+ has been updated
+
+ Listeners are required to discard any possibly cached information
+ they have about the cells in question, in particular any possibly
+ cached cell values.
+ */
+ virtual void cellsUpdated( ColPos firstCol, ColPos lastCol, RowPos firstRow, RowPos lastRow ) = 0;
+
+ /// deletes the listener instance
+ virtual ~ITableModelListener(){};
+ };
+ typedef ::boost::shared_ptr< ITableModelListener > PTableModelListener;
+
+ //====================================================================
+ //= IColumnModel
+ //====================================================================
+ /** interface to be implemented by table column models
+ */
+ class SAL_NO_VTABLE IColumnModel
+ {
+ public:
+ /** retrieves the ID of the column
+
+ The semantics of a column id is not defined. It's up to the
+ implementor of the ->IColumnModel, respectively the ->ITableModel
+ which provides the column models, to define such a semantics.
+
+ @return
+ the ID of the column. May be 0 if the table which the column
+ belongs to does not need and support column ids.
+
+ @see setID
+ */
+ virtual ColumnID getID() const = 0;
+
+ /** sets a new column ID
+
+ @return
+ <TRUE/> if setting the new ID was successfull. A possible error
+ conditions is if you try to set an ID which is already used
+ by another column within the same table.
+
+ @see getID
+ */
+ virtual bool setID( const ColumnID _nID ) = 0;
+
+ /** returns the name of the column
+
+ Column names should be human-readable, but not necessarily unique
+ within a given table.
+
+ @see setName
+ */
+ virtual String getName() const = 0;
+
+ /** sets a new name for the column
+
+ @see getName
+ */
+ virtual void setName( const String& _rName ) = 0;
+
+ /** determines whether the column can be resized
+
+ @see getMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual bool isResizable() const = 0;
+
+ /** declares the column as resizable or fixed in width
+
+ @see getMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual void setResizable( bool _bResizable ) = 0;
+
+ /** returns the width of the column, in 1/100 millimeters
+
+ The returned value must be a positive ->TableMetrics value.
+
+ It can also be COLWIDTH_FIT_TO_VIEW, to indicate that the width of the column
+ should automatically be adjusted to completely fit the view. For instance, a
+ model's last column could return this value, to indicate that it is to occupy
+ all horizontal space remaining in the view, after all other columns have been
+ layouted.
+
+ If there is more than one column with width COLWIDTH_FIT_TO_VIEW in a model,
+ they're all layouted equal-width.
+
+ If the columns with a read width (i.e. other than COLWIDTH_FIT_TO_VIEW) are,
+ in sum, wider than the view, then the view is free to choose a real width for any
+ columns which return COLWIDTH_FIT_TO_VIEW here.
+
+ @see setWidth
+ @see getMinWidth
+ @see getMaxWidth
+ @see COLWIDTH_FIT_TO_VIEW
+ */
+ virtual TableMetrics getWidth() const = 0;
+
+ /** sets a new width for the column
+
+ @param _nWidth
+ the new width, in 1/100 millimeters
+
+ @see getWidth
+ */
+ virtual void setWidth( TableMetrics _nWidth ) = 0;
+
+ /** returns the minimum width of the column, in 1/100 millimeters, or 0 if the column
+ does not have a minimal width
+
+ @see setMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual TableMetrics getMinWidth() const = 0;
+
+ /** sets the minimum width of the column, in 1/100 millimeters
+
+ @see getMinWidth
+ @see setMaxWidth
+ @see setWidth
+ */
+ virtual void setMinWidth( TableMetrics _nMinWidth ) = 0;
+
+ /** returns the maximum width of the column, in 1/100 millimeters, or 0 if the column
+ does not have a minimal width
+
+ @see setMaxWidth
+ @see getMinWidth
+ @see getWidth
+ */
+ virtual TableMetrics getMaxWidth() const = 0;
+
+ /** sets the maximum width of the column, in 1/100 millimeters
+
+ @see getMaxWidth
+ @see setMinWidth
+ @see setWidth
+ */
+ virtual void setMaxWidth( TableMetrics _nMaxWidth ) = 0;
+
+
+ /// deletes the column model instance
+ virtual ~IColumnModel() { }
+ };
+ typedef ::boost::shared_ptr< IColumnModel > PColumnModel;
+
+ //====================================================================
+ //= ITableModel
+ //====================================================================
+ /** declares the interface to implement by an abtract table model
+ */
+ class SAL_NO_VTABLE ITableModel
+ {
+ public:
+ /** returns the number of columns in the table
+ */
+ virtual TableSize getColumnCount() const = 0;
+
+ /** returns the number of rows in the table
+ */
+ virtual TableSize getRowCount() const = 0;
+
+ virtual void setColumnCount(TableSize _nColCount) = 0;
+ virtual void setRowCount(TableSize _nRowCount) = 0;
+
+ /** determines whether the table has column headers
+
+ If this method returns <TRUE/>, the renderer returned by
+ ->getRenderer must be able to render column headers.
+
+ @see IColumnRenderer
+ */
+ virtual bool hasColumnHeaders() const = 0;
+ /** sets whether the table should have row headers
+ @see IColumnRenderer
+ */
+ virtual void setRowHeaders( bool rowHeaders) = 0;
+
+ /** sets whether the table should have column headers
+ @see IColumnRenderer
+ */
+ virtual void setColumnHeaders( bool columnHeaders) = 0;
+
+ /** determines whether the table has row headers
+
+ If this method returns <TRUE/>, the renderer returned by
+ ->getRenderer must be able to render row headers.
+
+ @see IColumnRenderer
+ */
+ virtual bool hasRowHeaders() const = 0;
+
+ /** determines whether the given cell is editable
+
+ @see ICellEditor
+ @todo
+ */
+ virtual bool isCellEditable( ColPos col, RowPos row ) const = 0;
+
+ /** adds the given listener to the list of ->ITableModelListener's
+ */
+ virtual void addTableModelListener( const PTableModelListener& listener ) = 0;
+
+ /** revokes the given listener from the list of ->ITableModelListener's
+ */
+ virtual void removeTableModelListener( const PTableModelListener& listener ) = 0;
+
+ /** returns a model for a certain column
+
+ @param column
+ the index of the column in question. Must be greater than or
+ equal 0, and smaller than the return value of ->getColumnCount()
+
+ @return
+ the model of the column in question. Must not be <NULL/>
+
+ @see getColumnModelByID
+ */
+ virtual PColumnModel getColumnModel( ColPos column ) = 0;
+
+ /** finds a column model by ID
+
+ @param id
+ the id of the column which is to be looked up
+ @return
+ the column model with the given ID, or <NULL/> if there is
+ no such column
+ */
+ virtual PColumnModel getColumnModelByID( ColumnID id ) = 0;
+
+ /** returns a renderer which is able to paint the table represented
+ by this table model
+
+ @return the renderer to use. Must not be <NULL/>
+ */
+ virtual PTableRenderer getRenderer() const = 0;
+
+ /** returns the component handling input in a view associated with the model
+ */
+ virtual PTableInputHandler getInputHandler() const = 0;
+
+ /** determines the height of rows in the table.
+
+ @return
+ the logical height of rows in the table, in 1/100 millimeters. The height must be
+ greater 0.
+ */
+ virtual TableMetrics getRowHeight() const = 0;
+
+ virtual void setRowHeight(TableMetrics _nRowHeight) = 0;
+
+ /** determines the height of the column header row
+
+ This method is not to be called if ->hasColumnHeaders()
+ returned <FALSE/>.
+
+ @return
+ the logical height of the column header row, in 1/100 millimeters.
+ Must be greater than 0.
+ */
+ virtual TableMetrics getColumnHeaderHeight() const = 0;
+
+ /** determines the width of the row header column
+
+ This method is not to be called if ->hasRowHeaders()
+ returned <FALSE/>.
+
+ @return
+ the logical width of the row header column, in 1/100 millimeters.
+ Must be greater than 0.
+ */
+ virtual TableMetrics getRowHeaderWidth() const = 0;
+
+ /** determines the visibility of the vertical scrollbar of the table control
+ @param overAllHeight the height of the table with all rows
+ @param actHeight the given height of the table
+ */
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight,int actHeight) const = 0;
+
+ /** determines the visibility of the horizontal scrollbar of the table control
+ @param overAllWidth the width of the table with all columns
+ @param actWidth the given width of the table
+ */
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const = 0;
+
+ /** fills cells with content
+ */
+ virtual void setCellContent(std::vector<std::vector<rtl::OUString> > cellContent)=0;
+ /** gets the content of the cells
+ */
+ virtual std::vector<std::vector<rtl::OUString> > getCellContent() = 0;
+ /**sets title of header rows
+ */
+ virtual void setRowHeaderName(std::vector<rtl::OUString> cellColumnContent)=0;
+ /** gets title of header rows
+ */
+ virtual std::vector<rtl::OUString> getRowHeaderName() = 0;
+
+ /// destroys the table model instance
+ virtual ~ITableModel() { }
+ };
+ typedef ::boost::shared_ptr< ITableModel > PTableModel;
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLEMODEL_HXX
diff --git a/svtools/inc/svtools/table/tablerenderer.hxx b/svtools/inc/svtools/table/tablerenderer.hxx
new file mode 100644
index 000000000000..eb645ad574c4
--- /dev/null
+++ b/svtools/inc/svtools/table/tablerenderer.hxx
@@ -0,0 +1,241 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLERENDERER_HXX
+#define SVTOOLS_INC_TABLE_TABLERENDERER_HXX
+
+#include <svtools/table/tabletypes.hxx>
+
+#include <vcl/outdev.hxx>
+
+#include <boost/shared_ptr.hpp>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= ITableRenderer
+ //====================================================================
+ /** interface to implement by components rendering a ->TableControl
+ */
+ class SAL_NO_VTABLE ITableRenderer
+ {
+ public:
+ /** paints a (part of) header area
+
+ There are two header areas in a table control:
+ <ul><li>The row containing all column headers, i.e. <em>above</em> all rows containing the data</li>
+ <li>The column containing all row headers. i.e. <em>left of</em> all columns containing the data</li>
+ </ul>
+
+ A header area is more than the union of the single column/row headers.
+
+ First, there might be less columns than fit into the view - in this case, right
+ beside the right-most column, there's still room which belongs to the column header
+ area, but is not occupied by any particular column header.<br/>
+ An equivalent statement holds for the row header area, if there are less rows than
+ fit into the view.
+
+ Second, if the table control has both a row header and a column header,
+ the intersection between those both belongs to both the column header area and the
+ row header area, but not to any particular column or row header.
+
+ There are two flags specifying whether the to-be-painted area is part of the column
+ and/or row header area.
+ <ul><li>If both are <TRUE/>, the intersection of both areas is to be painted.</li>
+ <li>If ->_bIsColHeaderArea is <TRUE/> and ->_bIsRowHeaderArea is <FALSE/>,
+ then ->_rArea denotes the column header area <em>excluding</em> the
+ intersection between row and column header area.</li>
+ <li>Equivalently for ->_bIsColHeaderArea being <FALSE/> and ->_bIsRowHeaderArea
+ being <TRUE/></li>
+ </ul>
+ Note that it's not possible for both ->_bIsColHeaderArea and ->_bIsRowHeaderArea
+ to be <FALSE/> at the same time.
+
+ @param _rDevice
+ the device to paint onto
+ @param _rArea
+ the area to paint into
+ @param _bIsColHeaderArea
+ <TRUE/> if and only if ->_rArea is part of the column header area.
+ @param _bIsRowHeaderArea
+ <TRUE/> if and only if ->_rArea is part of the row header area.
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintHeaderArea(
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** paints the header for a given column
+
+ @param _nCol
+ the index of the column to paint
+ @param _bActive
+ <TRUE/> if and only if the column whose column is to be painted
+ contains the active cell.
+ @param _bSelected
+ <TRUE/> if and only if the column whose column is to be painted
+ is selected currently.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the column header should be painted
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** prepares a row for painting
+
+ Painting a table means painting rows as necessary, in an increasing
+ order. The assumption is that retrieving data for two different rows
+ is (potentially) more expensive than retrieving data for two different
+ columns. Thus, the renderer will get the chance to "seek" to a certain
+ row, and then has to render all cells in this row, before another
+ row is going to be painted.
+
+ @param _nRow
+ the row which is going to be painted. The renderer should
+ at least remember this row, since subsequent calls to
+ ->PaintRowHeader(), ->PaintCell(), and ->FinishRow() will
+ not pass this parameter again.
+
+ However, the renderer is also allowed to render any
+ cell-independent content of this row.
+
+ @param _bActive
+ <TRUE/> if and only if the row to be painted contains the
+ currently active cell.
+ @param _bSelected
+ <TRUE/> if and only if the row to be prepared is
+ selected currently.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rRowArea
+ the are into which the row should be painted. This excludes
+ the row header area, if applicable.
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rRowArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** paints the header of a row
+
+ The row to be painted is denoted by the most recent call to
+ ->PrepareRow.
+
+ @param _bActive
+ <TRUE/> if and only if the row to be painted contains the
+ currently active cell.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _bSelected
+ <TRUE/> if and only if the row whose header cell is to be
+ painted is selected currently.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the row header should be painted
+ @param _rStyle
+ the style to be used for drawing
+ @param _rText
+ the title of the header row
+ */
+ virtual void PaintRowHeader(
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText ) = 0;
+
+ /** paints a certain cell
+
+ The row to be painted is denoted by the most recent call to
+ ->PrepareRow.
+
+ @param _bSelected
+ <TRUE/> if and only if the cell to be painted is
+ selected currently. This is the case if either
+ the row or the column of the cell is currently selected.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _bActive
+ <TRUE/> if the cell is currently active.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the cell should be painted
+ @param _rStyle
+ the style to be used for drawing
+ @param _rText
+ the content of the cell
+ */
+ virtual void PaintCell( ColPos _nColumn,
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText ) = 0;
+
+ /** draws a cell cursor in the given rectangle
+
+ The cell cursor is used to indicate the active/current cell
+ of a table control.
+ */
+ virtual void ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect) = 0;
+
+ /** hides the cell cursor previously drawn into the given rectangle
+
+ The cell cursor is used to indicate the active/current cell
+ of a table control.
+ */
+ virtual void HideCellCursor( Window& _rView, const Rectangle& _rCursorRect) = 0;
+
+ /// deletes the renderer instance
+ virtual ~ITableRenderer() { }
+ };
+ typedef ::boost::shared_ptr< ITableRenderer > PTableRenderer;
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLERENDERER_HXX
diff --git a/svtools/inc/svtools/table/tabletypes.hxx b/svtools/inc/svtools/table/tabletypes.hxx
new file mode 100644
index 000000000000..167e49cfd521
--- /dev/null
+++ b/svtools/inc/svtools/table/tabletypes.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLETYPES_HXX
+#define SVTOOLS_INC_TABLE_TABLETYPES_HXX
+
+#include <sal/types.h>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+ /// a value denoting the size of a table
+ typedef sal_Int32 TableSize;
+
+ /// a value denoting a column position within a table
+ typedef sal_Int32 ColPos;
+ /// a value denoting a row position within a table
+ typedef sal_Int32 RowPos;
+
+ /** a value denoting an arbitrary coordinate value of a position within
+ a table
+
+ Values of this type are guaranteed to be large enough to hold column
+ positions as well as row positions.
+ */
+ typedef sal_Int32 AnyPos;
+
+ /// the ID of a column in a table
+ typedef sal_Int32 ColumnID;
+
+ typedef sal_Int32 TableMetrics;
+/** special column width value which indicates that the column should be
+ automatically resized to fit the view
+*/
+#define COLWIDTH_FIT_TO_VIEW ((TableMetrics)-1)
+
+/// denotes the column containing the row headers
+#define COL_ROW_HEADERS ((ColPos)-1)
+/// denotes the row containing the column headers
+#define ROW_COL_HEADERS ((RowPos)-1)
+
+/// denotes an invalid column index
+#define COL_INVALID ((ColPos)-2)
+/// denotes an invalid row index
+#define ROW_INVALID ((RowPos)-2)
+
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLETYPES_HXX
diff --git a/svtools/prj/build.lst b/svtools/prj/build.lst
index a6a409055faa..a60199740561 100644
--- a/svtools/prj/build.lst
+++ b/svtools/prj/build.lst
@@ -38,13 +38,14 @@ st svtools\source\undo nmake - all st_undo st_inc NULL
st svtools\source\plugapp nmake - all st_papp st_inc NULL
st svtools\source\dialogs nmake - all st_dial st_inc NULL
st svtools\source\edit nmake - all st_edit st_inc NULL
+st svtools\source\table nmake - all st_table st_inc NULL
st svtools\source\uno nmake - all st_uno st_inc NULL
st svtools\source\svrtf nmake - all st_rtf st_inc NULL
st svtools\source\svsql nmake - all st_sql st_inc NULL
st svtools\source\svhtml nmake - all st_html st_inc NULL
st svtools\source\syslocale nmake - all st_sysloc st_inc NULL
st svtools\source\filepicker nmake - all st_filepick st_inc NULL
-st svtools\util nmake - all st_util st__brw st__ctr st__dde st__item st__item1 st__misc st__misc1 st__url st_ctl st_dial st_edit st_file st_html st_papp st_rtf st_sql st_usdde.u st_psdde.p st_msdde.m st_msc.m st_undo st_uno st_vfilt st_vigif st_vixbm st_vixpm st_vjpeg st_vwmf st_sysloc st_filepick st_not st_conf st_mem st_num st_svtjava NULL
+st svtools\util nmake - all st_util st__brw st__ctr st__dde st__item st__item1 st__misc st__misc1 st__url st_ctl st_dial st_edit st_file st_html st_papp st_rtf st_sql st_usdde.u st_psdde.p st_msdde.m st_msc.m st_undo st_table st_uno st_vfilt st_vigif st_vixbm st_vixpm st_vjpeg st_vwmf st_sysloc st_filepick st_not st_conf st_mem st_num st_svtjava NULL
st svtools\source\fsstor nmake - all st_fsstor st_inc NULL
st svtools\source\hatchwindow nmake - all st_hatchwin st_inc NULL
st svtools\source\passwordcontainer nmake - all st_passcont st_inc NULL
diff --git a/svtools/prj/d.lst b/svtools/prj/d.lst
index 8152ca6a8d53..222ec23a3a8a 100644
--- a/svtools/prj/d.lst
+++ b/svtools/prj/d.lst
@@ -310,8 +310,6 @@ mkdir: %_DEST%\inc%_EXT%\svtools
..\inc\textwindowaccessibility.hxx %_DEST%\inc%_EXT%\svtools\textwindowaccessibility.hxx
-..\inc\docpasswdrequest.hxx %_DEST%\inc%_EXT%\svtools\docpasswdrequest.hxx
-..\inc\docmspasswdrequest.hxx %_DEST%\inc%_EXT%\svtools\docmspasswdrequest.hxx
..\inc\fontsubstconfig.hxx %_DEST%\inc%_EXT%\svtools\fontsubstconfig.hxx
..\inc\apearcfg.hxx %_DEST%\inc%_EXT%\svtools\apearcfg.hxx
..\inc\fltrcfg.hxx %_DEST%\inc%_EXT%\svtools\fltrcfg.hxx
diff --git a/svtools/source/brwbox/brwbox1.cxx b/svtools/source/brwbox/brwbox1.cxx
index 767283a8e425..4ebed0d70f3f 100644
--- a/svtools/source/brwbox/brwbox1.cxx
+++ b/svtools/source/brwbox/brwbox1.cxx
@@ -538,7 +538,7 @@ void BrowseBox::SetColumnPos( USHORT nColumnId, USHORT nPos )
aScrollArea = Rectangle(Point(aNextRect.Left(),0),
Point(aToRect.Right(),aDataWinSize.Height()));
- pDataWin->Scroll( nScroll, 0, aScrollArea, SCROLL_FLAGS );
+ pDataWin->Scroll( nScroll, 0, aScrollArea );
aToRect.Top() = 0;
aToRect.Bottom() = aScrollArea.Bottom();
Invalidate( aToRect );
diff --git a/svtools/source/config/eventcfg.cxx b/svtools/source/config/eventcfg.cxx
index ae2041356fd3..6026c3d4a3a0 100644
--- a/svtools/source/config/eventcfg.cxx
+++ b/svtools/source/config/eventcfg.cxx
@@ -62,24 +62,70 @@ using namespace ::com::sun::star;
#define SETNODE_BINDINGS OUString(RTL_CONSTASCII_USTRINGPARAM("Bindings" ))
#define PROPERTYNAME_BINDINGURL OUString(RTL_CONSTASCII_USTRINGPARAM("BindingURL"))
+const char* pEventAsciiNames[] =
+{
+"OnStartApp",
+"OnCloseApp",
+"OnCreate",
+"OnNew",
+"OnLoadFinished",
+"OnLoad",
+"OnPrepareUnload",
+"OnUnload",
+"OnSave",
+"OnSaveDone",
+"OnSaveFailed",
+"OnSaveAs",
+"OnSaveAsDone",
+"OnSaveAsFailed",
+"OnCopyTo",
+"OnCopyToDone",
+"OnCopyToFailed",
+"OnFocus",
+"OnUnfocus",
+"OnPrint",
+"OnViewCreated",
+"OnPrepareViewClosing",
+"OnViewClosed",
+"OnModifyChanged",
+"OnTitleChanged",
+"OnVisAreaChanged",
+"OnModeChanged",
+"OnStorageChanged"
+};
+
GlobalEventConfig_Impl::GlobalEventConfig_Impl()
: ConfigItem( ROOTNODE_EVENTS, CONFIG_MODE_IMMEDIATE_UPDATE )
{
// the supported event names
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnStartApp"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnCloseApp"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnNew"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnUnload"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnPrepareUnload"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnLoad"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnSave"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnSaveAs"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnSaveDone"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnSaveAsDone"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnFocus"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnUnfocus"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnPrint"));
- m_supportedEvents.push_back(::rtl::OUString::createFromAscii("OnModifyChanged"));
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_STARTAPP] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_CLOSEAPP] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_DOCCREATED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_CREATEDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_LOADFINISHED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_OPENDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_PREPARECLOSEDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_CLOSEDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVEDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVEDOCDONE] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVEDOCFAILED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVEASDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVEASDOCDONE] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVEASDOCFAILED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVETODOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVETODOCDONE] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_SAVETODOCFAILED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_ACTIVATEDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_DEACTIVATEDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_PRINTDOC] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_VIEWCREATED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_PREPARECLOSEVIEW] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_CLOSEVIEW] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_MODIFYCHANGED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_TITLECHANGED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_VISAREACHANGED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_MODECHANGED] ) );
+ m_supportedEvents.push_back(::rtl::OUString::createFromAscii( pEventAsciiNames[STR_EVENT_STORAGECHANGED] ) );
initBindingInfo();
@@ -103,6 +149,14 @@ GlobalEventConfig_Impl::~GlobalEventConfig_Impl()
}
}
+::rtl::OUString GlobalEventConfig_Impl::GetEventName( sal_Int32 nIndex )
+{
+ if ( nIndex < (sal_Int32) m_supportedEvents.size() )
+ return m_supportedEvents[nIndex];
+ else
+ return rtl::OUString();
+}
+
//*****************************************************************************************************************
// public method
//*****************************************************************************************************************
@@ -396,3 +450,9 @@ Mutex& GlobalEventConfig::GetOwnStaticMutex()
// Return new created or already existing mutex object.
return *pMutex;
}
+
+::rtl::OUString GlobalEventConfig::GetEventName( sal_Int32 nIndex )
+{
+ return GlobalEventConfig().m_pImpl->GetEventName( nIndex );
+}
+
diff --git a/svtools/source/config/lingucfg.cxx b/svtools/source/config/lingucfg.cxx
index 263ced16cd50..2b4e4d482c3f 100644
--- a/svtools/source/config/lingucfg.cxx
+++ b/svtools/source/config/lingucfg.cxx
@@ -72,27 +72,6 @@ static osl::Mutex & GetOwnMutex()
///////////////////////////////////////////////////////////////////////////
-static lang::Locale lcl_CreateLocale( LanguageType eLang )
-{
- lang::Locale aLocale;
- if ( eLang != LANGUAGE_NONE )
- MsLangId::convertLanguageToLocale( eLang, aLocale );
-
- return aLocale;
-}
-
-
-static INT16 lcl_LocaleToLanguage( const lang::Locale& rLocale )
-{
- // empty Locale -> LANGUAGE_NONE
- if ( rLocale.Language.getLength() == 0 )
- return LANGUAGE_NONE;
-
- // Variant of Locale is ignored
- return MsLangId::convertLocaleToLanguage( rLocale );
-}
-
-
static BOOL lcl_SetLocale( INT16 &rLanguage, const uno::Any &rVal )
{
BOOL bSucc = FALSE;
@@ -100,41 +79,31 @@ static BOOL lcl_SetLocale( INT16 &rLanguage, const uno::Any &rVal )
lang::Locale aNew;
if (rVal >>= aNew) // conversion successful?
{
- INT16 nNew = lcl_LocaleToLanguage( aNew );
+ INT16 nNew = MsLangId::convertLocaleToLanguage( aNew );
if (nNew != rLanguage)
{
rLanguage = nNew;
bSucc = TRUE;
}
}
-
return bSucc;
}
-static inline INT16 lcl_CfgLocaleStrToLanguage( const OUString &rCfgLocaleStr )
-{
- INT16 nRes = LANGUAGE_NONE;
- if (0 != rCfgLocaleStr.getLength())
- nRes = MsLangId::convertIsoStringToLanguage( rCfgLocaleStr );
- return nRes;
-}
-
-
static inline const OUString lcl_LanguageToCfgLocaleStr( INT16 nLanguage )
{
OUString aRes;
- if (LANGUAGE_NONE != nLanguage)
+ if (LANGUAGE_SYSTEM != nLanguage)
aRes = MsLangId::convertLanguageToIsoString( nLanguage );
return aRes;
}
-static void lcl_CfgAnyToLanguage( const uno::Any &rVal, INT16& rLanguage )
+static INT16 lcl_CfgAnyToLanguage( const uno::Any &rVal )
{
OUString aTmp;
- if ((rVal >>= aTmp) && 0 != aTmp.getLength())
- rLanguage = MsLangId::convertIsoStringToLanguage( aTmp );
+ rVal >>= aTmp;
+ return (aTmp.getLength() == 0) ? LANGUAGE_SYSTEM : MsLangId::convertIsoStringToLanguage( aTmp );
}
@@ -143,7 +112,6 @@ static void lcl_CfgAnyToLanguage( const uno::Any &rVal, INT16& rLanguage )
SvtLinguOptions::SvtLinguOptions()
{
nDefaultLanguage = LANGUAGE_NONE;
-
nDefaultLanguage_CJK = LANGUAGE_NONE;
nDefaultLanguage_CTL = LANGUAGE_NONE;
@@ -428,19 +396,19 @@ uno::Any SvtLinguConfigItem::GetProperty( INT32 nPropertyHandle ) const
}
case UPH_DEFAULT_LOCALE :
{
- lang::Locale aLocale( lcl_CreateLocale( rOpt.nDefaultLanguage ) );
+ lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage, false ) );
aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
break;
}
case UPH_DEFAULT_LOCALE_CJK :
{
- lang::Locale aLocale( lcl_CreateLocale( rOpt.nDefaultLanguage_CJK ) );
+ lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage_CJK, false ) );
aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
break;
}
case UPH_DEFAULT_LOCALE_CTL :
{
- lang::Locale aLocale( lcl_CreateLocale( rOpt.nDefaultLanguage_CTL ) );
+ lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage_CTL, false ) );
aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
break;
}
@@ -654,7 +622,7 @@ BOOL SvtLinguConfigItem::LoadOptions( const uno::Sequence< OUString > &rProperyN
switch ( nPropertyHandle )
{
case UPH_DEFAULT_LOCALE :
- { rOpt.bRODefaultLanguage = pROStates[i]; lcl_CfgAnyToLanguage( rVal, rOpt.nDefaultLanguage ); } break;
+ { rOpt.bRODefaultLanguage = pROStates[i]; rOpt.nDefaultLanguage = lcl_CfgAnyToLanguage( rVal ); } break;
case UPH_ACTIVE_DICTIONARIES :
{ rOpt.bROActiveDics = pROStates[i]; rVal >>= rOpt.aActiveDics; } break;
case UPH_IS_USE_DICTIONARY_LIST :
@@ -662,9 +630,9 @@ BOOL SvtLinguConfigItem::LoadOptions( const uno::Sequence< OUString > &rProperyN
case UPH_IS_IGNORE_CONTROL_CHARACTERS :
{ rOpt.bROIsIgnoreControlCharacters = pROStates[i]; rVal >>= rOpt.bIsIgnoreControlCharacters; } break;
case UPH_DEFAULT_LOCALE_CJK :
- { rOpt.bRODefaultLanguage_CJK = pROStates[i]; lcl_CfgAnyToLanguage( rVal, rOpt.nDefaultLanguage_CJK ); } break;
+ { rOpt.bRODefaultLanguage_CJK = pROStates[i]; rOpt.nDefaultLanguage_CJK = lcl_CfgAnyToLanguage( rVal ); } break;
case UPH_DEFAULT_LOCALE_CTL :
- { rOpt.bRODefaultLanguage_CTL = pROStates[i]; lcl_CfgAnyToLanguage( rVal, rOpt.nDefaultLanguage_CTL ); } break;
+ { rOpt.bRODefaultLanguage_CTL = pROStates[i]; rOpt.nDefaultLanguage_CTL = lcl_CfgAnyToLanguage( rVal ); } break;
case UPH_IS_SPELL_UPPER_CASE :
{ rOpt.bROIsSpellUpperCase = pROStates[i]; rVal >>= rOpt.bIsSpellUpperCase; } break;
diff --git a/svtools/source/config/optionsdrawinglayer.cxx b/svtools/source/config/optionsdrawinglayer.cxx
index 125827d17faf..abb044c7863e 100644
--- a/svtools/source/config/optionsdrawinglayer.cxx
+++ b/svtools/source/config/optionsdrawinglayer.cxx
@@ -92,6 +92,11 @@ using namespace ::com::sun::star::uno ;
#define DEFAULT_QUADRATIC3DRENDERLIMIT 1000000
#define DEFAULT_QUADRATICFORMCONTROLRENDERLIMIT 45000
+// #i97672# selection settings
+#define DEFAULT_TRANSPARENTSELECTION sal_True
+#define DEFAULT_TRANSPARENTSELECTIONPERCENT 75
+#define DEFAULT_SELECTIONMAXIMUMLUMINANCEPERCENT 70
+
#define PROPERTYNAME_OVERLAYBUFFER OUString(RTL_CONSTASCII_USTRINGPARAM("OverlayBuffer" ))
#define PROPERTYNAME_PAINTBUFFER OUString(RTL_CONSTASCII_USTRINGPARAM("PaintBuffer" ))
#define PROPERTYNAME_STRIPE_COLOR_A OUString(RTL_CONSTASCII_USTRINGPARAM("StripeColorA" ))
@@ -125,6 +130,11 @@ using namespace ::com::sun::star::uno ;
#define PROPERTYNAME_QUADRATIC3DRENDERLIMIT OUString(RTL_CONSTASCII_USTRINGPARAM("Quadratic3DRenderLimit"))
#define PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT OUString(RTL_CONSTASCII_USTRINGPARAM("QuadraticFormControlRenderLimit"))
+// #i97672# selection settings
+#define PROPERTYNAME_TRANSPARENTSELECTION OUString(RTL_CONSTASCII_USTRINGPARAM("TransparentSelection"))
+#define PROPERTYNAME_TRANSPARENTSELECTIONPERCENT OUString(RTL_CONSTASCII_USTRINGPARAM("TransparentSelectionPercent"))
+#define PROPERTYNAME_SELECTIONMAXIMUMLUMINANCEPERCENT OUString(RTL_CONSTASCII_USTRINGPARAM("SelectionMaximumLuminancePercent"))
+
#define PROPERTYHANDLE_OVERLAYBUFFER 0
#define PROPERTYHANDLE_PAINTBUFFER 1
#define PROPERTYHANDLE_STRIPE_COLOR_A 2
@@ -158,7 +168,12 @@ using namespace ::com::sun::star::uno ;
#define PROPERTYHANDLE_QUADRATIC3DRENDERLIMIT 22
#define PROPERTYHANDLE_QUADRATICFORMCONTROLRENDERLIMIT 23
-#define PROPERTYCOUNT 24
+// #i97672# selection settings
+#define PROPERTYHANDLE_TRANSPARENTSELECTION 24
+#define PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT 25
+#define PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT 26
+
+#define PROPERTYCOUNT 27
class SvtOptionsDrawinglayer_Impl : public ConfigItem
{
@@ -248,6 +263,15 @@ public:
void SetQuadratic3DRenderLimit(sal_uInt32 nNew);
void SetQuadraticFormControlRenderLimit(sal_uInt32 nNew);
+ // #i97672# selection settings
+ sal_Bool IsTransparentSelection() const;
+ sal_uInt16 GetTransparentSelectionPercent() const;
+ sal_uInt16 GetSelectionMaximumLuminancePercent() const;
+
+ void SetTransparentSelection( sal_Bool bState );
+ void SetTransparentSelectionPercent( sal_uInt16 nPercent );
+ void SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent );
+
//-------------------------------------------------------------------------------------------------------------
// private methods
//-------------------------------------------------------------------------------------------------------------
@@ -295,6 +319,11 @@ private:
sal_uInt32 m_nQuadratic3DRenderLimit;
sal_uInt32 m_nQuadraticFormControlRenderLimit;
+ // #i97672# selection settings
+ sal_uInt16 m_nTransparentSelectionPercent;
+ sal_uInt16 m_nSelectionMaximumLuminancePercent;
+ sal_Bool m_bTransparentSelection;
+
// local values
bool m_bAllowAA : 1;
bool m_bAllowAAChecked : 1;
@@ -342,6 +371,11 @@ SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl() :
m_nQuadratic3DRenderLimit(DEFAULT_QUADRATIC3DRENDERLIMIT),
m_nQuadraticFormControlRenderLimit(DEFAULT_QUADRATICFORMCONTROLRENDERLIMIT),
+ // #i97672# selection settings
+ m_nTransparentSelectionPercent(DEFAULT_TRANSPARENTSELECTIONPERCENT),
+ m_nSelectionMaximumLuminancePercent(DEFAULT_SELECTIONMAXIMUMLUMINANCEPERCENT),
+ m_bTransparentSelection(DEFAULT_TRANSPARENTSELECTION),
+
// local values
m_bAllowAA(true),
m_bAllowAAChecked(false)
@@ -537,6 +571,27 @@ SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl() :
seqValues[nProperty] >>= m_nQuadraticFormControlRenderLimit;
}
break;
+
+ // #i97672# selection settings
+ case PROPERTYHANDLE_TRANSPARENTSELECTION:
+ {
+ DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\TransparentSelection\"?" );
+ seqValues[nProperty] >>= m_bTransparentSelection;
+ }
+ break;
+
+ case PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT:
+ {
+ DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\TransparentSelectionPercent\"?" );
+ seqValues[nProperty] >>= m_nTransparentSelectionPercent;
+ }
+
+ case PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT:
+ {
+ DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\SelectionMaximumLuminancePercent\"?" );
+ seqValues[nProperty] >>= m_nSelectionMaximumLuminancePercent;
+ }
+ break;
}
}
}
@@ -661,6 +716,19 @@ void SvtOptionsDrawinglayer_Impl::Commit()
case PROPERTYHANDLE_QUADRATICFORMCONTROLRENDERLIMIT:
aSeqValues[nProperty] <<= m_nQuadraticFormControlRenderLimit;
break;
+
+ // #i97672# selection settings
+ case PROPERTYHANDLE_TRANSPARENTSELECTION:
+ aSeqValues[nProperty] <<= m_bTransparentSelection;
+ break;
+
+ case PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT:
+ aSeqValues[nProperty] <<= m_nTransparentSelectionPercent;
+ break;
+
+ case PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT:
+ aSeqValues[nProperty] <<= m_nSelectionMaximumLuminancePercent;
+ break;
}
}
@@ -1065,6 +1133,49 @@ void SvtOptionsDrawinglayer_Impl::SetQuadraticFormControlRenderLimit(sal_uInt32
}
}
+// #i97672# selection settings
+sal_Bool SvtOptionsDrawinglayer_Impl::IsTransparentSelection() const
+{
+ return m_bTransparentSelection;
+}
+
+void SvtOptionsDrawinglayer_Impl::SetTransparentSelection( sal_Bool bState )
+{
+ if(m_bTransparentSelection != bState)
+ {
+ m_bTransparentSelection = bState;
+ SetModified();
+ }
+}
+
+void SvtOptionsDrawinglayer_Impl::SetTransparentSelectionPercent( sal_uInt16 nPercent )
+{
+ if(m_nTransparentSelectionPercent != nPercent)
+ {
+ m_nTransparentSelectionPercent = nPercent;
+ SetModified();
+ }
+}
+
+sal_uInt16 SvtOptionsDrawinglayer_Impl::GetTransparentSelectionPercent() const
+{
+ return m_nTransparentSelectionPercent;
+}
+
+void SvtOptionsDrawinglayer_Impl::SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent )
+{
+ if(m_nSelectionMaximumLuminancePercent != nPercent)
+ {
+ m_nSelectionMaximumLuminancePercent = nPercent;
+ SetModified();
+ }
+}
+
+sal_uInt16 SvtOptionsDrawinglayer_Impl::GetSelectionMaximumLuminancePercent() const
+{
+ return m_nSelectionMaximumLuminancePercent;
+}
+
//*****************************************************************************************************************
// private method
//*****************************************************************************************************************
@@ -1104,7 +1215,12 @@ Sequence< OUString > SvtOptionsDrawinglayer_Impl::impl_GetPropertyNames()
PROPERTYNAME_RENDERDECORATEDTEXTDIRECT,
PROPERTYNAME_RENDERSIMPLETEXTDIRECT,
PROPERTYNAME_QUADRATIC3DRENDERLIMIT,
- PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT
+ PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT,
+
+ // #i97672# selection settings
+ PROPERTYNAME_TRANSPARENTSELECTION,
+ PROPERTYNAME_TRANSPARENTSELECTIONPERCENT,
+ PROPERTYNAME_SELECTIONMAXIMUMLUMINANCEPERCENT
};
// Initialize return sequence with these list ...
@@ -1486,6 +1602,83 @@ void SvtOptionsDrawinglayer::SetQuadraticFormControlRenderLimit(sal_uInt32 nNew)
m_pDataContainer->SetQuadraticFormControlRenderLimit( nNew );
}
+// #i97672# selection settings
+sal_Bool SvtOptionsDrawinglayer::IsTransparentSelection() const
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ return m_pDataContainer->IsTransparentSelection();
+}
+
+void SvtOptionsDrawinglayer::SetTransparentSelection( sal_Bool bState )
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ m_pDataContainer->SetTransparentSelection( bState );
+}
+
+sal_uInt16 SvtOptionsDrawinglayer::GetTransparentSelectionPercent() const
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ sal_uInt16 aRetval(m_pDataContainer->GetTransparentSelectionPercent());
+
+ // crop to range [10% .. 90%]
+ if(aRetval < 10)
+ {
+ aRetval = 10;
+ }
+
+ if(aRetval > 90)
+ {
+ aRetval = 90;
+ }
+
+ return aRetval;
+}
+
+void SvtOptionsDrawinglayer::SetTransparentSelectionPercent( sal_uInt16 nPercent )
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+
+ // crop to range [10% .. 90%]
+ if(nPercent < 10)
+ {
+ nPercent = 10;
+ }
+
+ if(nPercent > 90)
+ {
+ nPercent = 90;
+ }
+
+ m_pDataContainer->SetTransparentSelectionPercent( nPercent );
+}
+
+sal_uInt16 SvtOptionsDrawinglayer::GetSelectionMaximumLuminancePercent() const
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ sal_uInt16 aRetval(m_pDataContainer->GetSelectionMaximumLuminancePercent());
+
+ // crop to range [0% .. 100%]
+ if(aRetval > 90)
+ {
+ aRetval = 90;
+ }
+
+ return aRetval;
+}
+
+void SvtOptionsDrawinglayer::SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent )
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+
+ // crop to range [0% .. 100%]
+ if(nPercent > 90)
+ {
+ nPercent = 90;
+ }
+
+ m_pDataContainer->SetSelectionMaximumLuminancePercent( nPercent );
+}
+
//*****************************************************************************************************************
// private method
//*****************************************************************************************************************
diff --git a/svtools/source/config/saveopt.cxx b/svtools/source/config/saveopt.cxx
index 6ce1be8441a4..2b18d1bf4767 100644
--- a/svtools/source/config/saveopt.cxx
+++ b/svtools/source/config/saveopt.cxx
@@ -437,7 +437,7 @@ SvtSaveOptions_Impl::SvtSaveOptions_Impl()
, bRODoPrettyPrinting( CFG_READONLY_DEFAULT )
, bROLoadDocPrinter( CFG_READONLY_DEFAULT )
, bROODFDefaultVersion( CFG_READONLY_DEFAULT )
- , eODFDefaultVersion( SvtSaveOptions::ODFVER_012 )
+ , eODFDefaultVersion( SvtSaveOptions::ODFVER_LATEST )
{
Sequence< OUString > aNames = GetPropertyNames();
Sequence< Any > aValues = GetProperties( aNames );
@@ -474,11 +474,16 @@ SvtSaveOptions_Impl::SvtSaveOptions_Impl()
{
sal_Int16 nTmp = 0;
if ( pValues[nProp] >>= nTmp )
- eODFDefaultVersion = SvtSaveOptions::ODFDefaultVersion( nTmp );
+ {
+ if( nTmp == 3 )
+ eODFDefaultVersion = SvtSaveOptions::ODFVER_LATEST;
+ else
+ eODFDefaultVersion = SvtSaveOptions::ODFDefaultVersion( nTmp );
+ }
else {
DBG_ERRORFILE( "SvtSaveOptions_Impl::SvtSaveOptions_Impl(): Wrong Type!" );
};
- bROAutoSaveTime = pROStates[nProp];
+ bROODFDefaultVersion = pROStates[nProp];
break;
}
@@ -729,7 +734,7 @@ void SvtSaveOptions_Impl::Commit()
case ODFDEFAULTVERSION:
if (!bROODFDefaultVersion)
{
- pValues[nRealCount] <<= sal_Int16( eODFDefaultVersion );
+ pValues[nRealCount] <<= (eODFDefaultVersion == SvtSaveOptions::ODFVER_LATEST) ? sal_Int16( 3 ) : sal_Int16( eODFDefaultVersion );
pNames[nRealCount] = pOrgNames[i];
++nRealCount;
}
diff --git a/svtools/source/contnr/imivctl1.cxx b/svtools/source/contnr/imivctl1.cxx
index da75608a38b3..954c8a7ca179 100644
--- a/svtools/source/contnr/imivctl1.cxx
+++ b/svtools/source/contnr/imivctl1.cxx
@@ -540,7 +540,13 @@ void SvxIconChoiceCtrl_Impl::EntrySelected( SvxIconChoiceCtrlEntry* pEntry, BOOL
ShowCursor( TRUE );
} // if( bUpdateMode )
- CallEventListeners( VCLEVENT_LISTBOX_SELECT, pEntry );
+ // --> OD 2009-05-27 #i101012#
+ // emit vcl event LISTBOX_SELECT only in case that the given entry is selected.
+ if ( bSelect )
+ {
+ CallEventListeners( VCLEVENT_LISTBOX_SELECT, pEntry );
+ }
+ // <--
}
void SvxIconChoiceCtrl_Impl::ResetVirtSize()
diff --git a/svtools/source/contnr/svtabbx.cxx b/svtools/source/contnr/svtabbx.cxx
index fc02c85dfd25..1770810c7a5d 100644
--- a/svtools/source/contnr/svtabbx.cxx
+++ b/svtools/source/contnr/svtabbx.cxx
@@ -989,7 +989,7 @@ Reference< XAccessible > SvHeaderTabListBox::CreateAccessibleCell( sal_Int32 _nR
m_aAccessibleChildren.assign( nCount, Reference< XAccessible >() );
}
- nIndex = ( _nRow * GetColumnCount() ) + _nColumnPos + GetColumnCount();
+ nIndex = ( _nRow * nColumnCount ) + _nColumnPos + nColumnCount;
xChild = m_aAccessibleChildren[ nIndex ];
}
@@ -1084,15 +1084,10 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin
switch( _eType )
{
case ::svt::BBTYPE_BROWSEBOX:
- aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HeaderTabListBox" ) );
- break;
-
case ::svt::BBTYPE_TABLE:
- aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HeaderTabListBoxTable" ) );
- break;
-
case ::svt::BBTYPE_COLUMNHEADERBAR:
- aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderBar of HeaderTabListBox" ) );
+ // should be empty now (see #i63983)
+ aRetText = ::rtl::OUString();
break;
case ::svt::BBTYPE_TABLECELL:
diff --git a/svtools/source/contnr/svtreebx.cxx b/svtools/source/contnr/svtreebx.cxx
index 200dd30eda1a..a697928842af 100644
--- a/svtools/source/contnr/svtreebx.cxx
+++ b/svtools/source/contnr/svtreebx.cxx
@@ -1040,6 +1040,14 @@ BOOL SvTreeListBox::Expand( SvLBoxEntry* pParent )
pParent->SetFlags( nFlags );
GetModel()->InvalidateEntry( pParent ); // neu zeichnen
}
+
+ // --> OD 2009-04-01 #i92103#
+ if ( bExpanded )
+ {
+ pImp->CallEventListeners( VCLEVENT_LISTBOX_ENTRY_EXPANDED, pParent );
+ }
+ // <--
+
return bExpanded;
}
@@ -1059,6 +1067,14 @@ BOOL SvTreeListBox::Collapse( SvLBoxEntry* pParent )
pHdlEntry = pParent;
ExpandedHdl();
}
+
+ // --> OD 2009-04-01 #i92103#
+ if ( bCollapsed )
+ {
+ pImp->CallEventListeners( VCLEVENT_LISTBOX_ENTRY_COLLAPSED, pParent );
+ }
+ // <--
+
return bCollapsed;
}
diff --git a/svtools/source/control/ctrltool.cxx b/svtools/source/control/ctrltool.cxx
index 35e86189c352..77bb996584bd 100644
--- a/svtools/source/control/ctrltool.cxx
+++ b/svtools/source/control/ctrltool.cxx
@@ -161,7 +161,11 @@ static void ImplMakeSearchString( XubString& rStr )
static void ImplMakeSearchStringFromName( XubString& rStr )
{
- rStr = rStr.GetToken( 0, ';' );
+ // check for features before alternate font separator
+ if (rStr.Search(':') < rStr.Search(';'))
+ rStr = rStr.GetToken( 0, ':' );
+ else
+ rStr = rStr.GetToken( 0, ';' );
ImplMakeSearchString( rStr );
}
diff --git a/svtools/source/control/roadmap.cxx b/svtools/source/control/roadmap.cxx
index 7485efec7c7c..b0e178e631d9 100644
--- a/svtools/source/control/roadmap.cxx
+++ b/svtools/source/control/roadmap.cxx
@@ -201,6 +201,17 @@ namespace svt
m_pImpl->InCompleteHyperLabel = NULL;
m_pImpl->setCurItemID(-1 );
m_pImpl->setComplete( sal_True );
+
+ // Roadmap control should be reachable as one unit with a Tab key
+ // the next Tab key should spring out of the control.
+ // To reach it the control itself should get focus and set it
+ // on entries. The entries themself should not be reachable with
+ // the Tab key directly. So each entry should have WB_NOTABSTOP.
+ //
+ // In other words the creator should create the control with the following
+ // flags:
+ // SetStyle( ( GetStyle() | WB_TABSTOP ) & ~WB_DIALOGCONTROL );
+
// TODO: if somebody sets a new font from outside (OutputDevice::SetFont), we would have to react
// on this with calculating a new bold font.
// Unfortunately, the OutputDevice does not offer a notify mechanism for a changed font.
@@ -725,11 +736,9 @@ namespace svt
//---------------------------------------------------------------------
IMPL_LINK(ORoadmap, ImplClickHdl, HyperLabel*, _CurHyperLabel)
{
- return SelectRoadmapItemByID( _CurHyperLabel->GetID() );
+ return SelectRoadmapItemByID( _CurHyperLabel->GetID() );
}
-
-
void ORoadmap::DataChanged( const DataChangedEvent& rDCEvt )
{
if ((( rDCEvt.GetType() == DATACHANGED_SETTINGS ) ||
@@ -753,7 +762,7 @@ namespace svt
ORoadmapHyperLabel::ORoadmapHyperLabel( Window* _pParent, const ResId& )
{
mpIDLabel = new ORoadmapIDHyperLabel(_pParent, WB_WORDBREAK);
- mpDescHyperLabel = new HyperLabel(_pParent, WB_TABSTOP | WB_WORDBREAK);
+ mpDescHyperLabel = new HyperLabel(_pParent, WB_NOTABSTOP | WB_WORDBREAK);
}
@@ -761,7 +770,7 @@ namespace svt
{
mpIDLabel = new ORoadmapIDHyperLabel(_pParent, WB_WORDBREAK);
mpIDLabel->SetTextColor( mpIDLabel->GetSettings().GetStyleSettings().GetFieldTextColor( ) );
- mpDescHyperLabel = new HyperLabel(_pParent, WB_TABSTOP | WB_WORDBREAK);
+ mpDescHyperLabel = new HyperLabel(_pParent, WB_NOTABSTOP | WB_WORDBREAK);
}
//---------------------------------------------------------------------
diff --git a/svtools/source/control/valueacc.cxx b/svtools/source/control/valueacc.cxx
index afdb728f450e..96eb8bb39e99 100644
--- a/svtools/source/control/valueacc.cxx
+++ b/svtools/source/control/valueacc.cxx
@@ -37,6 +37,7 @@
#include <vcl/svapp.hxx>
#include <svtools/valueset.hxx>
#include "valueimp.hxx"
+#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
@@ -92,7 +93,8 @@ void ValueSetItem::ClearAccessible()
ValueSetAcc::ValueSetAcc( ValueSet* pParent, bool bIsTransientChildrenDisabled ) :
ValueSetAccComponentBase (m_aMutex),
mpParent( pParent ),
- mbIsTransientChildrenDisabled( bIsTransientChildrenDisabled )
+ mbIsTransientChildrenDisabled( bIsTransientChildrenDisabled ),
+ mbIsFocused(false)
{
}
@@ -166,6 +168,35 @@ ValueSetAcc* ValueSetAcc::getImplementation( const uno::Reference< uno::XInterfa
}
}
+
+// -----------------------------------------------------------------------------
+
+void ValueSetAcc::GetFocus (void)
+{
+ mbIsFocused = true;
+
+ // Boradcast the state change.
+ ::com::sun::star::uno::Any aOldState, aNewState;
+ aNewState <<= ::com::sun::star::accessibility::AccessibleStateType::FOCUSED;
+ FireAccessibleEvent(
+ ::com::sun::star::accessibility::AccessibleEventId::STATE_CHANGED,
+ aOldState, aNewState);
+}
+
+// -----------------------------------------------------------------------------
+
+void ValueSetAcc::LoseFocus (void)
+{
+ mbIsFocused = false;
+
+ // Boradcast the state change.
+ ::com::sun::star::uno::Any aOldState, aNewState;
+ aOldState <<= ::com::sun::star::accessibility::AccessibleStateType::FOCUSED;
+ FireAccessibleEvent(
+ ::com::sun::star::accessibility::AccessibleEventId::STATE_CHANGED,
+ aOldState, aNewState);
+}
+
// -----------------------------------------------------------------------------
uno::Reference< accessibility::XAccessibleContext > SAL_CALL ValueSetAcc::getAccessibleContext()
@@ -321,6 +352,9 @@ uno::Reference< accessibility::XAccessibleStateSet > SAL_CALL ValueSetAcc::getAc
pStateSet->AddState (accessibility::AccessibleStateType::VISIBLE);
if ( !mbIsTransientChildrenDisabled )
pStateSet->AddState (accessibility::AccessibleStateType::MANAGES_DESCENDANTS);
+ pStateSet->AddState (accessibility::AccessibleStateType::FOCUSABLE);
+ if (mbIsFocused)
+ pStateSet->AddState (accessibility::AccessibleStateType::FOCUSED);
return pStateSet;
}
diff --git a/svtools/source/control/valueimp.hxx b/svtools/source/control/valueimp.hxx
index 8d7951da0dfc..c176629953ae 100644
--- a/svtools/source/control/valueimp.hxx
+++ b/svtools/source/control/valueimp.hxx
@@ -150,6 +150,17 @@ public:
public:
+ /** Called by the corresponding ValueSet when it gets the focus.
+ Stores the new focus state and broadcasts a state change event.
+ */
+ void GetFocus (void);
+
+ /** Called by the corresponding ValueSet when it loses the focus.
+ Stores the new focus state and broadcasts a state change event.
+ */
+ void LoseFocus (void);
+
+
// XAccessible
virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) throw (::com::sun::star::uno::RuntimeException);
@@ -201,6 +212,8 @@ private:
::com::sun::star::accessibility::XAccessibleEventListener > > mxEventListeners;
ValueSet* mpParent;
bool mbIsTransientChildrenDisabled;
+ /// The current FOCUSED state.
+ bool mbIsFocused;
static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelId();
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx
index 7326f540c654..4033a9df7bb5 100644
--- a/svtools/source/control/valueset.cxx
+++ b/svtools/source/control/valueset.cxx
@@ -1683,13 +1683,10 @@ void ValueSet::GetFocus()
ImplDrawSelect();
Control::GetFocus();
- // Send accessibility event.
- ::com::sun::star::uno::Any aOldState, aNewState;
- aNewState <<= ::com::sun::star::accessibility::AccessibleStateType::FOCUSED;
- ImplFireAccessibleEvent (
- ::com::sun::star::accessibility::AccessibleEventId::STATE_CHANGED,
- aOldState, aNewState);
-
+ // Tell the accessible object that we got the focus.
+ ValueSetAcc* pAcc = ValueSetAcc::getImplementation( GetAccessible( FALSE ) );
+ if( pAcc )
+ pAcc->GetFocus();
}
// -----------------------------------------------------------------------
@@ -1703,12 +1700,10 @@ void ValueSet::LoseFocus()
HideFocus();
Control::LoseFocus();
- // Send accessibility event.
- ::com::sun::star::uno::Any aOldState, aNewState;
- aOldState <<= ::com::sun::star::accessibility::AccessibleStateType::FOCUSED;
- ImplFireAccessibleEvent (
- ::com::sun::star::accessibility::AccessibleEventId::STATE_CHANGED,
- aOldState, aNewState);
+ // Tell the accessible object that we lost the focus.
+ ValueSetAcc* pAcc = ValueSetAcc::getImplementation( GetAccessible( FALSE ) );
+ if( pAcc )
+ pAcc->LoseFocus();
}
// -----------------------------------------------------------------------
diff --git a/svtools/source/dialogs/addresstemplate.cxx b/svtools/source/dialogs/addresstemplate.cxx
index ddb34d5d4fd2..14ede88482a6 100644
--- a/svtools/source/dialogs/addresstemplate.cxx
+++ b/svtools/source/dialogs/addresstemplate.cxx
@@ -97,6 +97,22 @@ namespace svt
DECLARE_STL_VECTOR( String, StringArray );
DECLARE_STL_STDKEY_SET( ::rtl::OUString, StringBag );
DECLARE_STL_USTRINGACCESS_MAP( ::rtl::OUString, MapString2String );
+
+ namespace
+ {
+ String lcl_getSelectedDataSource( const ComboBox& _dataSourceCombo )
+ {
+ String selectedDataSource = _dataSourceCombo.GetText();
+ if ( _dataSourceCombo.GetEntryPos( selectedDataSource ) == LISTBOX_ENTRY_NOTFOUND )
+ {
+ // none of the pre-selected entries -> assume a path to a database document
+ OFileNotation aFileNotation( selectedDataSource, OFileNotation::N_SYSTEM );
+ selectedDataSource = aFileNotation.get( OFileNotation::N_URL );
+ }
+ return selectedDataSource;
+ }
+ }
+
// ===================================================================
// = IAssigmentData
// ===================================================================
@@ -857,9 +873,7 @@ public:
Reference< XCompletedConnection > xDS;
if ( m_pImpl->bWorkingPersistent )
{
- String sSelectedDS = m_aDatasource.GetText();
- OFileNotation aFileNotation( sSelectedDS ,OFileNotation::N_SYSTEM);
- sSelectedDS = aFileNotation.get(OFileNotation::N_URL);
+ String sSelectedDS = lcl_getSelectedDataSource( m_aDatasource );
// get the data source the user has chosen and let it build a connection
INetURLObject aURL( sSelectedDS );
@@ -1179,9 +1193,7 @@ public:
// -------------------------------------------------------------------
IMPL_LINK(AddressBookSourceDialog, OnOkClicked, Button*, EMPTYARG)
{
- String sSelectedDS = m_aDatasource.GetText();
- OFileNotation aFileNotation( sSelectedDS ,OFileNotation::N_SYSTEM);
- sSelectedDS = aFileNotation.get(OFileNotation::N_URL);
+ String sSelectedDS = lcl_getSelectedDataSource( m_aDatasource );
if ( m_pImpl->bWorkingPersistent )
{
m_pImpl->pConfigData->setDatasourceName(sSelectedDS);
@@ -1231,7 +1243,6 @@ public:
Reference<XPropertySet> xProp(xAdminDialog,UNO_QUERY);
if ( xProp.is() )
{
- String sOldDS = m_aDatasource.GetText();
::rtl::OUString sName;
xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataSourceName"))) >>= sName;
diff --git a/svtools/source/dialogs/wizdlg.cxx b/svtools/source/dialogs/wizdlg.cxx
index f0c69a24e4e4..aa0e62046ea6 100644
--- a/svtools/source/dialogs/wizdlg.cxx
+++ b/svtools/source/dialogs/wizdlg.cxx
@@ -303,8 +303,9 @@ void WizardDialog::ImplPosTabPage()
}
else if ( meViewAlign == WINDOWALIGN_LEFT )
{
- nOffX += aViewSize.Width()+WIZARDDIALOG_VIEW_DLGOFFSET_X;
- aDlgSize.Width() -= aViewSize.Width()+WIZARDDIALOG_VIEW_DLGOFFSET_X;
+ long nViewOffset = mbEmptyViewMargin ? 0 : WIZARDDIALOG_VIEW_DLGOFFSET_X;
+ nOffX += aViewSize.Width() + nViewOffset;
+ aDlgSize.Width() -= nOffX;
}
else if ( meViewAlign == WINDOWALIGN_BOTTOM )
aDlgSize.Height() -= aViewSize.Height()+WIZARDDIALOG_VIEW_DLGOFFSET_Y;
diff --git a/svtools/source/filter.vcl/filter/filter.cxx b/svtools/source/filter.vcl/filter/filter.cxx
index 7465a925627f..372b7496920b 100644
--- a/svtools/source/filter.vcl/filter/filter.cxx
+++ b/svtools/source/filter.vcl/filter/filter.cxx
@@ -74,8 +74,8 @@
#include <com/sun/star/ucb/CommandAbortedException.hpp>
#include <unotools/ucbstreamhelper.hxx>
#include <unotools/localfilehelper.hxx>
-#include <svtools/pathoptions.hxx>
#include <comphelper/processfactory.hxx>
+#include <rtl/bootstrap.hxx>
#include <rtl/instance.hxx>
#include "SvFilterOptionsDialog.hxx"
@@ -1038,8 +1038,13 @@ void GraphicFilter::ImplInit()
if( bUseConfig )
{
- SvtPathOptions aPathOpt;
- aFilterPath = aPathOpt.GetModulePath();
+#if defined WNT
+ rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/program"));
+#else
+ rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/program"));
+#endif
+ rtl::Bootstrap::expandMacros(url); //TODO: detect failure
+ utl::LocalFileHelper::ConvertURLToPhysicalName(url, aFilterPath);
}
pErrorEx = new FilterErrorEx;
diff --git a/svtools/source/filter.vcl/wmf/wmfwr.cxx b/svtools/source/filter.vcl/wmf/wmfwr.cxx
index 3c3ca09692af..ee3a71c51f9d 100644
--- a/svtools/source/filter.vcl/wmf/wmfwr.cxx
+++ b/svtools/source/filter.vcl/wmf/wmfwr.cxx
@@ -438,16 +438,7 @@ void WMFWriter::WMFRecord_CreateFontIndirect(const Font & rFont)
BYTE nPitchFamily;
WriteRecordHeader(0x00000000,W_META_CREATEFONTINDIRECT);
-
- if ( !rFont.GetSize().Width() )
- {
- VirtualDevice aDev;
- FontMetric aMetric( aDev.GetFontMetric( rFont ) );
- WriteHeightWidth(Size(aMetric.GetWidth(),-rFont.GetSize().Height()));
- }
- else
- WriteHeightWidth(Size(rFont.GetSize().Width(),-rFont.GetSize().Height()));
-
+ WriteHeightWidth(Size(rFont.GetSize().Width(),-rFont.GetSize().Height()));
*pWMF << (short)rFont.GetOrientation() << (short)rFont.GetOrientation();
switch (rFont.GetWeight()) {
diff --git a/svtools/source/inc/passwordcontainer.hxx b/svtools/source/inc/passwordcontainer.hxx
index a6edea49f699..a067672f3cf6 100644
--- a/svtools/source/inc/passwordcontainer.hxx
+++ b/svtools/source/inc/passwordcontainer.hxx
@@ -34,13 +34,14 @@
#include <vector>
#include <map>
#include <com/sun/star/task/XPasswordContainer.hpp>
+#include <com/sun/star/task/XUrlContainer.hpp>
#include <com/sun/star/task/PasswordRequestMode.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <com/sun/star/lang/XEventListener.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/task/XMasterPasswordHandling2.hpp>
-#include <cppuhelper/implbase4.hxx>
+#include <cppuhelper/implbase5.hxx>
#include <cppuhelper/typeprovider.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <cppuhelper/factory.hxx>
@@ -52,6 +53,8 @@
#include <rtl/ref.hxx>
#include <osl/mutex.hxx>
+#include "syscreds.hxx"
+
#define MEMORY_RECORD 0
#define PERSISTENT_RECORD 1
@@ -241,9 +244,10 @@ enum PasswordState {
cancelled
};
-class PasswordContainer : public ::cppu::WeakImplHelper4<
+class PasswordContainer : public ::cppu::WeakImplHelper5<
::com::sun::star::task::XPasswordContainer,
::com::sun::star::task::XMasterPasswordHandling2,
+ ::com::sun::star::task::XUrlContainer,
::com::sun::star::lang::XServiceInfo,
::com::sun::star::lang::XEventListener >
{
@@ -253,6 +257,7 @@ private:
::osl::Mutex mMutex;
::rtl::OUString m_aMasterPasswd; // master password is set when the string is not empty
::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > mComponent;
+ SysCredentialsConfig mUrlContainer;
::com::sun::star::uno::Sequence< ::com::sun::star::task::UserRecord > CopyToUserRecordSequence(
const ::std::list< NamePassRecord >& original,
@@ -269,6 +274,19 @@ private:
const ::rtl::OUString& name,
const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& Handler )
throw(::com::sun::star::uno::RuntimeException);
+bool createUrlRecord(
+ const PassMap::iterator & rIter,
+ bool bName,
+ const ::rtl::OUString & aName,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler,
+ ::com::sun::star::task::UrlRecord & rRec )
+ throw( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::task::UrlRecord find(
+ const ::rtl::OUString& aURL,
+ const ::rtl::OUString& aName,
+ bool bName, // only needed to support empty user names
+ const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& aHandler ) throw(::com::sun::star::uno::RuntimeException);
::rtl::OUString GetDefaultMasterPassword();
@@ -369,6 +387,12 @@ public:
virtual ::sal_Bool SAL_CALL useDefaultMasterPassword( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler ) throw (::com::sun::star::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL isDefaultMasterPasswordUsed( ) throw (::com::sun::star::uno::RuntimeException);
+ // XUrlContainer
+ virtual void SAL_CALL addUrl( const ::rtl::OUString& Url, ::sal_Bool MakePersistent ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL findUrl( const ::rtl::OUString& Url ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeUrl( const ::rtl::OUString& Url ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getUrls( ::sal_Bool OnlyPersistent ) throw (::com::sun::star::uno::RuntimeException);
+
void Notify();
};
diff --git a/svtools/source/items1/itemset.cxx b/svtools/source/items1/itemset.cxx
index 6edeffe6d250..fee00dca854a 100644
--- a/svtools/source/items1/itemset.cxx
+++ b/svtools/source/items1/itemset.cxx
@@ -541,7 +541,7 @@ SfxItemState SfxItemSet::GetItemState( USHORT nWhich,
// Unterschiedlich vorhanden
return SFX_ITEM_DONTCARE;
- if ( (*ppFnd)->Type() == TYPE(SfxVoidItem) )
+ if ( (*ppFnd)->Type() == TYPE(SfxVoidItem) )
return SFX_ITEM_DISABLED;
if (ppItem)
diff --git a/svtools/source/misc/dialogcontrolling.cxx b/svtools/source/misc/dialogcontrolling.cxx
index 01f9d4ed0eef..d461e5898227 100644
--- a/svtools/source/misc/dialogcontrolling.cxx
+++ b/svtools/source/misc/dialogcontrolling.cxx
@@ -79,8 +79,8 @@ namespace svt
//= DialogController
//=====================================================================
//---------------------------------------------------------------------
- DialogController::DialogController( Window& _rInstigator, const PWindowEventFilter _pEventFilter,
- const PWindowOperator _pOperator )
+ DialogController::DialogController( Window& _rInstigator, const PWindowEventFilter& _pEventFilter,
+ const PWindowOperator& _pOperator )
:m_pImpl( new DialogController_Data( _rInstigator, _pEventFilter, _pOperator ) )
{
DBG_ASSERT( m_pImpl->pEventFilter.get() && m_pImpl->pOperator.get(),
@@ -108,31 +108,33 @@ namespace svt
void DialogController::addDependentWindow( Window& _rWindow )
{
m_pImpl->aConcernedWindows.push_back( &_rWindow );
- impl_update( _rWindow );
+
+ VclWindowEvent aEvent( &_rWindow, 0, NULL );
+ impl_update( aEvent, _rWindow );
}
//---------------------------------------------------------------------
- IMPL_LINK( DialogController, OnWindowEvent, const VclSimpleEvent*, _pEvent )
+ IMPL_LINK( DialogController, OnWindowEvent, const VclWindowEvent*, _pEvent )
{
if ( m_pImpl->pEventFilter->payAttentionTo( *_pEvent ) )
- impl_updateAll();
+ impl_updateAll( *_pEvent );
return 0L;
}
//---------------------------------------------------------------------
- void DialogController::impl_updateAll()
+ void DialogController::impl_updateAll( const VclWindowEvent& _rTriggerEvent )
{
for ( ::std::vector< Window* >::iterator loop = m_pImpl->aConcernedWindows.begin();
loop != m_pImpl->aConcernedWindows.end();
++loop
)
- impl_update( *(*loop) );
+ impl_update( _rTriggerEvent, *(*loop) );
}
//---------------------------------------------------------------------
- void DialogController::impl_update( Window& _rWindow )
+ void DialogController::impl_update( const VclWindowEvent& _rTriggerEvent, Window& _rWindow )
{
- m_pImpl->pOperator->operateOn( _rWindow );
+ m_pImpl->pOperator->operateOn( _rTriggerEvent, _rWindow );
}
//=====================================================================
@@ -177,6 +179,13 @@ namespace svt
}
//---------------------------------------------------------------------
+ void ControlDependencyManager::addController( const PDialogController& _pController )
+ {
+ OSL_ENSURE( _pController.get() != NULL, "ControlDependencyManager::addController: invalid controller, this will crash, sooner or later!" );
+ m_pImpl->aControllers.push_back( _pController );
+ }
+
+ //---------------------------------------------------------------------
void ControlDependencyManager::enableOnRadioCheck( RadioButton& _rRadio, Window& _rDependentWindow )
{
PDialogController pController( new RadioDependentEnabler( _rRadio ) );
diff --git a/svtools/source/misc/embedhlp.cxx b/svtools/source/misc/embedhlp.cxx
index 8eaf915f3b0c..6bd1126f8082 100644
--- a/svtools/source/misc/embedhlp.cxx
+++ b/svtools/source/misc/embedhlp.cxx
@@ -54,6 +54,7 @@
#include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
#include <com/sun/star/util/XModifiable.hpp>
#include <com/sun/star/datatransfer/XTransferable.hpp>
+#include <com/sun/star/chart2/XDefaultSizeTransmitter.hpp>
#include <cppuhelper/implbase4.hxx>
#include "vcl/svapp.hxx"
#include <rtl/logfile.hxx>
@@ -249,6 +250,7 @@ struct EmbeddedObjectRef_Impl
sal_Int64 nViewAspect;
BOOL bIsLocked;
sal_Bool bNeedUpdate;
+ awt::Size aDefaultSizeForChart_In_100TH_MM;//#i103460# charts do not necessaryly have an own size within ODF files, in this case they need to use the size settings from the surrounding frame, which is made available with this member
};
void EmbeddedObjectRef::Construct_Impl()
@@ -260,6 +262,7 @@ void EmbeddedObjectRef::Construct_Impl()
mpImp->nViewAspect = embed::Aspects::MSOLE_CONTENT;
mpImp->bIsLocked = FALSE;
mpImp->bNeedUpdate = sal_False;
+ mpImp->aDefaultSizeForChart_In_100TH_MM = awt::Size(8000,7000);
}
EmbeddedObjectRef::EmbeddedObjectRef()
@@ -286,6 +289,7 @@ EmbeddedObjectRef::EmbeddedObjectRef( const EmbeddedObjectRef& rObj )
mpImp->aPersistName = rObj.mpImp->aPersistName;
mpImp->aMediaType = rObj.mpImp->aMediaType;
mpImp->bNeedUpdate = rObj.mpImp->bNeedUpdate;
+ mpImp->aDefaultSizeForChart_In_100TH_MM = rObj.mpImp->aDefaultSizeForChart_In_100TH_MM;
if ( rObj.mpImp->pGraphic && !rObj.mpImp->bNeedUpdate )
mpImp->pGraphic = new Graphic( *rObj.mpImp->pGraphic );
@@ -334,6 +338,14 @@ void EmbeddedObjectRef::Assign( const NS_UNO::Reference < NS_EMBED::XEmbeddedObj
mpImp->nViewAspect = nAspect;
mxObj = xObj;
mpImp->xListener = EmbedEventListener_Impl::Create( this );
+
+ //#i103460#
+ {
+ ::com::sun::star::uno::Reference < ::com::sun::star::chart2::XDefaultSizeTransmitter > xSizeTransmitter( xObj, uno::UNO_QUERY );
+ DBG_ASSERT( xSizeTransmitter.is(), "Object does not support XDefaultSizeTransmitter -> will cause #i103460#!" );
+ if( xSizeTransmitter.is() )
+ xSizeTransmitter->setDefaultSize( mpImp->aDefaultSizeForChart_In_100TH_MM );
+ }
}
void EmbeddedObjectRef::Clear()
@@ -902,4 +914,18 @@ BOOL EmbeddedObjectRef::IsChart() const
return sal_False;
}
+void EmbeddedObjectRef::SetDefaultSizeForChart( const Size& rSizeIn_100TH_MM )
+{
+ //#i103460# charts do not necessaryly have an own size within ODF files,
+ //for this case they need to use the size settings from the surrounding frame,
+ //which is made available with this method
+
+ mpImp->aDefaultSizeForChart_In_100TH_MM = awt::Size( rSizeIn_100TH_MM.getWidth(), rSizeIn_100TH_MM.getHeight() );
+
+ ::com::sun::star::uno::Reference < ::com::sun::star::chart2::XDefaultSizeTransmitter > xSizeTransmitter( mxObj, uno::UNO_QUERY );
+ DBG_ASSERT( xSizeTransmitter.is(), "Object does not support XDefaultSizeTransmitter -> will cause #i103460#!" );
+ if( xSizeTransmitter.is() )
+ xSizeTransmitter->setDefaultSize( mpImp->aDefaultSizeForChart_In_100TH_MM );
+}
+
}
diff --git a/svtools/source/misc/errtxt.src b/svtools/source/misc/errtxt.src
index 033ecefc10e7..ebd922bfedf7 100644
--- a/svtools/source/misc/errtxt.src
+++ b/svtools/source/misc/errtxt.src
@@ -478,6 +478,10 @@ Resource RID_ERRHDL
{
Text [ en-US ] = "The digitally signed document content and/or macros do not match the current document signature.\n\nThis could be the result of document manipulation or of structural document damage due to data transmission.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n " ;
};
+ String ERRCODE_SFX_INCOMPLETE_ENCRYPTION
+ {
+ Text [ en-US ] = "The encrypted document contains unexpected non-encrypted streams.\n\nThis could be the result of document manipulation.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n " ;
+ };
String ERRCODE_IO_INVALIDLENGTH
{
diff --git a/svtools/source/misc/langtab.src b/svtools/source/misc/langtab.src
index 21953d25d92a..4458d4b0f132 100644
--- a/svtools/source/misc/langtab.src
+++ b/svtools/source/misc/langtab.src
@@ -302,6 +302,14 @@ StringArray STR_ARR_SVT_LANGUAGE_TABLE
< "Maltese" ; LANGUAGE_MALTESE ; > ;
< "Tok Pisin" ; LANGUAGE_USER_TOK_PISIN ; > ;
< "Shuswap" ; LANGUAGE_USER_SHUSWAP ; > ;
+ < "Oromo" ; LANGUAGE_OROMO ; > ;
+ < "Greek, Ancient" ; LANGUAGE_USER_ANCIENT_GREEK ; > ;
+ < "Yiddish" ; LANGUAGE_YIDDISH ; > ;
+ < "Quechua (Ecuador)" ; LANGUAGE_QUECHUA_ECUADOR ; > ;
+ < "Uyghur" ; LANGUAGE_UIGHUR_CHINA ; > ;
+ < "Asturian" ; LANGUAGE_USER_ASTURIAN ; > ;
+ < "Sorbian, Upper" ; LANGUAGE_UPPER_SORBIAN_GERMANY ; > ;
+ < "Sorbian, Lower" ; LANGUAGE_LOWER_SORBIAN_GERMANY ; > ;
};
};
diff --git a/svtools/source/misc1/docmspasswdrequest.cxx b/svtools/source/misc1/docmspasswdrequest.cxx
deleted file mode 100644
index e892d3a57d1a..000000000000
--- a/svtools/source/misc1/docmspasswdrequest.cxx
+++ /dev/null
@@ -1,143 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright IBM Corporation 2009.
- * Copyright 2009 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: docmspasswdrequest.cxx,v $
- * $Revision: 1.0 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svtools.hxx"
-
-#include "docmspasswdrequest.hxx"
-#include <com/sun/star/task/XInteractionAbort.hpp>
-#include <com/sun/star/task/XInteractionPassword.hpp>
-
-//==========================================================================
-
-class MSAbortContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionAbort >
-{
- sal_Bool mbSelected;
-
-public:
- MSAbortContinuation() : mbSelected( sal_False ) {}
-
- sal_Bool isSelected() { return mbSelected; }
-
- void reset() { mbSelected = sal_False; }
-
- virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException) { mbSelected = sal_True; }
-};
-
-//==========================================================================
-
-class MSPasswordContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionPassword >
-{
- sal_Bool mbSelected;
- ::rtl::OUString maPassword;
-
-public:
- MSPasswordContinuation() : mbSelected( sal_False ) {}
-
- sal_Bool isSelected() { return mbSelected; }
-
- void reset() { mbSelected = sal_False; }
-
- virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL setPassword( const ::rtl::OUString& aPass ) throw (::com::sun::star::uno::RuntimeException);
- virtual ::rtl::OUString SAL_CALL getPassword( ) throw (::com::sun::star::uno::RuntimeException);
-};
-
-void SAL_CALL MSPasswordContinuation::select()
- throw(::com::sun::star::uno::RuntimeException)
-{
- mbSelected = sal_True;
-}
-
-void SAL_CALL MSPasswordContinuation::setPassword( const ::rtl::OUString& aPass )
- throw (::com::sun::star::uno::RuntimeException)
-{
- maPassword = aPass;
-}
-
-::rtl::OUString SAL_CALL MSPasswordContinuation::getPassword()
- throw (::com::sun::star::uno::RuntimeException)
-{
- return maPassword;
-}
-
-//==========================================================================
-
-RequestMSDocumentPassword::RequestMSDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName )
-{
- ::rtl::OUString temp;
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2;
- ::com::sun::star::task::DocumentMSPasswordRequest
- aDocumentMSPasswordRequest( temp,
- temp2,
- ::com::sun::star::task::InteractionClassification_QUERY,
- nMode,
- aName );
-
- m_aRequest <<= aDocumentMSPasswordRequest;
-
- m_pAbort = new MSAbortContinuation;
- m_pPassword = new MSPasswordContinuation;
-
- m_lContinuations.realloc( 2 );
- m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort );
- m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pPassword );
-}
-
-sal_Bool RequestMSDocumentPassword::isAbort()
-{
- return m_pAbort->isSelected();
-}
-
-sal_Bool RequestMSDocumentPassword::isPassword()
-{
- return m_pPassword->isSelected();
-}
-
-::rtl::OUString RequestMSDocumentPassword::getPassword()
-{
- return m_pPassword->getPassword();
-}
-
-::com::sun::star::uno::Any SAL_CALL RequestMSDocumentPassword::getRequest()
- throw( ::com::sun::star::uno::RuntimeException )
-{
- return m_aRequest;
-}
-
-::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >
- SAL_CALL RequestMSDocumentPassword::getContinuations()
- throw( ::com::sun::star::uno::RuntimeException )
-{
- return m_lContinuations;
-}
-
-
diff --git a/svtools/source/misc1/docpasswdrequest.cxx b/svtools/source/misc1/docpasswdrequest.cxx
deleted file mode 100644
index 37ceb85ec132..000000000000
--- a/svtools/source/misc1/docpasswdrequest.cxx
+++ /dev/null
@@ -1,142 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: docpasswdrequest.cxx,v $
- * $Revision: 1.5 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svtools.hxx"
-
-#include "docpasswdrequest.hxx"
-#include <com/sun/star/task/XInteractionAbort.hpp>
-#include <com/sun/star/task/XInteractionPassword.hpp>
-
-//==========================================================================
-
-class AbortContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionAbort >
-{
- sal_Bool mbSelected;
-
-public:
- AbortContinuation() : mbSelected( sal_False ) {}
-
- sal_Bool isSelected() { return mbSelected; }
-
- void reset() { mbSelected = sal_False; }
-
- virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException) { mbSelected = sal_True; }
-};
-
-//==========================================================================
-
-class PasswordContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionPassword >
-{
- sal_Bool mbSelected;
- ::rtl::OUString maPassword;
-
-public:
- PasswordContinuation() : mbSelected( sal_False ) {}
-
- sal_Bool isSelected() { return mbSelected; }
-
- void reset() { mbSelected = sal_False; }
-
- virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL setPassword( const ::rtl::OUString& aPass ) throw (::com::sun::star::uno::RuntimeException);
- virtual ::rtl::OUString SAL_CALL getPassword( ) throw (::com::sun::star::uno::RuntimeException);
-};
-
-void SAL_CALL PasswordContinuation::select()
- throw(::com::sun::star::uno::RuntimeException)
-{
- mbSelected = sal_True;
-}
-
-void SAL_CALL PasswordContinuation::setPassword( const ::rtl::OUString& aPass )
- throw (::com::sun::star::uno::RuntimeException)
-{
- maPassword = aPass;
-}
-
-::rtl::OUString SAL_CALL PasswordContinuation::getPassword()
- throw (::com::sun::star::uno::RuntimeException)
-{
- return maPassword;
-}
-
-//==========================================================================
-
-RequestDocumentPassword::RequestDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName )
-{
- ::rtl::OUString temp;
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2;
- ::com::sun::star::task::DocumentPasswordRequest
- aDocumentPasswordRequest( temp,
- temp2,
- ::com::sun::star::task::InteractionClassification_QUERY,
- nMode,
- aName );
-
- m_aRequest <<= aDocumentPasswordRequest;
-
- m_pAbort = new AbortContinuation;
- m_pPassword = new PasswordContinuation;
-
- m_lContinuations.realloc( 2 );
- m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort );
- m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pPassword );
-}
-
-sal_Bool RequestDocumentPassword::isAbort()
-{
- return m_pAbort->isSelected();
-}
-
-sal_Bool RequestDocumentPassword::isPassword()
-{
- return m_pPassword->isSelected();
-}
-
-::rtl::OUString RequestDocumentPassword::getPassword()
-{
- return m_pPassword->getPassword();
-}
-
-::com::sun::star::uno::Any SAL_CALL RequestDocumentPassword::getRequest()
- throw( ::com::sun::star::uno::RuntimeException )
-{
- return m_aRequest;
-}
-
-::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >
- SAL_CALL RequestDocumentPassword::getContinuations()
- throw( ::com::sun::star::uno::RuntimeException )
-{
- return m_lContinuations;
-}
-
-
diff --git a/svtools/source/misc1/makefile.mk b/svtools/source/misc1/makefile.mk
index 3ca57ff36f92..dd143ea4e972 100644
--- a/svtools/source/misc1/makefile.mk
+++ b/svtools/source/misc1/makefile.mk
@@ -1,7 +1,7 @@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
+#
# Copyright 2008 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
@@ -49,14 +49,11 @@ EXCEPTIONSFILES=\
SLOFILES=\
$(EXCEPTIONSFILES) \
$(SLO)$/adrparse.obj \
- $(SLO)$/docpasswdrequest.obj \
- $(SLO)$/docmspasswdrequest.obj \
$(SLO)$/filenotation.obj \
$(SLO)$/inethist.obj \
$(SLO)$/inettype.obj \
$(SLO)$/iniadrtk.obj \
$(SLO)$/lngmisc.obj \
- $(SLO)$/loginerr.obj \
$(SLO)$/PasswordHelper.obj
SRS1NAME=$(TARGET)
diff --git a/svtools/source/numbers/numfmuno.cxx b/svtools/source/numbers/numfmuno.cxx
index 7417367ec124..d65a2fd696ce 100644
--- a/svtools/source/numbers/numfmuno.cxx
+++ b/svtools/source/numbers/numfmuno.cxx
@@ -774,7 +774,7 @@ uno::Any SAL_CALL SvNumberFormatObj::getPropertyValue( const rtl::OUString& aPro
else if (aString.EqualsAscii( PROPERTYNAME_LOCALE ))
{
lang::Locale aLocale( MsLangId::convertLanguageToLocale(
- pFormat->GetLanguage()));
+ pFormat->GetLanguage()));
aRet <<= aLocale;
}
else if (aString.EqualsAscii( PROPERTYNAME_TYPE ))
diff --git a/svtools/source/numbers/zforscan.cxx b/svtools/source/numbers/zforscan.cxx
index d6ce04c4da2a..77b33226559c 100644
--- a/svtools/source/numbers/zforscan.cxx
+++ b/svtools/source/numbers/zforscan.cxx
@@ -491,6 +491,8 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
if ( j < NF_MAX_DEFAULT_COLORS )
i = j;
}
+
+ Color* pResult = NULL;
if (i >= NF_MAX_DEFAULT_COLORS)
{
const String& rColorWord = pKeyword[NF_KEY_COLOR];
@@ -516,15 +518,9 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
{
long nIndex = sString.ToInt32();
if (nIndex > 0 && nIndex <= 64)
- return pFormatter->GetUserDefColor((USHORT)nIndex-1);
- else
- return NULL;
+ pResult = pFormatter->GetUserDefColor((USHORT)nIndex-1);
}
- else
- return NULL;
}
- else
- return NULL;
}
else
{
@@ -538,8 +534,9 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
else
sStr = pKeyword[NF_KEY_FIRSTCOLOR+i];
- return &(StandardColor[i]);
+ pResult = &(StandardColor[i]);
}
+ return pResult;
}
diff --git a/svtools/source/passwordcontainer/makefile.mk b/svtools/source/passwordcontainer/makefile.mk
index 70692ecbf06b..31e1336ad966 100644
--- a/svtools/source/passwordcontainer/makefile.mk
+++ b/svtools/source/passwordcontainer/makefile.mk
@@ -43,7 +43,8 @@ DLLPRE=
# --- Files -------------------------------------
SLOFILES= \
- $(SLO)$/passwordcontainer.obj
+ $(SLO)$/passwordcontainer.obj\
+ $(SLO)$/syscreds.obj
SHL1TARGET= $(TARGET)
SHL1IMPLIB= i$(TARGET)
diff --git a/svtools/source/passwordcontainer/passwordcontainer.cxx b/svtools/source/passwordcontainer/passwordcontainer.cxx
index 9855e7e3c487..cebde0705f12 100644
--- a/svtools/source/passwordcontainer/passwordcontainer.cxx
+++ b/svtools/source/passwordcontainer/passwordcontainer.cxx
@@ -152,10 +152,17 @@ static vector< ::rtl::OUString > getInfoFromInd( ::rtl::OUString aInd )
static sal_Bool shorterUrl( ::rtl::OUString& aURL )
{
sal_Int32 aInd = aURL.lastIndexOf( sal_Unicode( '/' ) );
- if( aInd > 0 && aURL.indexOf( ::rtl::OUString::createFromAscii( "://" ) ) != aInd-2 )
+
+ if( aInd > 0 )
{
- aURL = aURL.copy( 0, aInd );
- return sal_True;
+ sal_Int32 aPrevInd = aURL.lastIndexOf( sal_Unicode( '/' ), aInd );
+ if ( aURL.indexOf( ::rtl::OUString::createFromAscii( "://" ) )
+ != aPrevInd - 2 ||
+ aInd != aURL.getLength() - 1 )
+ {
+ aURL = aURL.copy( 0, aInd );
+ return sal_True;
+ }
}
return sal_False;
@@ -753,37 +760,14 @@ void PasswordContainer::PrivateAdd( const ::rtl::OUString& Url, const ::rtl::OUS
UrlRecord SAL_CALL PasswordContainer::find( const ::rtl::OUString& aURL, const Reference< XInteractionHandler >& aHandler ) throw(RuntimeException)
{
- ::osl::MutexGuard aGuard( mMutex );
-
- if( !m_aContainer.empty() )
- {
- ::rtl::OUString aUrl( aURL );
- PassMap::iterator aIter = m_aContainer.find( aUrl );
-
- if( aIter != m_aContainer.end() )
- return UrlRecord( aIter->first, CopyToUserRecordSequence( aIter->second, aHandler ) );
-
- // each iteration remove last '/...' section from the aUrl
- // while it's possible, up to the most left '://'
- while( shorterUrl( aUrl ) )
- {
- // first look for <url>/somename and then look for <url>/somename/...
- aIter = m_aContainer.find( aUrl );
- if( aIter != m_aContainer.end() )
- return UrlRecord( aIter->first, CopyToUserRecordSequence( aIter->second, aHandler ) );
- else
- {
- ::rtl::OUString tmpUrl( aUrl );
- tmpUrl += ::rtl::OUString::createFromAscii( "/" );
+ return find( aURL, rtl::OUString(), false, aHandler );
+}
- aIter = m_aContainer.lower_bound( aUrl );
- if( aIter != m_aContainer.end() )
- return UrlRecord( aIter->first, CopyToUserRecordSequence( aIter->second, aHandler ) );
- }
- }
- }
+//-------------------------------------------------------------------------
- return UrlRecord();
+UrlRecord SAL_CALL PasswordContainer::findForName( const ::rtl::OUString& aURL, const ::rtl::OUString& aName, const Reference< XInteractionHandler >& aHandler ) throw(RuntimeException)
+{
+ return find( aURL, aName, true, aHandler );
}
//-------------------------------------------------------------------------
@@ -810,48 +794,76 @@ Sequence< UserRecord > PasswordContainer::FindUsr( const list< NamePassRecord >&
//-------------------------------------------------------------------------
-UrlRecord SAL_CALL PasswordContainer::findForName( const ::rtl::OUString& aURL, const ::rtl::OUString& aName, const Reference< XInteractionHandler >& aHandler ) throw(RuntimeException)
+bool PasswordContainer::createUrlRecord(
+ const PassMap::iterator & rIter,
+ bool bName,
+ const ::rtl::OUString & aName,
+ const Reference< XInteractionHandler >& aHandler,
+ UrlRecord & rRec )
+ throw( RuntimeException )
{
+ if ( bName )
+ {
+ Sequence< UserRecord > aUsrRec
+ = FindUsr( rIter->second, aName, aHandler );
+ if( aUsrRec.getLength() )
+ {
+ rRec = UrlRecord( rIter->first, aUsrRec );
+ return true;
+ }
+ }
+ else
+ {
+ rRec = UrlRecord(
+ rIter->first,
+ CopyToUserRecordSequence( rIter->second, aHandler ) );
+ return true;
+ }
+ return false;
+}
+
+//-------------------------------------------------------------------------
+UrlRecord PasswordContainer::find(
+ const ::rtl::OUString& aURL,
+ const ::rtl::OUString& aName,
+ bool bName, // only needed to support empty user names
+ const Reference< XInteractionHandler >& aHandler ) throw(RuntimeException)
+{
::osl::MutexGuard aGuard( mMutex );
- if( !m_aContainer.empty() )
+
+ if( !m_aContainer.empty() && aURL.getLength() )
{
::rtl::OUString aUrl( aURL );
- PassMap::iterator aIter = m_aContainer.find( aUrl );
-
- if( aIter != m_aContainer.end() )
- {
- Sequence< UserRecord > aUsrRec = FindUsr( aIter->second, aName, aHandler );
- if( aUsrRec.getLength() )
- return UrlRecord( aIter->first, aUsrRec );
- }
// each iteration remove last '/...' section from the aUrl
// while it's possible, up to the most left '://'
- while( shorterUrl( aUrl ) )
+ do
{
// first look for <url>/somename and then look for <url>/somename/...
- aIter = m_aContainer.find( aUrl );
+ PassMap::iterator aIter = m_aContainer.find( aUrl );
if( aIter != m_aContainer.end() )
{
- Sequence< UserRecord > aUsrRec = FindUsr( aIter->second, aName, aHandler );
- if( aUsrRec.getLength() )
- return UrlRecord( aIter->first, aUsrRec );
+ UrlRecord aRec;
+ if ( createUrlRecord( aIter, bName, aName, aHandler, aRec ) )
+ return aRec;
}
else
{
::rtl::OUString tmpUrl( aUrl );
- tmpUrl += ::rtl::OUString::createFromAscii( "/" );
+ if ( tmpUrl.getStr()[tmpUrl.getLength() - 1] != (sal_Unicode)'/' )
+ tmpUrl += ::rtl::OUString::createFromAscii( "/" );
- aIter = m_aContainer.lower_bound( aUrl );
- if( aIter != m_aContainer.end() )
+ aIter = m_aContainer.lower_bound( tmpUrl );
+ if( aIter != m_aContainer.end() && aIter->first.match( tmpUrl ) )
{
- Sequence< UserRecord > aUsrRec = FindUsr( aIter->second, aName, aHandler );
- if( aUsrRec.getLength() )
- return UrlRecord( aIter->first, aUsrRec );
+ UrlRecord aRec;
+ if ( createUrlRecord( aIter, bName, aName, aHandler, aRec ) )
+ return aRec;
}
}
}
+ while( shorterUrl( aUrl ) && aUrl.getLength() );
}
return UrlRecord();
@@ -1355,6 +1367,35 @@ void SAL_CALL PasswordContainer::removeMasterPassword()
return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) && !aEncodedMP.getLength() );
}
+
+//-------------------------------------------------------------------------
+void SAL_CALL PasswordContainer::addUrl( const ::rtl::OUString& Url, ::sal_Bool MakePersistent )
+ throw (uno::RuntimeException)
+{
+ mUrlContainer.add( Url, MakePersistent );
+}
+
+//-------------------------------------------------------------------------
+::rtl::OUString SAL_CALL PasswordContainer::findUrl( const ::rtl::OUString& Url )
+ throw (uno::RuntimeException)
+{
+ return mUrlContainer.find( Url );
+}
+
+//-------------------------------------------------------------------------
+void SAL_CALL PasswordContainer::removeUrl( const ::rtl::OUString& Url )
+ throw (uno::RuntimeException)
+{
+ mUrlContainer.remove( Url );
+}
+
+//-------------------------------------------------------------------------
+uno::Sequence< ::rtl::OUString > SAL_CALL PasswordContainer::getUrls( ::sal_Bool OnlyPersistent )
+ throw (uno::RuntimeException)
+{
+ return mUrlContainer.list( OnlyPersistent );
+}
+
//-------------------------------------------------------------------------
void PasswordContainer::Notify()
@@ -1487,7 +1528,9 @@ MasterPasswordRequest_Impl::MasterPasswordRequest_Impl( PasswordRequestMode Mode
aRememberModes, // rRememberPasswordModes
RememberAuthentication_NO, // eDefaultRememberPasswordMode
aRememberModes, // rRememberAccountModes
- RememberAuthentication_NO // eDefaultRememberAccountMode
+ RememberAuthentication_NO, // eDefaultRememberAccountMode
+ sal_False, // bCanUseSystemCredentials
+ sal_False // bDefaultUseSystemCredentials
);
Sequence<
diff --git a/svtools/source/passwordcontainer/syscreds.cxx b/svtools/source/passwordcontainer/syscreds.cxx
new file mode 100644
index 000000000000..b8c223040e6d
--- /dev/null
+++ b/svtools/source/passwordcontainer/syscreds.cxx
@@ -0,0 +1,298 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "syscreds.hxx"
+#include "com/sun/star/beans/PropertyValue.hpp"
+
+using namespace com::sun::star;
+
+SysCredentialsConfigItem::SysCredentialsConfigItem(
+ SysCredentialsConfig * pOwner )
+: utl::ConfigItem( rtl::OUString::createFromAscii( "Office.Common/Passwords" ),
+ CONFIG_MODE_IMMEDIATE_UPDATE ),
+ m_bInited( false ),
+ m_pOwner( pOwner )
+{
+ uno::Sequence< ::rtl::OUString > aNode( 1 );
+ aNode[ 0 ] = rtl::OUString::createFromAscii(
+ "Office.Common/Passwords/AuthenticateUsingSystemCredentials" );
+ EnableNotification( aNode );
+}
+
+//virtual
+void SysCredentialsConfigItem::Notify(
+ const uno::Sequence< rtl::OUString > & /*seqPropertyNames*/ )
+{
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ m_bInited = false;
+ // rebuild m_seqURLs
+ getSystemCredentialsURLs();
+ }
+ m_pOwner->persistentConfigChanged();
+}
+
+uno::Sequence< rtl::OUString >
+SysCredentialsConfigItem::getSystemCredentialsURLs()
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ if ( !m_bInited )
+ {
+ // read config item
+ uno::Sequence< ::rtl::OUString > aPropNames( 1 );
+ aPropNames[ 0 ] = rtl::OUString::createFromAscii(
+ "AuthenticateUsingSystemCredentials" );
+ uno::Sequence< uno::Any > aAnyValues(
+ utl::ConfigItem::GetProperties( aPropNames ) );
+
+ OSL_ENSURE(
+ aAnyValues.getLength() == 1,
+ "SysCredentialsConfigItem::getSystemCredentialsURLs: "
+ "Error reading config item!" );
+
+ uno::Sequence< rtl::OUString > aValues;
+ if ( ( aAnyValues[ 0 ] >>= aValues ) ||
+ ( !aAnyValues[ 0 ].hasValue() ) )
+ {
+ m_seqURLs = aValues;
+ m_bInited = true;
+ }
+ }
+ return m_seqURLs;
+}
+
+void SysCredentialsConfigItem::setSystemCredentialsURLs(
+ const uno::Sequence< rtl::OUString > & seqURLList )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ // write config item.
+ uno::Sequence< rtl::OUString > aPropNames( 1 );
+ uno::Sequence< uno::Any > aPropValues( 1 );
+ aPropNames[ 0 ]
+ = ::rtl::OUString::createFromAscii(
+ "AuthenticateUsingSystemCredentials" );
+ aPropValues[ 0 ] <<= seqURLList;
+
+ utl::ConfigItem::SetModified();
+ utl::ConfigItem::PutProperties( aPropNames, aPropValues );
+
+ m_seqURLs = seqURLList;
+ m_bInited = true;
+}
+
+//============================================================================
+
+namespace
+{
+ // TODO: This code is actually copied from svtools/source/passwordcontainer.cxx
+ bool removeLastSegment( ::rtl::OUString & aURL )
+ {
+ sal_Int32 aInd = aURL.lastIndexOf( sal_Unicode( '/' ) );
+
+ if( aInd > 0 )
+ {
+ sal_Int32 aPrevInd = aURL.lastIndexOf( sal_Unicode( '/' ), aInd );
+ if ( aURL.indexOf( ::rtl::OUString::createFromAscii( "://" ) )
+ != aPrevInd - 2 ||
+ aInd != aURL.getLength() - 1 )
+ {
+ aURL = aURL.copy( 0, aInd );
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool findURL( StringSet const & rContainer, rtl::OUString const & aURL, rtl::OUString & aResult )
+ {
+ // TODO: This code is actually copied from svtools/source/passwordcontainer.cxx
+ if( !rContainer.empty() && aURL.getLength() )
+ {
+ ::rtl::OUString aUrl( aURL );
+
+ // each iteration remove last '/...' section from the aUrl
+ // while it's possible, up to the most left '://'
+ do
+ {
+ // first look for <url>/somename and then look for <url>/somename/...
+ StringSet::const_iterator aIter = rContainer.find( aUrl );
+ if( aIter != rContainer.end() )
+ {
+ aResult = *aIter;
+ return true;
+ }
+ else
+ {
+ ::rtl::OUString tmpUrl( aUrl );
+ if ( tmpUrl.getStr()[tmpUrl.getLength() - 1] != (sal_Unicode)'/' )
+ tmpUrl += ::rtl::OUString::createFromAscii( "/" );
+
+ aIter = rContainer.lower_bound( tmpUrl );
+ if( aIter != rContainer.end() && aIter->match( tmpUrl ) )
+ {
+ aResult = *aIter;
+ return true;
+ }
+ }
+ }
+ while( removeLastSegment( aUrl ) && aUrl.getLength() );
+ }
+ aResult = rtl::OUString();
+ return false;
+ }
+
+} // namespace
+
+SysCredentialsConfig::SysCredentialsConfig()
+: m_aConfigItem( this ),
+ m_bCfgInited( false )
+{
+}
+
+void SysCredentialsConfig::initCfg()
+{
+ osl::MutexGuard aGuard( m_aMutex );
+ if ( !m_bCfgInited )
+ {
+ uno::Sequence< rtl::OUString > aURLs(
+ m_aConfigItem.getSystemCredentialsURLs() );
+ for ( sal_Int32 n = 0; n < aURLs.getLength(); ++n )
+ m_aCfgContainer.insert( aURLs[ n ] );
+
+ m_bCfgInited = true;
+ }
+}
+
+void SysCredentialsConfig::writeCfg()
+{
+ osl::MutexGuard aGuard( m_aMutex );
+
+ OSL_ENSURE( m_bCfgInited, "SysCredentialsConfig::writeCfg : not initialized!" );
+
+ uno::Sequence< rtl::OUString > aURLs( m_aCfgContainer.size() );
+ StringSet::const_iterator it = m_aCfgContainer.begin();
+ const StringSet::const_iterator end = m_aCfgContainer.end();
+ sal_Int32 n = 0;
+
+ while ( it != end )
+ {
+ aURLs[ n ] = *it;
+ ++it;
+ ++n;
+ }
+
+ m_aConfigItem.setSystemCredentialsURLs( aURLs );
+}
+
+rtl::OUString SysCredentialsConfig::find( rtl::OUString const & aURL )
+{
+ osl::MutexGuard aGuard( m_aMutex );
+ rtl::OUString aResult;
+ if ( findURL( m_aMemContainer, aURL, aResult ) )
+ return aResult;
+
+ initCfg();
+ if ( findURL( m_aCfgContainer, aURL, aResult ) )
+ return aResult;
+
+ return rtl::OUString();
+}
+
+void SysCredentialsConfig::add( rtl::OUString const & rURL, bool bPersistent )
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ if ( bPersistent )
+ {
+ m_aMemContainer.erase( rURL );
+
+ initCfg();
+ m_aCfgContainer.insert( rURL );
+ writeCfg();
+ }
+ else
+ {
+ initCfg();
+ if ( m_aCfgContainer.erase( rURL ) > 0 )
+ writeCfg();
+
+ m_aMemContainer.insert( rURL );
+ }
+}
+
+void SysCredentialsConfig::remove( rtl::OUString const & rURL )
+{
+ m_aMemContainer.erase( rURL );
+
+ initCfg();
+ if ( m_aCfgContainer.erase( rURL ) > 0 )
+ writeCfg();
+}
+
+uno::Sequence< rtl::OUString > SysCredentialsConfig::list( bool bOnlyPersistent )
+{
+ initCfg();
+ sal_Int32 nCount = m_aCfgContainer.size()
+ + ( bOnlyPersistent ? 0 : m_aMemContainer.size() );
+ uno::Sequence< rtl::OUString > aResult( nCount );
+
+ StringSet::const_iterator it = m_aCfgContainer.begin();
+ StringSet::const_iterator end = m_aCfgContainer.end();
+ sal_Int32 n = 0;
+
+ while ( it != end )
+ {
+ aResult[ n ] = *it;
+ ++it;
+ ++n;
+ }
+
+ if ( !bOnlyPersistent )
+ {
+ it = m_aMemContainer.begin();
+ end = m_aMemContainer.end();
+
+ while ( it != end )
+ {
+ aResult[ n ] = *it;
+ ++it;
+ ++n;
+ }
+ }
+ return aResult;
+}
+
+void SysCredentialsConfig::persistentConfigChanged()
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ m_bCfgInited = false; // re-init on demand.
+}
diff --git a/svtools/source/passwordcontainer/syscreds.hxx b/svtools/source/passwordcontainer/syscreds.hxx
new file mode 100644
index 000000000000..b037e17c348e
--- /dev/null
+++ b/svtools/source/passwordcontainer/syscreds.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_SVTOOLS_SYSCREDS_HXX
+#define INCLUDED_SVTOOLS_SYSCREDS_HXX
+
+#include <set>
+#include <memory>
+#include "osl/mutex.hxx"
+#include "rtl/ustring.hxx"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "unotools/configitem.hxx"
+
+class SysCredentialsConfig;
+
+class SysCredentialsConfigItem : public utl::ConfigItem
+{
+ public:
+ SysCredentialsConfigItem( SysCredentialsConfig * pOwner );
+ //virtual ~SysCredentialsConfigItem();
+
+ virtual void Notify(
+ const com::sun::star::uno::Sequence< rtl::OUString > &
+ seqPropertyNames );
+ //virtual void Commit();
+
+ com::sun::star::uno::Sequence< rtl::OUString >
+ getSystemCredentialsURLs();
+
+ void setSystemCredentialsURLs(
+ const com::sun::star::uno::Sequence< rtl::OUString > &
+ seqURLList );
+
+ //bool isSystemCredentialsURL( const rtl::OUString & rURL ) const;
+
+private:
+ ::osl::Mutex m_aMutex;
+ bool m_bInited;
+ com::sun::star::uno::Sequence< rtl::OUString > m_seqURLs;
+ SysCredentialsConfig * m_pOwner;
+};
+
+typedef std::set< rtl::OUString > StringSet;
+
+class SysCredentialsConfig
+{
+ public:
+ SysCredentialsConfig();
+
+ rtl::OUString find( rtl::OUString const & rURL );
+ void add( rtl::OUString const & rURL, bool bPersistent );
+ void remove( rtl::OUString const & rURL );
+ com::sun::star::uno::Sequence< rtl::OUString > list( bool bOnlyPersistent );
+
+ void persistentConfigChanged();
+
+ private:
+ void initCfg();
+ void writeCfg();
+
+ ::osl::Mutex m_aMutex;
+ StringSet m_aMemContainer;
+ StringSet m_aCfgContainer;
+ SysCredentialsConfigItem m_aConfigItem;
+ bool m_bCfgInited;
+};
+
+#endif // INCLUDED_SVTOOLS_SYSCREDS_HXX
diff --git a/svtools/source/syslocale/syslocale.cxx b/svtools/source/syslocale/syslocale.cxx
index abe236bb46d0..9811d97fd964 100644
--- a/svtools/source/syslocale/syslocale.cxx
+++ b/svtools/source/syslocale/syslocale.cxx
@@ -66,18 +66,18 @@ public:
virtual void Notify( SvtBroadcaster& rBC, const SfxHint& rHint );
+ CharClass* GetCharClass();
+
};
// -----------------------------------------------------------------------
-SvtSysLocale_Impl::SvtSysLocale_Impl()
+SvtSysLocale_Impl::SvtSysLocale_Impl() : pCharClass(NULL)
{
const lang::Locale& rLocale = Application::GetSettings().GetLocale();
pLocaleData = new LocaleDataWrapper(
::comphelper::getProcessServiceFactory(), rLocale );
- pCharClass = new CharClass(
- ::comphelper::getProcessServiceFactory(), rLocale );
aSysLocaleOptions.AddListener( *this );
}
@@ -89,7 +89,15 @@ SvtSysLocale_Impl::~SvtSysLocale_Impl()
delete pLocaleData;
}
-
+CharClass* SvtSysLocale_Impl::GetCharClass()
+{
+ if ( !pCharClass )
+ {
+ const lang::Locale& rLocale = Application::GetSettings().GetLocale();
+ pCharClass = new CharClass(::comphelper::getProcessServiceFactory(), rLocale );
+ }
+ return pCharClass;
+}
void SvtSysLocale_Impl::Notify( SvtBroadcaster&, const SfxHint& rHint )
{
const SfxSimpleHint* p = PTR_CAST( SfxSimpleHint, &rHint );
@@ -98,7 +106,7 @@ void SvtSysLocale_Impl::Notify( SvtBroadcaster&, const SfxHint& rHint )
MutexGuard aGuard( SvtSysLocale::GetMutex() );
const lang::Locale& rLocale = Application::GetSettings().GetLocale();
pLocaleData->setLocale( rLocale );
- pCharClass->setLocale( rLocale );
+ GetCharClass()->setLocale( rLocale );
}
}
@@ -158,11 +166,11 @@ const LocaleDataWrapper* SvtSysLocale::GetLocaleDataPtr() const
const CharClass& SvtSysLocale::GetCharClass() const
{
- return *(pImpl->pCharClass);
+ return *(pImpl->GetCharClass());
}
const CharClass* SvtSysLocale::GetCharClassPtr() const
{
- return pImpl->pCharClass;
+ return pImpl->GetCharClass();
}
diff --git a/svtools/source/table/defaultinputhandler.cxx b/svtools/source/table/defaultinputhandler.cxx
new file mode 100644
index 000000000000..17ee0222857f
--- /dev/null
+++ b/svtools/source/table/defaultinputhandler.cxx
@@ -0,0 +1,210 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/abstracttablecontrol.hxx"
+
+#include <tools/debug.hxx>
+#include <vcl/event.hxx>
+#include <vcl/cursor.hxx>
+#include "svtools/table/tabledatawindow.hxx"
+
+//........................................................................
+namespace svt { namespace table
+{
+//.......................................................................
+
+ struct DefaultInputHandler_Impl
+ {
+ };
+
+ //====================================================================
+ //= DefaultInputHandler
+ //====================================================================
+ //--------------------------------------------------------------------
+ DefaultInputHandler::DefaultInputHandler()
+ :m_pImpl( new DefaultInputHandler_Impl )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ DefaultInputHandler::~DefaultInputHandler()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::MouseMove( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt )
+ {
+ (void)_rControl;
+ (void)_rMEvt;
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::MouseButtonDown( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt )
+ {
+ bool bHandled = false;
+ Point aPoint = _rMEvt.GetPosPixel();
+ if(_rControl.isClickInVisibleArea(aPoint))
+ {
+ if(_rControl.getSelEngine()->GetSelectionMode() == NO_SELECTION)
+ {
+ LoseFocus(_rControl);
+ _rControl.setCursorAtCurrentCell(aPoint);
+ bHandled = true;
+ }
+ else
+ {
+ bHandled = _rControl.getSelEngine()->SelMouseButtonDown(_rMEvt);
+ }
+ }
+ return bHandled;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::MouseButtonUp( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt )
+ {
+ bool bHandled = false;
+ Point aPoint = _rMEvt.GetPosPixel();
+ if(_rControl.isClickInVisibleArea(aPoint))
+ {
+ if(_rControl.getSelEngine()->GetSelectionMode() == NO_SELECTION)
+ {
+ GetFocus(_rControl);
+ _rControl.setCursorAtCurrentCell(aPoint);
+ bHandled = true;
+ }
+ else
+ bHandled = _rControl.getSelEngine()->SelMouseButtonUp(_rMEvt);
+ }
+ return bHandled;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::KeyInput( IAbstractTableControl& _rControl, const KeyEvent& rKEvt )
+ {
+ bool bHandled = false;
+
+ const KeyCode& rKeyCode = rKEvt.GetKeyCode();
+ USHORT nKeyCode = rKeyCode.GetCode();
+
+ struct _ActionMapEntry
+ {
+ USHORT nKeyCode;
+ USHORT nKeyModifier;
+ TableControlAction eAction;
+ }
+ static aKnownActions[] = {
+ { KEY_DOWN, 0, cursorDown },
+ { KEY_UP, 0, cursorUp },
+ { KEY_LEFT, 0, cursorLeft },
+ { KEY_RIGHT, 0, cursorRight },
+ { KEY_HOME, 0, cursorToLineStart },
+ { KEY_END, 0, cursorToLineEnd },
+ { KEY_PAGEUP, 0, cursorPageUp },
+ { KEY_PAGEDOWN, 0, cursorPageDown },
+ { KEY_PAGEUP, KEY_MOD1, cursorToFirstLine },
+ { KEY_PAGEDOWN, KEY_MOD1, cursorToLastLine },
+ { KEY_HOME, KEY_MOD1, cursorTopLeft },
+ { KEY_END, KEY_MOD1, cursorBottomRight },
+ { KEY_SPACE, KEY_MOD1, cursorSelectRow },
+ { KEY_UP, KEY_SHIFT, cursorSelectRowUp },
+ { KEY_DOWN, KEY_SHIFT, cursorSelectRowDown },
+ { KEY_END, KEY_SHIFT, cursorSelectRowAreaBottom },
+ { KEY_HOME, KEY_SHIFT, cursorSelectRowAreaTop },
+
+ { 0, 0, invalidTableControlAction }
+ };
+
+ const _ActionMapEntry* pActions = aKnownActions;
+ for ( ; pActions->eAction != invalidTableControlAction; ++pActions )
+ {
+ if ( ( pActions->nKeyCode == nKeyCode ) && ( pActions->nKeyModifier == rKeyCode.GetAllModifier() ) )
+ {
+ bHandled = _rControl.dispatchAction( pActions->eAction );
+ break;
+ }
+ }
+
+ return bHandled;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::GetFocus( IAbstractTableControl& _rControl )
+ {
+ _rControl.showCursor();
+ return false; // continue processing
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::LoseFocus( IAbstractTableControl& _rControl )
+ {
+ _rControl.hideCursor();
+ return false; // continue processing
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::RequestHelp( IAbstractTableControl& _rControl, const HelpEvent& _rHEvt )
+ {
+ (void)_rControl;
+ (void)_rHEvt;
+ // TODO
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::Command( IAbstractTableControl& _rControl, const CommandEvent& _rCEvt )
+ {
+ (void)_rControl;
+ (void)_rCEvt;
+ // TODO
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::PreNotify( IAbstractTableControl& _rControl, NotifyEvent& _rNEvt )
+ {
+ (void)_rControl;
+ (void)_rNEvt;
+ // TODO
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::Notify( IAbstractTableControl& _rControl, NotifyEvent& _rNEvt )
+ {
+ (void)_rControl;
+ (void)_rNEvt;
+ // TODO
+ return false;
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/gridtablerenderer.cxx b/svtools/source/table/gridtablerenderer.cxx
new file mode 100644
index 000000000000..2c4fda711009
--- /dev/null
+++ b/svtools/source/table/gridtablerenderer.cxx
@@ -0,0 +1,234 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/gridtablerenderer.hxx"
+
+#include <tools/debug.hxx>
+#include <vcl/window.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ struct GridTableRenderer_Impl
+ {
+ ITableModel& rModel;
+ RowPos nCurrentRow;
+
+ GridTableRenderer_Impl( ITableModel& _rModel )
+ :rModel( _rModel )
+ ,nCurrentRow( ROW_INVALID )
+ {
+ }
+ };
+
+ //====================================================================
+ //= GridTableRenderer
+ //====================================================================
+ //--------------------------------------------------------------------
+ GridTableRenderer::GridTableRenderer( ITableModel& _rModel )
+ :m_pImpl( new GridTableRenderer_Impl( _rModel ) )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ GridTableRenderer::~GridTableRenderer()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ RowPos GridTableRenderer::getCurrentRow()
+ {
+ return m_pImpl->nCurrentRow;
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintHeaderArea(
+ OutputDevice& _rDevice, const Rectangle& _rArea, bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle )
+ {
+ OSL_PRECOND( _bIsColHeaderArea || _bIsRowHeaderArea,
+ "GridTableRenderer::PaintHeaderArea: invalid area flags!" );
+
+ // fill the rows with alternating background colors
+ _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor();
+ _rDevice.SetFillColor( _rStyle.GetDialogColor() );
+ _rDevice.DrawRect( _rArea );
+
+ // delimiter lines at bottom/right
+ _rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+
+ _rDevice.Pop();
+ (void)_bIsColHeaderArea;
+ (void)_bIsRowHeaderArea;
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle )
+ {
+ _rDevice.Push( PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+
+ String sHeaderText;
+
+ PColumnModel pColumn = m_pImpl->rModel.getColumnModel( _nCol );
+ DBG_ASSERT( !!pColumn, "GridTableRenderer::PaintColumnHeader: invalid column model object!" );
+ if ( !!pColumn )
+ sHeaderText = pColumn->getName();
+ Color aRowBackground = _rStyle.GetFieldColor();
+ if ( _bSelected )
+ {
+ aRowBackground = COL_BLUE;
+ }
+ _rDevice.DrawText( _rArea, sHeaderText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+ _rDevice.Pop();
+
+ (void)_bActive;
+ // no special painting for the active column at the moment
+
+ //(void)_bSelected;
+ // TODO: selection not yet implemented
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rRowArea, const StyleSettings& _rStyle )
+ {
+ // remember the row for subsequent calls to the other ->ITableRenderer methods
+ m_pImpl->nCurrentRow = _nRow;
+
+ // fill the rows with alternating background colors
+ _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor();
+
+ Color aRowBackground = _rStyle.GetFieldColor();
+
+ _rDevice.SetFillColor( aRowBackground );
+
+ _rDevice.DrawRect( _rRowArea );
+
+ // TODO: active? selected?
+
+ _rDevice.Pop();
+ (void) _bSelected;
+ (void)_bActive;
+
+ // no special painting for the active row at the moment
+
+ //(void)_bSelected;
+ // TODO: selection not yet implemented
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintRowHeader( bool _bActive, bool _bSelected, OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText )
+ {
+ _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+ _rDevice.DrawText( _rArea, _rText, TEXT_DRAW_LEFT);
+ // TODO: active? selected?
+ (void)_bActive;
+ (void)_bSelected;
+
+ _rDevice.Pop();
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintCell( ColPos _nColumn, bool _bSelected, bool _bActive,
+ OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle, rtl::OUString& _rText )
+ {
+ _rDevice.Push( PUSH_LINECOLOR );
+
+ // draw the grid
+ _rDevice.SetLineColor( COL_LIGHTGRAY );
+ // TODO: the LIGHTGRAY should probably be a property/setting
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+
+ {
+ // TODO: remove those temporary place holders
+ Rectangle aRect( _rArea );
+ ++aRect.Left(); --aRect.Right();
+ ++aRect.Top(); --aRect.Bottom();
+
+ String sText;
+ if(_bSelected)
+ {
+ Color aRed(COL_BLUE);
+ _rDevice.SetFillColor( aRed );
+ _rDevice.SetTextColor(COL_WHITE);
+ }
+ _rDevice.DrawRect( _rArea );
+ (void)_nColumn;
+ _rDevice.DrawText( aRect, _rText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP);
+ }
+ if(_bSelected)
+ {
+ _rDevice.SetFillColor( _rStyle.GetFieldColor() );
+ _rDevice.SetTextColor(COL_BLACK);
+ }
+
+ _rDevice.Pop();
+
+ (void)_bActive;
+// // no special painting for the active cell at the moment
+ (void)_rStyle;
+// // TODO: do we need this?
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect)
+ {
+ _rView.ShowFocus( _rCursorRect );
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::HideCellCursor( Window& _rView, const Rectangle& _rCursorRect)
+ {
+ (void)_rCursorRect;
+ _rView.HideFocus();
+
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
diff --git a/svtools/source/table/makefile.mk b/svtools/source/table/makefile.mk
new file mode 100644
index 000000000000..8feb7fee10d8
--- /dev/null
+++ b/svtools/source/table/makefile.mk
@@ -0,0 +1,59 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.16 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+ENABLE_EXCEPTIONS=TRUE
+PRJNAME=svtools
+TARGET=table
+#LIBTARGET=NO
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/svt.pmk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES=\
+ $(SLO)$/tablecontrol.obj \
+ $(SLO)$/tablecontrol_impl.obj \
+ $(SLO)$/gridtablerenderer.obj \
+ $(SLO)$/tablegeometry.obj \
+ $(SLO)$/defaultinputhandler.obj \
+ $(SLO)$/tabledatawindow.obj
+
+#LIB1TARGET= $(SLB)$/$(TARGET).lib
+#LIB1OBJFILES= $(SLOFILES)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/svtools/source/table/tablecontrol.cxx b/svtools/source/table/tablecontrol.cxx
new file mode 100644
index 000000000000..c8895a19408d
--- /dev/null
+++ b/svtools/source/table/tablecontrol.cxx
@@ -0,0 +1,179 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/tablecontrol.hxx"
+#include "tablegeometry.hxx"
+#include "tablecontrol_impl.hxx"
+#include "svtools/table/tabledatawindow.hxx"
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= TableControl
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableControl::TableControl( Window* _pParent, WinBits _nStyle )
+ :Control( _pParent, _nStyle )
+ ,m_pImpl( new TableControl_Impl( *this ) )
+ {
+ m_pImpl->getDataWindow()->SetMouseButtonDownHdl( LINK( this, TableControl, ImplMouseButtonDownHdl ) );
+ m_pImpl->getDataWindow()->SetMouseButtonUpHdl( LINK( this, TableControl, ImplMouseButtonUpHdl ) );
+ }
+
+ //--------------------------------------------------------------------
+ TableControl::~TableControl()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::GetFocus()
+ {
+ if ( !m_pImpl->getInputHandler()->GetFocus( *m_pImpl ) )
+ {
+ Control::GetFocus();
+ GrabFocus();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::LoseFocus()
+ {
+ if ( !m_pImpl->getInputHandler()->LoseFocus( *m_pImpl ) )
+ Control::LoseFocus();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::KeyInput( const KeyEvent& rKEvt )
+ {
+ if ( !m_pImpl->getInputHandler()->KeyInput( *m_pImpl, rKEvt ) )
+ Control::KeyInput( rKEvt );
+ }
+ //--------------------------------------------------------------------
+ void TableControl::Resize()
+ {
+ Control::Resize();
+ m_pImpl->onResize();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::SetModel( PTableModel _pModel )
+ {
+ m_pImpl->setModel( _pModel );
+ }
+
+ //--------------------------------------------------------------------
+ PTableModel TableControl::GetModel() const
+ {
+ return m_pImpl->getModel();
+ }
+
+ //--------------------------------------------------------------------
+ RowPos TableControl::GetTopRow() const
+ {
+ return m_pImpl->getTopRow();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::SetTopRow( RowPos _nRow )
+ {
+ // TODO
+ (void)_nRow;
+ }
+
+ //--------------------------------------------------------------------
+ RowPos TableControl::GetCurrentRow() const
+ {
+ return m_pImpl->getCurRow();
+ }
+
+ //--------------------------------------------------------------------
+ ColPos TableControl::GetCurrentColumn() const
+ {
+ return m_pImpl->getCurColumn();
+ }
+
+ //--------------------------------------------------------------------
+ bool TableControl::GoTo( ColPos _nColumn, RowPos _nRow )
+ {
+ return m_pImpl->goTo( _nColumn, _nRow );
+ }
+ //--------------------------------------------------------------------
+ void TableControl::InvalidateDataWindow(RowPos _nRowStart, bool _bRemoved)
+ {
+ Rectangle _rRect;
+ if(_bRemoved)
+ return m_pImpl->invalidateRows(_nRowStart, _rRect);
+ else
+ return m_pImpl->invalidateRow(_nRowStart, _rRect);
+ }
+ //--------------------------------------------------------------------
+ std::vector<RowPos> TableControl::getSelectedRows()
+ {
+ return m_pImpl->getSelectedRows();
+ }
+ //--------------------------------------------------------------------
+ void TableControl::removeSelectedRow(RowPos _nRowPos)
+ {
+ m_pImpl->removeSelectedRow(_nRowPos);
+ }
+ //--------------------------------------------------------------------
+
+ RowPos TableControl::GetCurrentRow(const Point& rPoint)
+ {
+ return m_pImpl->getCurrentRow( rPoint );
+ }
+
+ //--------------------------------------------------------------------
+
+ IMPL_LINK( TableControl, ImplMouseButtonDownHdl, MouseEvent*, pData )
+ {
+ CallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, pData );
+ return 1;
+ }
+
+ IMPL_LINK( TableControl, ImplMouseButtonUpHdl, MouseEvent*, pData )
+ {
+ CallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, pData );
+ return 1;
+ }
+
+ SelectionEngine* TableControl::getSelEngine()
+ {
+ return m_pImpl->getSelEngine();
+ }
+
+ TableDataWindow* TableControl::getDataWindow()
+ {
+ return m_pImpl->getDataWindow();
+ }
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablecontrol_impl.cxx b/svtools/source/table/tablecontrol_impl.cxx
new file mode 100644
index 000000000000..e1ff3aeb7f2a
--- /dev/null
+++ b/svtools/source/table/tablecontrol_impl.cxx
@@ -0,0 +1,2003 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/tablecontrol.hxx"
+#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/tablemodel.hxx"
+#include "tablecontrol_impl.hxx"
+#include "tablegeometry.hxx"
+#include "svtools/table/tabledatawindow.hxx"
+
+#include <vcl/scrbar.hxx>
+#include <vcl/seleng.hxx>
+
+#include <functional>
+#include <stdlib.h>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= TempHideCursor
+ //====================================================================
+ class TempHideCursor
+ {
+ private:
+ IAbstractTableControl& m_rTable;
+
+ public:
+ TempHideCursor( IAbstractTableControl& _rTable )
+ :m_rTable( _rTable )
+ {
+ m_rTable.hideCursor();
+ }
+ ~TempHideCursor()
+ {
+ m_rTable.showCursor();
+ }
+ };
+
+ //====================================================================
+ //= EmptyTableModel
+ //====================================================================
+ /** default implementation of an ->ITableModel, used as fallback when no
+ real model is present
+
+ Instances of this class are static in any way, and provide the least
+ necessary default functionality for a table model.
+ */
+ class EmptyTableModel : public ITableModel
+ {
+ public:
+ EmptyTableModel()
+ {
+ }
+
+ // ITableModel overridables
+ virtual TableSize getColumnCount() const
+ {
+ return 0;
+ }
+ virtual TableSize getRowCount() const
+ {
+ return 0;
+ }
+ virtual bool hasColumnHeaders() const
+ {
+ return false;
+ }
+ virtual bool hasRowHeaders() const
+ {
+ return false;
+ }
+ virtual void setRowHeaders(bool _bRowHeaders)
+ {
+ (void)_bRowHeaders;
+ }
+ virtual void setColumnHeaders(bool _bColumnHeaders)
+ {
+ (void)_bColumnHeaders;
+ }
+ void setColumnCount(TableSize _nColCount)
+ {
+ (void) _nColCount;
+ }
+ void setRowCount(TableSize _nRowCount)
+ {
+ (void)_nRowCount;
+ }
+ virtual bool isCellEditable( ColPos col, RowPos row ) const
+ {
+ (void)col;
+ (void)row;
+ return false;
+ }
+ virtual void addTableModelListener( const PTableModelListener& listener )
+ {
+ (void)listener;
+ // ignore
+ }
+ virtual void removeTableModelListener( const PTableModelListener& listener )
+ {
+ (void)listener;
+ // ignore
+ }
+ virtual PColumnModel getColumnModel( ColPos column )
+ {
+ DBG_ERROR( "EmptyTableModel::getColumnModel: invalid call!" );
+ (void)column;
+ return PColumnModel();
+ }
+ virtual PColumnModel getColumnModelByID( ColumnID id )
+ {
+ DBG_ERROR( "EmptyTableModel::getColumnModel: invalid call!" );
+ (void)id;
+ return PColumnModel();
+ }
+ virtual PTableRenderer getRenderer() const
+ {
+ return PTableRenderer();
+ }
+ virtual PTableInputHandler getInputHandler() const
+ {
+ return PTableInputHandler();
+ }
+ virtual TableMetrics getRowHeight() const
+ {
+ return 5 * 100;
+ }
+ virtual void setRowHeight(TableMetrics _nRowHeight)
+ {
+ (void)_nRowHeight;
+ }
+ virtual TableMetrics getColumnHeaderHeight() const
+ {
+ return 0;
+ }
+ virtual TableMetrics getRowHeaderWidth() const
+ {
+ return 0;
+ }
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const
+ {
+ (void)overAllHeight;
+ (void)actHeight;
+ return ScrollbarShowNever;
+ }
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const
+ {
+ (void)overAllWidth;
+ (void)actWidth;
+ return ScrollbarShowNever;
+ }
+ virtual void setCellContent(std::vector<std::vector<rtl::OUString> > pCellEntryType)
+ {
+ (void)pCellEntryType;
+ }
+ virtual std::vector<std::vector<rtl::OUString> > getCellContent()
+ {
+ std::vector<rtl::OUString> cCC;
+ cCC.push_back(rtl::OUString::createFromAscii(""));
+ std::vector<std::vector<rtl::OUString> > cC;
+ cC.push_back(cCC);
+ return cC;
+ }
+ virtual void setRowHeaderName(std::vector<rtl::OUString> pCellEntryType)
+ {
+ (void)pCellEntryType;
+ }
+ virtual std::vector<rtl::OUString> getRowHeaderName()
+ {
+ std::vector<rtl::OUString> cCC;
+ cCC.push_back(rtl::OUString::createFromAscii(""));
+ return cCC;
+ }
+ };
+
+
+ //====================================================================
+ //= TableControl_Impl
+ //====================================================================
+ DBG_NAME( TableControl_Impl )
+
+#if DBG_UTIL
+ //====================================================================
+ //= SuspendInvariants
+ //====================================================================
+ class SuspendInvariants
+ {
+ private:
+ const TableControl_Impl& m_rTable;
+ sal_Int32 m_nSuspendFlags;
+
+ public:
+ SuspendInvariants( const TableControl_Impl& _rTable, sal_Int32 _nSuspendFlags )
+ :m_rTable( _rTable )
+ ,m_nSuspendFlags( _nSuspendFlags )
+ {
+ DBG_ASSERT( ( m_rTable.m_nRequiredInvariants & m_nSuspendFlags ) == m_nSuspendFlags,
+ "SuspendInvariants: cannot suspend what is already suspended!" );
+ const_cast< TableControl_Impl& >( m_rTable ).m_nRequiredInvariants &= ~m_nSuspendFlags;
+ }
+ ~SuspendInvariants()
+ {
+ const_cast< TableControl_Impl& >( m_rTable ).m_nRequiredInvariants |= m_nSuspendFlags;
+ }
+ };
+ #define DBG_SUSPEND_INV( flags ) \
+ SuspendInvariants aSuspendInv( *this, flags );
+#else
+ #define DBG_SUSPEND_INV( flags )
+#endif
+
+#if DBG_UTIL
+ //====================================================================
+ const char* TableControl_Impl_checkInvariants( const void* _pInstance )
+ {
+ return static_cast< const TableControl_Impl* >( _pInstance )->impl_checkInvariants();
+ }
+
+ namespace
+ {
+ template< typename SCALAR_TYPE >
+ bool lcl_checkLimitsExclusive( SCALAR_TYPE _nValue, SCALAR_TYPE _nMin, SCALAR_TYPE _nMax )
+ {
+ return ( _nValue > _nMin ) && ( _nValue < _nMax );
+ }
+
+ template< typename SCALAR_TYPE >
+ bool lcl_checkLimitsExclusive_OrDefault_OrFallback( SCALAR_TYPE _nValue, SCALAR_TYPE _nMin, SCALAR_TYPE _nMax,
+ PTableModel _pModel, SCALAR_TYPE _nDefaultOrFallback )
+ {
+ if ( !_pModel )
+ return _nValue == _nDefaultOrFallback;
+ if ( _nMax <= _nMin )
+ return _nDefaultOrFallback == _nValue;
+ return lcl_checkLimitsExclusive( _nValue, _nMin, _nMax );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ const sal_Char* TableControl_Impl::impl_checkInvariants() const
+ {
+ if ( !m_pModel )
+ return "no model, not even an EmptyTableModel";
+
+ if ( !m_pDataWindow )
+ return "invalid data window!";
+
+ if ( m_pModel->getColumnCount() != m_nColumnCount )
+ return "column counts are inconsistent!";
+
+ if ( m_pModel->getRowCount() != m_nRowCount )
+ return "row counts are inconsistent!";
+
+ if ( ( m_nCurColumn != COL_INVALID ) && !m_aColumnWidthsPixel.empty() && ( m_nCurColumn < 0 ) || ( m_nCurColumn >= (ColPos)m_aColumnWidthsPixel.size() ) )
+ return "current column is invalid!";
+
+ if ( m_aColumnWidthsPixel.size() != m_aAccColumnWidthsPixel.size() )
+ return "columnd width caches are inconsistent!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nTopRow, (RowPos)-1, m_nRowCount, getModel(), (RowPos)0 ) )
+ return "invalid top row value!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nCurRow, (RowPos)-1, m_nRowCount, getModel(), ROW_INVALID ) )
+ return "invalid current row value!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nLeftColumn, (ColPos)-1, m_nColumnCount, getModel(), (ColPos)0 ) )
+ return "invalid current column value!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nCurColumn, (ColPos)-1, m_nColumnCount, getModel(), COL_INVALID ) )
+ return "invalid current column value!";
+
+ if ( m_pInputHandler != m_pModel->getInputHandler() )
+ return "input handler is not the model-provided one!";
+
+ // m_nColHeaderHeightPixel consistent with the model's value?
+ {
+ TableMetrics nHeaderHeight = m_pModel->hasColumnHeaders() ? m_pModel->getColumnHeaderHeight() : 0;
+ nHeaderHeight = m_rAntiImpl.LogicToPixel( Size( 0, nHeaderHeight ), MAP_100TH_MM ).Height();
+ if ( nHeaderHeight != m_nColHeaderHeightPixel )
+ return "column header heights are inconsistent!";
+ }
+
+ bool isDummyModel = dynamic_cast< const EmptyTableModel* >( m_pModel.get() ) != NULL;
+ if ( !isDummyModel )
+ {
+ TableMetrics nRowHeight = m_pModel->getRowHeight();
+ nRowHeight = m_rAntiImpl.LogicToPixel( Size( 0, nRowHeight ), MAP_100TH_MM ).Height();
+ if ( nRowHeight != m_nRowHeightPixel )
+ return "row heights are inconsistent!";
+ }
+
+ // m_nRowHeaderWidthPixel consistent with the model's value?
+ {
+ TableMetrics nHeaderWidth = m_pModel->hasRowHeaders() ? m_pModel->getRowHeaderWidth() : 0;
+ nHeaderWidth = m_rAntiImpl.LogicToPixel( Size( nHeaderWidth, 0 ), MAP_100TH_MM ).Width();
+ if ( nHeaderWidth != m_nRowHeaderWidthPixel )
+ return "row header widths are inconsistent!";
+ }
+
+ // TODO: check m_aColumnWidthsPixel and m_aAccColumnWidthsPixel
+
+ if ( m_nCursorHidden < 0 )
+ return "invalid hidden count for the cursor!";
+
+ if ( ( m_nRequiredInvariants & INV_SCROLL_POSITION ) && m_pVScroll )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ // prevent infinite recursion
+
+ if ( m_pVScroll->GetThumbPos() != m_nTopRow )
+ return "vertical scroll bar |position| is incorrect!";
+ if ( m_pVScroll->GetRange().Max() != m_nRowCount )
+ return "vertical scroll bar |range| is incorrect!";
+ if ( m_pVScroll->GetVisibleSize() != impl_getVisibleRows( false ) )
+ return "vertical scroll bar |visible size| is incorrect!";
+ }
+
+ if ( ( m_nRequiredInvariants & INV_SCROLL_POSITION ) && m_pHScroll )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ // prevent infinite recursion
+
+ if ( m_pHScroll->GetThumbPos() != m_nLeftColumn )
+ return "horizontal scroll bar |position| is incorrect!";
+ if ( m_pHScroll->GetRange().Max() != m_nColumnCount )
+ return "horizontal scroll bar |range| is incorrect!";
+ if ( m_pHScroll->GetVisibleSize() != impl_getVisibleColumns( false ) )
+ return "horizontal scroll bar |visible size| is incorrect!";
+ }
+
+ return NULL;
+ }
+#endif
+
+#define DBG_CHECK_ME() \
+ DBG_CHKTHIS( TableControl_Impl, TableControl_Impl_checkInvariants )
+
+ //--------------------------------------------------------------------
+ TableControl_Impl::TableControl_Impl( TableControl& _rAntiImpl )
+ :m_rAntiImpl ( _rAntiImpl )
+ ,m_pModel ( new EmptyTableModel )
+ ,m_pInputHandler ( )
+ ,m_nRowHeightPixel ( 15 )
+ ,m_nColHeaderHeightPixel( 0 )
+ ,m_nRowHeaderWidthPixel ( 0 )
+ ,m_nColumnCount ( 0 )
+ ,m_nRowCount ( 0 )
+ ,m_nCurColumn ( COL_INVALID )
+ ,m_nCurRow ( ROW_INVALID )
+ ,m_nLeftColumn ( 0 )
+ ,m_nTopRow ( 0 )
+ ,m_nCursorHidden ( 1 )
+ ,m_pDataWindow ( new TableDataWindow( *this ) )
+ ,m_pVScroll ( NULL )
+ ,m_pHScroll ( NULL )
+ ,m_pScrollCorner ( NULL )
+ ,m_pSelEngine ( )
+ ,m_nRowSelected ( )
+ ,m_pTableFunctionSet ( new TableFunctionSet(this ) )
+ ,m_nAnchor (-1 )
+#if DBG_UTIL
+ ,m_nRequiredInvariants ( INV_SCROLL_POSITION )
+#endif
+ {
+ DBG_CTOR( TableControl_Impl, TableControl_Impl_checkInvariants );
+ m_pSelEngine = new SelectionEngine(m_pDataWindow, m_pTableFunctionSet);
+ m_pSelEngine->SetSelectionMode(SINGLE_SELECTION);
+ m_pDataWindow->SetPosPixel( Point( 0, 0 ) );
+ m_pDataWindow->Show();
+ }
+
+ //--------------------------------------------------------------------
+ TableControl_Impl::~TableControl_Impl()
+ {
+ DBG_DTOR( TableControl_Impl, TableControl_Impl_checkInvariants );
+
+ DELETEZ( m_pVScroll );
+ DELETEZ( m_pHScroll );
+ DELETEZ( m_pScrollCorner );
+ DELETEZ( m_pTableFunctionSet );
+ DELETEZ( m_pSelEngine );
+ DELETEZ( m_pDataWindow );
+ }
+
+ //--------------------------------------------------------------------
+ PTableModel TableControl_Impl::getModel() const
+ {
+ if ( dynamic_cast< const EmptyTableModel* >( m_pModel.get() ) != NULL )
+ // if it's an EmptyTableModel, pretend that there is no model
+ return PTableModel();
+
+ return m_pModel;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::setModel( PTableModel _pModel )
+ {
+ DBG_CHECK_ME();
+
+ TempHideCursor aHideCursor( *this );
+
+ // TODO: revoke as table listener from the model
+
+ m_pModel = _pModel;
+ if ( !m_pModel )
+ m_pModel.reset( new EmptyTableModel );
+
+ // TODO: register as table listener
+ //m_pModel->addTableModelListener(PTableModelListener(m_pTableModelListener));
+ m_nCurRow = ROW_INVALID;
+ m_nCurColumn = COL_INVALID;
+
+ // recalc some model-dependent cached info
+ impl_ni_updateCachedModelValues();
+
+ // completely invalidate
+ m_rAntiImpl.Invalidate();
+
+ // reset cursor to (0,0)
+ if ( m_nRowCount ) m_nCurRow = 0;
+ if ( m_nColumnCount ) m_nCurColumn = 0;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const
+ {
+ DBG_CHECK_ME();
+
+ _rCellArea.Left() = 0;
+ _rCellArea.Top() = 0;
+
+ // determine the right-most border of the last column which is
+ // at least partially visible
+ _rCellArea.Right() = m_nRowHeaderWidthPixel;
+ if ( !m_aAccColumnWidthsPixel.empty() )
+ {
+ // the number of pixels which are scroll out of the left hand
+ // side of the window
+ long nScrolledOutLeft = m_nLeftColumn == 0 ? 0 : m_aAccColumnWidthsPixel[ m_nLeftColumn - 1 ];
+
+ ArrayOfLong::const_reverse_iterator loop = m_aAccColumnWidthsPixel.rbegin();
+ do
+ {
+ _rCellArea.Right() = *loop++ - nScrolledOutLeft + m_nRowHeaderWidthPixel;
+ }
+ while ( ( loop != m_aAccColumnWidthsPixel.rend() )
+ && ( *loop - nScrolledOutLeft >= _rCellArea.Right() )
+ );
+ }
+ // so far, _rCellArea.Right() denotes the first pixel *after* the cell area
+ --_rCellArea.Right();
+
+ // determine the last row which is at least partially visible
+ _rCellArea.Bottom() =
+ m_nColHeaderHeightPixel
+ + impl_getVisibleRows( true ) * m_nRowHeightPixel
+ - 1;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const
+ {
+ DBG_CHECK_ME();
+
+ impl_getAllVisibleCellsArea( _rCellArea );
+ _rCellArea.Left() = m_nRowHeaderWidthPixel;
+ _rCellArea.Top() = m_nColHeaderHeightPixel;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_updateCachedModelValues()
+ {
+ m_nRowHeightPixel = 15;
+ m_nColHeaderHeightPixel = 0;
+ m_nRowHeaderWidthPixel = 0;
+ m_pInputHandler.reset();
+ m_nColumnCount = m_nRowCount = 0;
+
+ m_nRowHeightPixel = m_rAntiImpl.LogicToPixel( Size( 0, m_pModel->getRowHeight() ), MAP_100TH_MM ).Height();
+ if ( m_pModel->hasColumnHeaders() )
+ m_nColHeaderHeightPixel = m_rAntiImpl.LogicToPixel( Size( 0, m_pModel->getColumnHeaderHeight() ), MAP_100TH_MM ).Height();
+ if ( m_pModel->hasRowHeaders() )
+ m_nRowHeaderWidthPixel = m_rAntiImpl.LogicToPixel( Size( m_pModel->getRowHeaderWidth(), 0 ), MAP_100TH_MM ).Width();
+
+ impl_ni_updateColumnWidths();
+
+ m_pInputHandler = m_pModel->getInputHandler();
+ if ( !m_pInputHandler )
+ m_pInputHandler.reset( new DefaultInputHandler );
+
+ m_nColumnCount = m_pModel->getColumnCount();
+ m_nRowCount = m_pModel->getRowCount();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_updateColumnWidths()
+ {
+ m_aColumnWidthsPixel.resize( 0 );
+ m_aAccColumnWidthsPixel.resize( 0 );
+ if ( !m_pModel )
+ return;
+
+ TableSize colCount = m_pModel->getColumnCount();
+ m_aColumnWidthsPixel.reserve( colCount );
+ m_aAccColumnWidthsPixel.reserve( colCount );
+ long accumulatedPixelWidth = 0;
+ for ( ColPos col = 0; col < colCount; ++col )
+ {
+ PColumnModel pColumn = m_pModel->getColumnModel( col );
+ DBG_ASSERT( !!pColumn, "TableControl_Impl::impl_ni_updateColumnWidths: invalid column returned by the model!" );
+ if ( !pColumn )
+ continue;
+
+ TableMetrics colWidth = pColumn->getWidth();
+ DBG_ASSERT( ( colWidth == COLWIDTH_FIT_TO_VIEW ) || ( colWidth > 0 ),
+ "TableControl_Impl::impl_ni_updateColumnWidths: invalid column width!" );
+
+ long pixelWidth = 0;
+ if ( colWidth == COLWIDTH_FIT_TO_VIEW )
+ {
+ // TODO
+ DBG_ERROR( "TableControl_Impl::impl_ni_updateColumnWidths: COLWIDTH_FIT_TO_VIEW not implemented, yet!" );
+ }
+ else
+ {
+ pixelWidth = m_rAntiImpl.LogicToPixel( Size( colWidth, 0 ), MAP_100TH_MM ).Width();
+ }
+
+ m_aColumnWidthsPixel.push_back( pixelWidth );
+
+ m_aAccColumnWidthsPixel.push_back( accumulatedPixelWidth += pixelWidth );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ namespace
+ {
+ //................................................................
+ /// determines whether a scrollbar is needed for the given values
+ bool lcl_determineScrollbarNeed( ScrollbarVisibility _eVisibility,
+ long _nVisibleUnits, long _nRange )
+ {
+ if ( _eVisibility == ScrollbarShowNever )
+ return false;
+ if ( _eVisibility == ScrollbarShowAlways )
+ return true;
+ return _nVisibleUnits > _nRange;
+ }
+
+ //................................................................
+ void lcl_setButtonRepeat( Window& _rWindow, ULONG _nDelay )
+ {
+ AllSettings aSettings = _rWindow.GetSettings();
+ MouseSettings aMouseSettings = aSettings.GetMouseSettings();
+
+ aMouseSettings.SetButtonRepeat( _nDelay );
+ aSettings.SetMouseSettings( aMouseSettings );
+
+ _rWindow.SetSettings( aSettings, TRUE );
+ }
+
+ //................................................................
+ void lcl_updateScrollbar( Window& _rParent, ScrollBar*& _rpBar,
+ ScrollbarVisibility _eVisibility, long _nVisibleUnits,
+ long _nPosition, long _nLineSize, long _nRange,
+ bool _bHorizontal, const Link& _rScrollHandler )
+ {
+ // do we need the scrollbar?
+ bool bNeedBar = lcl_determineScrollbarNeed( _eVisibility, _nVisibleUnits, _nRange );
+
+ // do we currently have the scrollbar?
+ bool bHaveBar = _rpBar != NULL;
+
+ // do we need to correct the scrollbar visibility?
+ if ( bHaveBar && !bNeedBar )
+ {
+ DELETEZ( _rpBar );
+ }
+ else if ( !bHaveBar && bNeedBar )
+ {
+ _rpBar = new ScrollBar(
+ &_rParent,
+ WB_DRAG | ( _bHorizontal ? WB_HSCROLL : WB_VSCROLL )
+ );
+ _rpBar->SetScrollHdl( _rScrollHandler );
+ // get some speed into the scrolling ....
+ lcl_setButtonRepeat( *_rpBar, 0 );
+ }
+
+ if ( _rpBar )
+ {
+ _rpBar->SetRange( Range( 0, _nRange ) );
+ _rpBar->SetVisibleSize( _nVisibleUnits );
+ _rpBar->SetPageSize( _nVisibleUnits );
+ _rpBar->SetLineSize( _nLineSize );
+ _rpBar->SetThumbPos( _nPosition );
+ _rpBar->Show();
+ }
+ }
+
+ //................................................................
+ /** returns the number of rows fitting into the given range,
+ for the given row height. Partially fitting rows are counted, too, if the
+ respective parameter says so.
+ */
+ TableSize lcl_getRowsFittingInto( long _nOverallHeight, long _nRowHeightPixel, bool _bAcceptPartialRow = false )
+ {
+ return _bAcceptPartialRow
+ ? ( _nOverallHeight + ( _nRowHeightPixel - 1 ) ) / _nRowHeightPixel
+ : _nOverallHeight / _nRowHeightPixel;
+ }
+
+ //................................................................
+ /** returns the number of columns fitting into the given area,
+ with the first visible column as given. Partially fitting columns are counted, too,
+ if the respective parameter says so.
+ */
+ TableSize lcl_getColumnsVisibleWithin( const Rectangle& _rArea, ColPos _nFirstVisibleColumn,
+ const TableControl_Impl& _rControl, bool _bAcceptPartialRow )
+ {
+ TableSize visibleColumns = 0;
+ TableColumnGeometry aColumn( _rControl, _rArea, _nFirstVisibleColumn );
+ while ( aColumn.isValid() )
+ {
+ if ( !_bAcceptPartialRow )
+ if ( aColumn.getRect().Right() > _rArea.Right() )
+ // this column is only partially visible, and this is not allowed
+ break;
+
+ aColumn.moveRight();
+ ++visibleColumns;
+ }
+ return visibleColumns;
+ }
+
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_updateScrollbars()
+ {
+ TempHideCursor aHideCursor( *this );
+
+ // the width/height of a scrollbar, needed several times below
+ long nScrollbarMetrics = m_rAntiImpl.GetSettings().GetStyleSettings().GetScrollBarSize();
+ if ( m_rAntiImpl.IsZoom() )
+ nScrollbarMetrics = (long)( nScrollbarMetrics * (double)m_rAntiImpl.GetZoom() );
+
+ // determine the playground for the data cells (excluding headers)
+ // TODO: what if the control is smaller than needed for the headers/scrollbars?
+ Rectangle aDataCellPlayground( Point( 0, 0 ), m_rAntiImpl.GetOutputSizePixel() );
+ aDataCellPlayground.Left() = m_nRowHeaderWidthPixel;
+ aDataCellPlayground.Top() = m_nColHeaderHeightPixel;
+
+ // do we need a vertical scrollbar?
+ bool bFirstRoundVScrollNeed = false;
+ if ( lcl_determineScrollbarNeed(
+ m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(), m_nRowHeightPixel*m_nRowCount),
+ lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ),
+ m_nRowCount ) )
+ {
+ aDataCellPlayground.Right() -= nScrollbarMetrics;
+ bFirstRoundVScrollNeed = true;
+ }
+ // do we need a horizontal scrollbar?
+ if ( lcl_determineScrollbarNeed(
+ m_pModel->getHorizontalScrollbarVisibility(aDataCellPlayground.GetWidth(), m_aAccColumnWidthsPixel[m_nColumnCount-1]),
+ lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false ),
+ m_nColumnCount ) )
+ {
+ aDataCellPlayground.Bottom() -= nScrollbarMetrics;
+
+ // now that we just found that we need a horizontal scrollbar,
+ // the need for a vertical one may have changed, since the horizontal
+ // SB might just occupy enough space so that not all rows do fit
+ // anymore
+ if ( !bFirstRoundVScrollNeed && lcl_determineScrollbarNeed(
+ m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(),m_nRowHeightPixel*m_nRowCount),
+ lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ),
+ m_nRowCount ) )
+ {
+ aDataCellPlayground.Right() -= nScrollbarMetrics;
+ }
+ }
+ else
+ {
+ Size regionWithoutHeader = m_rAntiImpl.PixelToLogic(Size(aDataCellPlayground.Right() - aDataCellPlayground.Left(),0),MAP_100TH_MM);
+ TableMetrics nColWidth = regionWithoutHeader.Width()/m_nColumnCount;
+ for ( ColPos col = 0; col < m_nColumnCount; ++col )
+ m_pModel->getColumnModel(col)->setWidth(nColWidth);
+ m_rAntiImpl.SetModel(m_pModel);
+ }
+
+ // create or destroy the vertical scrollbar, as needed
+ lcl_updateScrollbar(
+ m_rAntiImpl,
+ m_pVScroll,
+ m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(),m_nRowHeightPixel*m_nRowCount),
+ lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ),
+ // visible units
+ m_nTopRow, // current position
+ 1, // line size
+ m_nRowCount, // range
+ false, // vertical
+ LINK( this, TableControl_Impl, OnScroll ) // scroll handler
+ );
+ // position it
+ if ( m_pVScroll )
+ {
+ Rectangle aScrollbarArea(
+ Point( aDataCellPlayground.Right() + 1, 0 ),
+ Size( nScrollbarMetrics, aDataCellPlayground.Bottom() + 1 )
+ );
+ m_pVScroll->SetPosSizePixel(
+ aScrollbarArea.TopLeft(), aScrollbarArea.GetSize() );
+ }
+
+ // create or destroy the horizontal scrollbar, as needed
+ lcl_updateScrollbar(
+ m_rAntiImpl,
+ m_pHScroll,
+ m_pModel->getHorizontalScrollbarVisibility(aDataCellPlayground.GetWidth(), m_aAccColumnWidthsPixel[m_nColumnCount-1]),
+ lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false ),
+ // visible units
+ m_nLeftColumn, // current position
+ 1, // line size
+ m_nColumnCount, // range
+ true, // horizontal
+ LINK( this, TableControl_Impl, OnScroll ) // scroll handler
+ );
+ // position it
+ if ( m_pHScroll )
+ {
+ Rectangle aScrollbarArea(
+ Point( 0, aDataCellPlayground.Bottom() + 1 ),
+ Size( aDataCellPlayground.Right() + 1, nScrollbarMetrics )
+ );
+ m_pHScroll->SetPosSizePixel(
+ aScrollbarArea.TopLeft(), aScrollbarArea.GetSize() );
+ }
+
+ // the corner window connecting the two scrollbars in the lower right corner
+ bool bHaveScrollCorner = NULL != m_pScrollCorner;
+ bool bNeedScrollCorner = ( NULL != m_pHScroll ) && ( NULL != m_pVScroll );
+ if ( bHaveScrollCorner && !bNeedScrollCorner )
+ {
+ DELETEZ( m_pScrollCorner );
+ }
+ else if ( !bHaveScrollCorner && bNeedScrollCorner )
+ {
+ m_pScrollCorner = new ScrollBarBox( &m_rAntiImpl );
+ m_pScrollCorner->SetSizePixel( Size( nScrollbarMetrics, nScrollbarMetrics ) );
+ m_pScrollCorner->SetPosPixel( Point( aDataCellPlayground.Right() + 1, aDataCellPlayground.Bottom() + 1 ) );
+ m_pScrollCorner->Show();
+ }
+
+ // resize the data window
+ m_pDataWindow->SetSizePixel( Size(
+ aDataCellPlayground.GetWidth() + m_nRowHeaderWidthPixel,
+ aDataCellPlayground.GetHeight() + m_nColHeaderHeightPixel
+ ) );
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::onResize()
+ {
+ DBG_CHECK_ME();
+ impl_ni_updateScrollbars();
+ //Rectangle aAllCells;
+ // impl_getAllVisibleCellsArea( aAllCells );
+ //m_pSelEngine->SetVisibleArea(aAllCells);
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::doPaintContent( const Rectangle& _rUpdateRect )
+ {
+ DBG_CHECK_ME();
+
+ if ( !getModel() )
+ return;
+
+ PTableRenderer pRenderer = getModel()->getRenderer();
+ DBG_ASSERT( !!pRenderer, "TableDataWindow::Paint: invalid renderer!" );
+ if ( !pRenderer )
+ return;
+
+ // our current style settings, to be passed to the renderer
+ const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings();
+
+ // the area occupied by all (at least partially) visible cells, including
+ // headers
+ Rectangle aAllCellsWithHeaders;
+ impl_getAllVisibleCellsArea( aAllCellsWithHeaders );
+
+ m_nRowCount = m_pModel->getRowCount();
+ // ............................
+ // draw the header column area
+ if ( getModel()->hasColumnHeaders() )
+ {
+ TableRowGeometry aHeaderRow( *this, Rectangle( Point( 0, 0 ),
+ aAllCellsWithHeaders.BottomRight() ), ROW_COL_HEADERS );
+ pRenderer->PaintHeaderArea(
+ *m_pDataWindow, aHeaderRow.getRect(), true, false, rStyle
+ );
+ // Note that strictly, aHeaderRow.getRect() also contains the intersection between column
+ // and row header area. However, below we go to paint this intersection, again,
+ // so this hopefully doesn't hurt if we already paint it here.
+
+ for ( TableCellGeometry aCell( aHeaderRow, m_nLeftColumn );
+ aCell.isValid();
+ aCell.moveRight()
+ )
+ {
+ if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() )
+ continue;
+
+ bool isActiveColumn = ( aCell.getColumn() == getCurColumn() );
+ bool isSelectedColumn = false;
+ pRenderer->PaintColumnHeader( aCell.getColumn(), isActiveColumn, isSelectedColumn,
+ *m_pDataWindow, aCell.getRect(), rStyle );
+ }
+ }
+
+ // the area occupied by the row header, if any
+ Rectangle aRowHeaderArea;
+ if ( getModel()->hasRowHeaders() )
+ {
+ aRowHeaderArea = aAllCellsWithHeaders;
+ aRowHeaderArea.Right() = m_nRowHeaderWidthPixel - 1;
+ aRowHeaderArea.Bottom() = m_nRowHeightPixel * m_nRowCount + m_nColHeaderHeightPixel - 1;
+ pRenderer->PaintHeaderArea(
+ *m_pDataWindow, aRowHeaderArea, false, true, rStyle
+ );
+ // Note that strictly, aRowHeaderArea also contains the intersection between column
+ // and row header area. However, below we go to paint this intersection, again,
+ // so this hopefully doesn't hurt if we already paint it here.
+
+ if ( getModel()->hasColumnHeaders() )
+ {
+ TableCellGeometry aIntersection( *this, Rectangle( Point( 0, 0 ),
+ aAllCellsWithHeaders.BottomRight() ), COL_ROW_HEADERS, ROW_COL_HEADERS );
+ pRenderer->PaintHeaderArea(
+ *m_pDataWindow, aIntersection.getRect(), true, true, rStyle
+ );
+ }
+ }
+
+ // ............................
+ // draw the table content row by row
+
+ TableSize colCount = getModel()->getColumnCount();
+
+ // paint all rows
+ Rectangle aAllDataCellsArea;
+ impl_getAllVisibleDataCellArea( aAllDataCellsArea );
+
+ //get the vector, which contains row vectors, each containing the data for the cells in this row
+ std::vector<std::vector<rtl::OUString> > aCellContent = m_pModel->getCellContent();
+ //if the vector is empty, fill it with empty data, so the table can be painted
+ if(aCellContent.empty())
+ {
+ std::vector<rtl::OUString> emptyCells;
+ while(m_nRowCount!=0)
+ {
+ aCellContent.push_back(emptyCells);
+ --m_nRowCount;
+ }
+ }
+ std::vector<std::vector<rtl::OUString> >::iterator it = aCellContent.begin()+m_nTopRow;
+ //get the vector, which contains the row header titles
+ std::vector<rtl::OUString> aRowHeaderContent;
+ ::std::vector<rtl::OUString>::iterator itRowName = aRowHeaderContent.begin();
+
+ if(m_pModel->hasRowHeaders())
+ {
+ aRowHeaderContent = m_pModel->getRowHeaderName();
+ //if the vector is empty, fill it with empty strings, so the table can be painted
+ if(aRowHeaderContent.empty())
+ {
+ while(m_nRowCount!=0)
+ {
+ aRowHeaderContent.push_back(rtl::OUString::createFromAscii(""));
+ --m_nRowCount;
+ }
+ }
+ itRowName = aRowHeaderContent.begin()+m_nTopRow;
+ }
+ for ( TableRowGeometry aRowIterator( *this, aAllCellsWithHeaders, getTopRow() );
+ aRowIterator.isValid();
+ aRowIterator.moveDown() )
+ {
+ if ( _rUpdateRect.GetIntersection( aRowIterator.getRect() ).IsEmpty() )
+ {
+ if(m_pModel->hasRowHeaders())
+ ++itRowName;
+ ++it;
+ continue;
+ }
+ bool isActiveRow = ( aRowIterator.getRow() == getCurRow() );
+ bool isSelectedRow = false;
+ if(!m_nRowSelected.empty())
+ {
+ for(std::vector<RowPos>::iterator itSel=m_nRowSelected.begin();
+ itSel!=m_nRowSelected.end();++itSel)
+ {
+ if(*itSel == aRowIterator.getRow())
+ isSelectedRow = true;
+ }
+ }
+ std::vector<rtl::OUString> aCellData;
+ if(it != aCellContent.end())
+ {
+ aCellData = *it;
+ ++it;
+ }
+ ::std::vector<rtl::OUString>::iterator iter = aCellData.begin()+m_nLeftColumn;
+
+ // give the redenderer a chance to prepare the row
+ pRenderer->PrepareRow( aRowIterator.getRow(), isActiveRow, isSelectedRow,
+ *m_pDataWindow, aRowIterator.getRect().GetIntersection( aAllDataCellsArea ), rStyle );
+
+ // paint the row header
+ if ( m_pModel->hasRowHeaders() )
+ {
+ rtl::OUString rowHeaderName;
+ if(itRowName != aRowHeaderContent.end())
+ {
+ rowHeaderName = *itRowName;
+ ++itRowName;
+ }
+ Rectangle aCurrentRowHeader( aRowHeaderArea.GetIntersection( aRowIterator.getRect() ) );
+ pRenderer->PaintRowHeader( isActiveRow, isSelectedRow, *m_pDataWindow, aCurrentRowHeader,
+ rStyle, rowHeaderName );
+ }
+ if ( !colCount )
+ continue;
+
+ // paint all cells in this row
+ for ( TableCellGeometry aCell( aRowIterator, m_nLeftColumn );
+ aCell.isValid();
+ aCell.moveRight()
+ )
+ {
+ // if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() )
+ // continue;
+
+ //bool isActiveCell = isActiveRow && ( aCell.getColumn() == getCurColumn() );
+ bool isSelectedColumn = false;
+ rtl::OUString cellData;
+ if(aCellData.empty())
+ cellData=rtl::OUString::createFromAscii("");
+ else if(iter != aCellData.end())
+ {
+ cellData = *iter;
+ ++iter;
+ }
+ pRenderer->PaintCell( aCell.getColumn(), isSelectedRow || isSelectedColumn, isActiveRow,
+ *m_pDataWindow, aCell.getRect(), rStyle, cellData );
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::hideCursor()
+ {
+ DBG_CHECK_ME();
+
+ if ( ++m_nCursorHidden == 1 )
+ impl_ni_doSwitchCursor( false );
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::showCursor()
+ {
+ DBG_CHECK_ME();
+
+ DBG_ASSERT( m_nCursorHidden > 0, "TableControl_Impl::showCursor: cursor not hidden!" );
+ if ( --m_nCursorHidden == 0 )
+ impl_ni_doSwitchCursor( true );
+ }
+
+ //--------------------------------------------------------------------
+ bool TableControl_Impl::dispatchAction( TableControlAction _eAction )
+ {
+ DBG_CHECK_ME();
+
+ bool bSuccess = false;
+ Rectangle rCells;
+ switch ( _eAction )
+ {
+ case cursorDown:
+ if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ //if other rows already selected, deselect them
+ if(m_nRowSelected.size()>0)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ }
+ if(m_nCurRow < m_nRowCount-1)
+ {
+ ++m_nCurRow;
+ m_nRowSelected.push_back(m_nCurRow);
+ }
+ else
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ ensureVisible(m_nCurColumn,m_nCurRow,false);
+ bSuccess = true;
+ }
+ else
+ {
+ if ( m_nCurRow < m_nRowCount - 1 )
+ bSuccess = goTo( m_nCurColumn, m_nCurRow + 1 );
+ }
+ break;
+
+ case cursorUp:
+ if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ if(m_nRowSelected.size()>0)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ }
+ if(m_nCurRow>0)
+ {
+ --m_nCurRow;
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ ensureVisible(m_nCurColumn,m_nCurRow,false);
+ bSuccess = true;
+ }
+ else
+ {
+ if ( m_nCurRow > 0 )
+ bSuccess = goTo( m_nCurColumn, m_nCurRow - 1 );
+ }
+ break;
+ case cursorLeft:
+ if ( m_nCurColumn > 0 )
+ bSuccess = goTo( m_nCurColumn - 1, m_nCurRow );
+ else
+ if ( ( m_nCurColumn == 0) && ( m_nCurRow > 0 ) )
+ bSuccess = goTo( m_nColumnCount - 1, m_nCurRow - 1 );
+ break;
+
+ case cursorRight:
+ if ( m_nCurColumn < m_nColumnCount - 1 )
+ bSuccess = goTo( m_nCurColumn + 1, m_nCurRow );
+ else
+ if ( ( m_nCurColumn == m_nColumnCount - 1 ) && ( m_nCurRow < m_nRowCount - 1 ) )
+ bSuccess = goTo( 0, m_nCurRow + 1 );
+ break;
+
+ case cursorToLineStart:
+ bSuccess = goTo( 0, m_nCurRow );
+ break;
+
+ case cursorToLineEnd:
+ bSuccess = goTo( m_nColumnCount - 1, m_nCurRow );
+ break;
+
+ case cursorToFirstLine:
+ bSuccess = goTo( m_nCurColumn, 0 );
+ break;
+
+ case cursorToLastLine:
+ bSuccess = goTo( m_nCurColumn, m_nRowCount - 1 );
+ break;
+
+ case cursorPageUp:
+ {
+ RowPos nNewRow = ::std::max( (RowPos)0, m_nCurRow - impl_getVisibleRows( false ) );
+ bSuccess = goTo( m_nCurColumn, nNewRow );
+ }
+ break;
+
+ case cursorPageDown:
+ {
+ RowPos nNewRow = ::std::min( m_nRowCount - 1, m_nCurRow + impl_getVisibleRows( false ) );
+ bSuccess = goTo( m_nCurColumn, nNewRow );
+ }
+ break;
+
+ case cursorTopLeft:
+ bSuccess = goTo( 0, 0 );
+ break;
+
+ case cursorBottomRight:
+ bSuccess = goTo( m_nColumnCount - 1, m_nRowCount - 1 );
+ break;
+
+ case cursorSelectRow:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ return bSuccess = false;
+ //pos is the position of the current row in the vector of selected rows, if current row is selected
+ int pos = getRowSelectedNumber(m_nRowSelected, m_nCurRow);
+ //if current row is selected, it should be deselected, when ALT+SPACE are pressed
+ if(pos>-1)
+ m_nRowSelected.erase(m_nRowSelected.begin()+pos);
+ //else select the row->put it in the vector
+ else
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ bSuccess = true;
+ }
+ break;
+ case cursorSelectRowUp:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ return bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ //if there are other selected rows, deselect them
+ return false;
+ }
+ else
+ {
+ //there are other selected rows
+ if(m_nRowSelected.size()>0)
+ {
+ //the anchor wasn't set -> a region is not selected, that's why clear all selection
+ //and select the current row
+ if(m_nAnchor==-1)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ else
+ {
+ //a region is already selected, prevRow is last selected row and the row above - nextRow - should be selected
+ int prevRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow);
+ int nextRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow-1);
+ if(prevRow>-1)
+ {
+ //if m_nCurRow isn't the upper one, can move up, otherwise not
+ if(m_nCurRow>0)
+ m_nCurRow--;
+ else
+ return bSuccess = true;
+ //if nextRow already selected, deselect it, otherwise select it
+ if(m_nRowSelected[nextRow] == m_nCurRow)
+ {
+ m_nRowSelected.erase(m_nRowSelected.begin()+prevRow);
+ invalidateSelectedRow(m_nCurRow+1, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ }
+ }
+ else
+ {
+ //if nothing is selected and the current row isn't the upper one
+ //select the current and one row above
+ //otherwise select only the upper row
+ if(m_nCurRow>0)
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ m_nCurRow--;
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRegion(m_nCurRow+1, m_nCurRow, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ m_pSelEngine->SetAnchor(TRUE);
+ m_nAnchor = m_nCurRow;
+ ensureVisible(m_nCurColumn, m_nCurRow, false);
+ bSuccess = true;
+ }
+ }
+ break;
+ case cursorSelectRowDown:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ bSuccess = false;
+ }
+ else
+ {
+ if(m_nRowSelected.size()>0)
+ {
+ //the anchor wasn't set -> a region is not selected, that's why clear all selection
+ //and select the current row
+ if(m_nAnchor==-1)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ else
+ {
+ //a region is already selected, prevRow is last selected row and the row beneath - nextRow - should be selected
+ int prevRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow);
+ int nextRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow+1);
+ if(prevRow>-1)
+ {
+ //if m_nCurRow isn't the last one, can move down, otherwise not
+ if(m_nCurRow<m_nRowCount)
+ m_nCurRow++;
+ else
+ return bSuccess = true;
+ //if net row already selected, deselect it, otherwise select it
+ if(m_nRowSelected[nextRow] == m_nCurRow)
+ {
+ m_nRowSelected.erase(m_nRowSelected.begin()+prevRow);
+ invalidateSelectedRow(m_nCurRow-1, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ }
+ }
+ else
+ {
+ //there wasn't any selection, select curennt and row beneath, otherwise onlyrow beneath
+ if(m_nCurRow<m_nRowCount-1)
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ m_nCurRow++;
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRegion(m_nCurRow-1, m_nCurRow, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ m_pSelEngine->SetAnchor(TRUE);
+ m_nAnchor = m_nCurRow;
+ ensureVisible(m_nCurColumn, m_nCurRow, false);
+ bSuccess = true;
+ }
+ }
+ break;
+ case cursorSelectRowAreaTop:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ bSuccess = false;
+ else
+ {
+ //select the region between the current and the upper row
+ RowPos iter = m_nCurRow;
+ invalidateSelectedRegion(m_nCurRow, 0, rCells);
+ //put the rows in vector
+ while(iter>=0)
+ {
+ if(!isRowSelected(m_nRowSelected, iter))
+ m_nRowSelected.push_back(iter);
+ --iter;
+ }
+ m_nCurRow = 0;
+ m_nAnchor = m_nCurRow;
+ m_pSelEngine->SetAnchor(TRUE);
+ ensureVisible(m_nCurColumn, 0, false);
+ bSuccess = true;
+ }
+ }
+ break;
+ case cursorSelectRowAreaBottom:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ return bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ return bSuccess = false;
+ //select the region between the current and the last row
+ RowPos iter = m_nCurRow;
+ invalidateSelectedRegion(m_nCurRow, m_nRowCount-1, rCells);
+ //put the rows in the vector
+ while(iter<=m_nRowCount)
+ {
+ if(!isRowSelected(m_nRowSelected, iter))
+ m_nRowSelected.push_back(iter);
+ ++iter;
+ }
+ m_nCurRow = m_nRowCount-1;
+ m_nAnchor = m_nCurRow;
+ m_pSelEngine->SetAnchor(TRUE);
+ ensureVisible(m_nCurColumn, m_nRowCount, false);
+ bSuccess = true;
+ }
+ break;
+ default:
+ DBG_ERROR( "TableControl_Impl::dispatchAction: unsupported action!" );
+ }
+ return bSuccess;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_doSwitchCursor( bool _bShow )
+ {
+ PTableRenderer pRenderer = !!m_pModel ? m_pModel->getRenderer() : PTableRenderer();
+ if ( !!pRenderer )
+ {
+ Rectangle aCellRect;
+ impl_getCellRect( m_nCurColumn, m_nCurRow, aCellRect );
+
+ // const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings();
+ if ( _bShow )
+ {
+ pRenderer->ShowCellCursor( *m_pDataWindow, aCellRect);
+ }
+ else
+ {
+ pRenderer->HideCellCursor( *m_pDataWindow, aCellRect);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const
+ {
+ DBG_CHECK_ME();
+
+ if ( !m_pModel
+ || ( COL_INVALID == _nColumn )
+ || ( ROW_INVALID == _nRow )
+ )
+ {
+ _rCellRect.SetEmpty();
+ return;
+ }
+
+ DBG_ASSERT( ( _nColumn >= 0 ) && ( _nColumn < m_pModel->getColumnCount() ),
+ "TableControl_Impl::impl_getCellRect: invalid column index!" );
+ DBG_ASSERT( ( _nRow >= 0 ) && ( _nRow < m_pModel->getRowCount() ),
+ "TableControl_Impl::impl_getCellRect: invalid row index!" );
+
+ Rectangle aAllCells;
+ impl_getAllVisibleCellsArea( aAllCells );
+
+ TableCellGeometry aCell( *this, aAllCells, _nColumn, _nRow );
+ _rCellRect = aCell.getRect();
+ }
+ //-------------------------------------------------------------------------------
+ RowPos TableControl_Impl::getCurrentRow(const Point& rPoint)
+ {
+ DBG_CHECK_ME();
+ Rectangle rCellRect;
+ RowPos newRowPos = -2;//-1 is HeaderRow
+ ColPos newColPos = 0;
+ //To Do: when only row position needed, the second loop isn't necessary, Please proove this!!!
+ for(int i=0;i<m_nRowCount;i++)
+ {
+ for(int j=-1;j<m_nColumnCount;j++)
+ {
+ impl_getCellRect(j,i,rCellRect);
+ if((rPoint.X() >= rCellRect.Left() && rPoint.X() <= rCellRect.Right()) && rPoint.Y() >= rCellRect.Top() && rPoint.Y() <= rCellRect.Bottom())
+ {
+ newRowPos = i;
+ newColPos = j;
+ if(newColPos == -1)
+ m_nCurColumn = 0;
+ else
+ m_nCurColumn = newColPos;
+ return newRowPos;
+ }
+ }
+ }
+ return newRowPos;
+ }
+ //-------------------------------------------------------------------------------
+ void TableControl_Impl::setCursorAtCurrentCell(const Point& rPoint)
+ {
+ DBG_CHECK_ME();
+ hideCursor();
+ Rectangle rCellRect;
+ RowPos newRowPos = -2;//-1 is HeaderRow
+ ColPos newColPos = 0;
+ //To Do: when only row position needed, the second loop isn't necessary, Please proove this!!!
+ for(int i=0;i<m_nRowCount;i++)
+ {
+ for(int j=-1;j<m_nColumnCount;j++)
+ {
+ impl_getCellRect(j,i,rCellRect);
+ if((rPoint.X() >= rCellRect.Left() && rPoint.X() <= rCellRect.Right()) && rPoint.Y() >= rCellRect.Top() && rPoint.Y() <= rCellRect.Bottom())
+ {
+ newRowPos = i;
+ m_nCurRow = newRowPos;
+ newColPos = j;
+ if(newColPos == -1)
+ m_nCurColumn = 0;
+ else
+ m_nCurColumn = newColPos;
+ }
+ }
+ }
+ showCursor();
+ }
+
+ //-------------------------------------------------------------------------------
+ void TableControl_Impl::invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect)
+ {
+ DBG_CHECK_ME();
+ Rectangle aAllCells;
+ //get the visible area of the table control and set the Left and right border of the region to be repainted
+ impl_getAllVisibleCellsArea( aAllCells );
+ _rCellRect.Left() = aAllCells.Left();
+ _rCellRect.Right() = aAllCells.Right();
+ Rectangle rCells;
+ //if only one row is selected
+ if(_nPrevRow == _nCurRow)
+ {
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ _rCellRect.Bottom()=rCells.Bottom();
+ }
+ //if the region is above the current row
+ else if(_nPrevRow < _nCurRow )
+ {
+ impl_getCellRect(m_nCurColumn,_nPrevRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Bottom()=rCells.Bottom();
+ }
+ //if the region is beneath the current row
+ else
+ {
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ impl_getCellRect(m_nCurColumn,_nPrevRow,rCells);
+ _rCellRect.Bottom()=rCells.Bottom();
+ }
+ m_pDataWindow->Invalidate(_rCellRect);
+ }
+
+ //-------------------------------------------------------------------------------
+ //To Do: not really needed, because in method above one row can be invalidate. Please Prove this!!!
+ void TableControl_Impl::invalidateSelectedRow(RowPos _nCurRow, Rectangle& _rCellRect)
+ {
+ DBG_CHECK_ME();
+ Rectangle aAllCells;
+ impl_getAllVisibleCellsArea( aAllCells );
+ _rCellRect.Left() = aAllCells.Left();
+ _rCellRect.Right() = aAllCells.Right();
+ Rectangle rCells;
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ _rCellRect.Bottom()=rCells.Bottom();
+ m_pDataWindow->Invalidate(_rCellRect);
+ }
+ //-------------------------------------------------------------------------------
+ //this method is to be called, when a new row is added
+ void TableControl_Impl::invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect)
+ {
+ //DBG_CHECK_ME();
+ TempHideCursor aHideCursor( *this );
+ impl_getAllVisibleCellsArea( _rCellRect );
+ TableRowGeometry _rRow( *this, _rCellRect, _nRowPos);
+ impl_ni_updateScrollbars();
+ m_pDataWindow->Invalidate(_rRow.getRect());
+ }
+
+ //-------------------------------------------------------------------------------
+ std::vector<RowPos> TableControl_Impl::getSelectedRows()
+ {
+ return m_nRowSelected;
+ }
+
+ void TableControl_Impl::removeSelectedRow(RowPos _nRowPos)
+ {
+ int i =0;
+ //if the row is selected, remove it from the selection vector
+ if(isRowSelected(m_nRowSelected, _nRowPos))
+ {
+ if(m_nRowSelected.size()>1)
+ m_nRowSelected.erase(m_nRowSelected.begin()+_nRowPos);
+ else
+ m_nRowSelected.clear();
+ }
+ //after removing a row, row positions must be updated, so selected rows could stay selected
+ if(m_nRowSelected.size()>1)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();it!=m_nRowSelected.end();++it)
+ {
+ if(*it > _nRowPos)
+ m_nRowSelected[i]=*it-1;
+ ++i;
+ }
+ }
+ if(_nRowPos == 0)
+ m_nCurRow = 0;
+ else
+ m_nCurRow = _nRowPos-1;
+ }
+ //-------------------------------------------------------------------------------
+ void TableControl_Impl::invalidateRows(RowPos _nRowStart, Rectangle& _rCellRect)
+ {
+ //DBG_CHECK_ME();
+ (void)_nRowStart;
+ (void)_rCellRect;
+ /*TempHideCursor aHideCursor(*this);
+ Rectangle aAllCells;
+ impl_getAllVisibleCellsArea( aAllCells );
+ TableRowGeometry _rRow( *this, aAllCells, _nRowStart);
+ _rCellRect = _rRow.getRect();
+ Rectangle rCells1;
+ impl_getCellRect(m_nCurColumn,m_nRowCount,rCells1);
+ _rCellRect.Bottom() = rCells1.Bottom();*/
+ /*if(_nRowStart != _nRowEnd)
+ {
+ TableRowGeometry _rRow( *this, aAllCells, _nRowEnd);
+ _rCellRect.Bottom() = _rRow.getRect().Bottom();
+ }
+ */
+ //_rCellRect.Right() = aAllCells.Right();
+ //_rCellRect.Left() = aAllCells.Left();
+ //Rectangle rCells1;
+ //impl_getCellRect(m_nCurColumn,_nRowStart,rCells1);
+ //_rCellRect.Top()=rCells1.Top();
+ //Rectangle rCells2;
+ //impl_getCellRect(m_nCurColumn,_nRowEnd,rCells2);
+ //_rCellRect.Bottom()=rCells2.Bottom();
+ impl_ni_updateScrollbars();
+ //m_pDataWindow->Invalidate(_rCellRect);
+ m_pDataWindow->Invalidate();
+ }
+
+
+ //-------------------------------------------------------------------------------
+ bool TableControl_Impl::isClickInVisibleArea(const Point& rPoint)
+ {
+ DBG_CHECK_ME();
+ long nScrollbarMetrics = m_rAntiImpl.GetSettings().GetStyleSettings().GetScrollBarSize();
+ //clickable area is in the visible table control area without the scrollbars
+ Rectangle aDataCellPlayground( Point( 0, 0 ), m_rAntiImpl.GetOutputSizePixel() );
+ aDataCellPlayground.Top() = m_nColHeaderHeightPixel;
+ aDataCellPlayground.Right() -= nScrollbarMetrics;
+ aDataCellPlayground.Bottom() -= nScrollbarMetrics;
+ if((rPoint.X() >= aDataCellPlayground.Left() && rPoint.X() <= aDataCellPlayground.Right()) && rPoint.Y() >= aDataCellPlayground.Top() && rPoint.Y() <= aDataCellPlayground.Bottom())
+ {
+ return true;
+ }
+ else
+ return false;
+ }
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_getVisibleRows( bool _bAcceptPartialRow ) const
+ {
+ DBG_CHECK_ME();
+
+ DBG_ASSERT( m_pDataWindow, "TableControl_Impl::impl_getVisibleRows: no data window!" );
+
+ return lcl_getRowsFittingInto(
+ m_pDataWindow->GetOutputSizePixel().Height() - m_nColHeaderHeightPixel,
+ m_nRowHeightPixel,
+ _bAcceptPartialRow
+ );
+ }
+
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_getVisibleColumns( bool _bAcceptPartialRow ) const
+ {
+ DBG_CHECK_ME();
+
+ DBG_ASSERT( m_pDataWindow, "TableControl_Impl::impl_getVisibleColumns: no data window!" );
+
+ return lcl_getColumnsVisibleWithin(
+ Rectangle( Point( 0, 0 ), m_pDataWindow->GetOutputSizePixel() ),
+ m_nLeftColumn,
+ *this,
+ _bAcceptPartialRow
+ );
+ }
+
+ //--------------------------------------------------------------------
+ bool TableControl_Impl::goTo( ColPos _nColumn, RowPos _nRow )
+ {
+ DBG_CHECK_ME();
+
+ // TODO: give veto listeners a chance
+
+ if ( ( _nColumn < -1 ) || ( _nColumn >= m_nColumnCount )
+ || ( _nRow < -1 ) || ( _nRow >= m_nRowCount )
+ )
+ return false;
+
+ TempHideCursor aHideCursor( *this );
+ m_nCurColumn = _nColumn;
+ m_nCurRow = _nRow;
+
+ // ensure that the new cell is visible
+ ensureVisible( m_nCurColumn, m_nCurRow, false );
+
+ // TODO: invalidate all and new column/row header, if present, to enforce
+ // re-painting them
+ //if(!m_nRowSelected.empty())
+ //{
+ // Rectangle rCells;
+ // for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ // it!=m_nRowSelected.end();++it)
+ // {
+ // invalidateSelectedRow(*it,rCells);
+ // }
+ // m_nRowSelected.clear();
+ //}
+ // TODO: notify listeners about new position
+ return true;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility )
+ {
+ DBG_CHECK_ME();
+ DBG_ASSERT( ( _nColumn >= 0 ) && ( _nColumn < m_nColumnCount )
+ && ( _nRow >= 0 ) && ( _nRow < m_nRowCount ),
+ "TableControl_Impl::ensureVisible: invalid coordinates!" );
+
+ TempHideCursor aHideCursor( *this );
+
+ if ( _nColumn < m_nLeftColumn )
+ impl_ni_ScrollColumns( _nColumn - m_nLeftColumn );
+ else
+ {
+ TableSize nVisibleColumns = impl_getVisibleColumns( _bAcceptPartialVisibility );
+ if ( _nColumn > m_nLeftColumn + nVisibleColumns - 1 )
+ {
+ impl_ni_ScrollColumns( _nColumn - ( m_nLeftColumn + nVisibleColumns - 1 ) );
+ // TODO: since not all columns have the same width, this might in theory result
+ // in the column still not being visible.
+ }
+ }
+
+ if ( _nRow < m_nTopRow )
+ impl_ni_ScrollRows( _nRow - m_nTopRow );
+ else
+ {
+ TableSize nVisibleRows = impl_getVisibleRows( _bAcceptPartialVisibility );
+ if ( _nRow > m_nTopRow + nVisibleRows - 1 )
+ impl_ni_ScrollRows( _nRow - ( m_nTopRow + nVisibleRows - 1 ) );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_ni_ScrollRows( TableSize _nRowDelta )
+ {
+ // compute new top row
+ RowPos nNewTopRow =
+ ::std::max(
+ ::std::min( (RowPos)( m_nTopRow + _nRowDelta ), (RowPos)( m_nRowCount - 1 ) ),
+ (RowPos)0
+ );
+
+ RowPos nOldTopRow = m_nTopRow;
+ m_nTopRow = nNewTopRow;
+
+ // if updates are enabled currently, scroll the viewport
+ if ( m_rAntiImpl.IsUpdateMode() && ( m_nTopRow != nOldTopRow ) )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ TempHideCursor aHideCursor( *this );
+ // TODO: call a onStartScroll at our listener (or better an own onStartScroll,
+ // which hides the cursor and then calls the listener)
+ // Same for onEndScroll
+
+ // scroll the view port, if possible
+ long nPixelDelta = m_nRowHeightPixel * ( m_nTopRow - nOldTopRow );
+
+ Rectangle aDataArea( Point( 0, m_nColHeaderHeightPixel ), m_pDataWindow->GetOutputSizePixel() );
+
+ if ( m_pDataWindow->GetBackground().IsScrollable()
+ && abs( nPixelDelta ) < aDataArea.GetHeight()
+ )
+ {
+ m_pDataWindow->Scroll( 0, (long)-nPixelDelta, aDataArea, SCROLL_CLIP | SCROLL_UPDATE );
+ }
+ else
+ m_pDataWindow->Invalidate( INVALIDATE_UPDATE );
+
+ // update the position at the vertical scrollbar
+ m_pVScroll->SetThumbPos( m_nTopRow );
+ }
+
+ return (TableSize)( m_nTopRow - nOldTopRow );
+ }
+
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_ni_ScrollColumns( TableSize _nColumnDelta )
+ {
+ // compute new left column
+ ColPos nNewLeftColumn =
+ ::std::max(
+ ::std::min( (ColPos)( m_nLeftColumn + _nColumnDelta ), (ColPos)( m_nColumnCount - 1 ) ),
+ (ColPos)0
+ );
+
+ ColPos nOldLeftColumn = m_nLeftColumn;
+ m_nLeftColumn = nNewLeftColumn;
+
+ // if updates are enabled currently, scroll the viewport
+ if ( m_rAntiImpl.IsUpdateMode() && ( m_nLeftColumn != nOldLeftColumn ) )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ TempHideCursor aHideCursor( *this );
+ // TODO: call a onStartScroll at our listener (or better an own onStartScroll,
+ // which hides the cursor and then calls the listener)
+ // Same for onEndScroll
+
+ // scroll the view port, if possible
+ Rectangle aDataArea( Point( m_nRowHeaderWidthPixel, 0 ), m_pDataWindow->GetOutputSizePixel() );
+
+ long nPixelDelta =
+ ( m_nLeftColumn > 0 ? m_aAccColumnWidthsPixel[ m_nLeftColumn - 1 ] : 0 )
+ - ( nOldLeftColumn > 0 ? m_aAccColumnWidthsPixel[ nOldLeftColumn - 1 ] : 0 );
+
+ if ( m_pDataWindow->GetBackground().IsScrollable()
+ && abs( nPixelDelta ) < aDataArea.GetWidth()
+ )
+ {
+ m_pDataWindow->Scroll( (long)-nPixelDelta, 0, aDataArea, SCROLL_CLIP | SCROLL_UPDATE );
+ }
+ else
+ m_pDataWindow->Invalidate( INVALIDATE_UPDATE );
+
+ // update the position at the horizontal scrollbar
+ m_pHScroll->SetThumbPos( m_nLeftColumn );
+ }
+
+ return (TableSize)( m_nLeftColumn - nOldLeftColumn );
+ }
+
+ SelectionEngine* TableControl_Impl::getSelEngine()
+ {
+ return m_pSelEngine;
+ }
+ TableDataWindow* TableControl_Impl::getDataWindow()
+ {
+ return m_pDataWindow;
+ }
+ BOOL TableControl_Impl::isRowSelected(::std::vector<RowPos> selectedRows, RowPos current)
+ {
+ for(::std::vector<RowPos>::iterator it=selectedRows.begin();
+ it!=selectedRows.end();++it)
+ {
+ if(*it == current)
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ int TableControl_Impl::getRowSelectedNumber(::std::vector<RowPos> selectedRows, RowPos current)
+ {
+ int pos = -1;
+ int i = 0;
+ for(std::vector<RowPos>::iterator it=selectedRows.begin();it!=selectedRows.end();++it)
+ {
+ if(*it == current)
+ return pos = i;
+ ++i;
+ }
+ return pos;
+ }
+
+ void TableControl_Impl::setCellContent(CellEntryType* pCellEntryType)
+ {
+ (void)pCellEntryType;
+ }
+
+ //--------------------------------------------------------------------
+ IMPL_LINK( TableControl_Impl, OnScroll, ScrollBar*, _pScrollbar )
+ {
+ DBG_ASSERT( ( _pScrollbar == m_pVScroll ) || ( _pScrollbar == m_pHScroll ),
+ "TableControl_Impl::OnScroll: where did this come from?" );
+
+ if ( _pScrollbar == m_pVScroll )
+ impl_ni_ScrollRows( _pScrollbar->GetDelta() );
+ else
+ impl_ni_ScrollColumns( _pScrollbar->GetDelta() );
+
+ return 0L;
+ }
+
+ //---------------------------------------------------------------------------------------
+ TableFunctionSet::TableFunctionSet(TableControl_Impl* _pTableControl):
+ m_pTableControl( _pTableControl)
+ ,m_nCurrentRow (-2)
+ {
+ }
+
+ TableFunctionSet::~TableFunctionSet()
+ {
+ }
+
+ void TableFunctionSet::BeginDrag()
+ {
+ }
+
+ void TableFunctionSet::CreateAnchor()
+ {
+ m_pTableControl->m_nAnchor = m_pTableControl->m_nCurRow;
+ }
+
+ void TableFunctionSet::DestroyAnchor()
+ {
+ m_pTableControl->m_nAnchor = -1;
+ }
+
+ BOOL TableFunctionSet::SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor)
+ {
+ BOOL bHandled = FALSE;
+ Rectangle rCells;
+ //curRow is the row where the mouse click happened, m_nCurRow is the last selected row, before the mouse click
+ RowPos curRow = m_pTableControl->getCurrentRow(rPoint);
+ if(curRow == -2)
+ return FALSE;
+ if( bDontSelectAtCursor )
+ {
+ if(m_pTableControl->m_nRowSelected.size()>1)
+ m_pTableControl->m_pSelEngine->AddAlways(TRUE);
+ bHandled = TRUE;
+ }
+ else if(m_pTableControl->m_nAnchor == m_pTableControl->m_nCurRow)
+ {
+ //selecting region,
+ int diff = m_pTableControl->m_nCurRow - curRow;
+ //bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor);
+ /* if(!isAlreadySelected && m_nCurrentRow != m_pTableControl->m_nCurRow)
+ m_pTableControl->m_nRowSelected.push_back(m_nAnchor);*/
+ //selected region lies above the last selection
+ if( diff >= 0)
+ {
+ //put selected rows in vector
+ while(m_pTableControl->m_nAnchor>=curRow)
+ {
+ bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor);
+ //if row isn't selected, put it in vector, otherwise don't put it there, because it will be twice there
+ if(!isAlreadySelected)
+ m_pTableControl->m_nRowSelected.push_back(m_pTableControl->m_nAnchor);
+ m_pTableControl->m_nAnchor--;
+ diff--;
+ }
+ m_pTableControl->m_nAnchor++;
+ }
+ //selected region lies beneath the last selected row
+ else
+ {
+ while(m_pTableControl->m_nAnchor<=curRow)
+ {
+ bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor);
+ if(!isAlreadySelected)
+ m_pTableControl->m_nRowSelected.push_back(m_pTableControl->m_nAnchor);
+ m_pTableControl->m_nAnchor++;
+ diff++;
+ }
+ m_pTableControl->m_nAnchor--;
+ }
+ m_pTableControl->invalidateSelectedRegion(m_pTableControl->m_nCurRow, curRow, rCells);
+ bHandled = TRUE;
+ }
+ //no region selected
+ else
+ {
+ if(m_pTableControl->m_nRowSelected.empty())
+ {
+ m_pTableControl->m_nRowSelected.push_back(curRow);
+ }
+ else
+ {
+ if(m_pTableControl->m_pSelEngine->GetSelectionMode()==SINGLE_SELECTION)
+ {
+ DeselectAll();
+ m_pTableControl->m_nRowSelected.push_back(curRow);
+ }
+ else
+ {
+ bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, curRow);
+ if(!isAlreadySelected)
+ m_pTableControl->m_nRowSelected.push_back(curRow);
+ }
+ }
+ if(m_pTableControl->m_nRowSelected.size()>1 && m_pTableControl->m_pSelEngine->GetSelectionMode()!=SINGLE_SELECTION)
+ m_pTableControl->m_pSelEngine->AddAlways(TRUE);
+ m_pTableControl->invalidateSelectedRow(curRow,rCells);
+ bHandled = TRUE;
+ }
+ m_pTableControl->m_nCurRow = curRow;
+ m_pTableControl->ensureVisible(m_pTableControl->m_nCurColumn,m_pTableControl->m_nCurRow,false);
+ return bHandled;
+ }
+
+ BOOL TableFunctionSet::IsSelectionAtPoint( const Point& rPoint )
+ {
+ m_pTableControl->m_pSelEngine->AddAlways(FALSE);
+ if(m_pTableControl->m_nRowSelected.empty())
+ return FALSE;
+ else
+ {
+ RowPos curRow = m_pTableControl->getCurrentRow(rPoint);
+ m_pTableControl->m_nAnchor = -1;
+ bool selected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, curRow);
+ m_nCurrentRow = curRow;
+ return selected;
+ }
+ }
+
+ void TableFunctionSet::DeselectAtPoint( const Point& rPoint )
+ {
+ (void)rPoint;
+ long pos = 0;
+ long i = 0;
+ Rectangle rCells;
+ for(std::vector<RowPos>::iterator it=m_pTableControl->m_nRowSelected.begin();
+ it!=m_pTableControl->m_nRowSelected.end();++it)
+ {
+ if(*it == m_nCurrentRow)
+ {
+ pos = i;
+ m_pTableControl->invalidateSelectedRow(*it,rCells);
+ }
+ ++i;
+ }
+ m_pTableControl->m_nRowSelected.erase(m_pTableControl->m_nRowSelected.begin()+pos);
+ }
+ void TableFunctionSet::DeselectAll()
+ {
+ if(!m_pTableControl->m_nRowSelected.empty())
+ {
+ Rectangle rCells;
+ for(std::vector<RowPos>::iterator it=m_pTableControl->m_nRowSelected.begin();
+ it!=m_pTableControl->m_nRowSelected.end();++it)
+ {
+ m_pTableControl->invalidateSelectedRow(*it,rCells);
+ }
+ m_pTableControl->m_nRowSelected.clear();
+ }
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablecontrol_impl.hxx b/svtools/source/table/tablecontrol_impl.hxx
new file mode 100644
index 000000000000..410bc8b4c3a1
--- /dev/null
+++ b/svtools/source/table/tablecontrol_impl.hxx
@@ -0,0 +1,342 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_TABLECONTROL_IMPL_HXX
+#define SVTOOLS_TABLECONTROL_IMPL_HXX
+
+#ifndef SVTOOLS_INC_TABLE_TABLEMODEL_HXX
+#include <svtools/table/tablemodel.hxx>
+#endif
+
+#ifndef SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
+#include <svtools/table/abstracttablecontrol.hxx>
+#endif
+
+#include <svtools/table/tablemodel.hxx>
+#include <vector>
+#include <vcl/seleng.hxx>
+
+class ScrollBar;
+class ScrollBarBox;
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ typedef ::std::vector< long > ArrayOfLong;
+
+ class TableControl;
+ class TableDataWindow;
+ class TableFunctionSet;
+
+ //====================================================================
+ //= TableControl_Impl
+ //====================================================================
+ class TableControl_Impl : public IAbstractTableControl
+ {
+ friend class TableGeometry;
+ friend class TableRowGeometry;
+ friend class TableColumnGeometry;
+ friend class SuspendInvariants;
+ friend class TableFunctionSet;
+ private:
+ /// the control whose impl-instance we implemnt
+ TableControl& m_rAntiImpl;
+ /// the model of the table control
+ PTableModel m_pModel;
+ /// the input handler to use, usually the input handler as provided by ->m_pModel
+ PTableInputHandler m_pInputHandler;
+ /// the widths of the single columns, measured in pixel
+ ArrayOfLong m_aColumnWidthsPixel;
+ /** the accumulated widths of the single columns, i.e. their exclusive right borders,
+ <strong<not</strong> counting the space for a possible row header column
+ */
+ ArrayOfLong m_aAccColumnWidthsPixel;
+ /// the height of a single row in the table, measured in pixels
+ long m_nRowHeightPixel;
+ /// the height of the column header row in the table, measured in pixels
+ long m_nColHeaderHeightPixel;
+ /// the width of the row header column in the table, measured in pixels
+ long m_nRowHeaderWidthPixel;
+
+ /// the number of columns in the table control. Cached model value.
+ TableSize m_nColumnCount;
+ /// the number of rows in the table control. Cached model value.
+ TableSize m_nRowCount;
+
+ ColPos m_nCurColumn;
+ RowPos m_nCurRow;
+ ColPos m_nLeftColumn;
+ RowPos m_nTopRow;
+
+ sal_Int32 m_nCursorHidden;
+
+ /** the window to contain all data content, including header bars
+
+ The window's upper left corner is at position (0,0), relative to the
+ table control, which is the direct parent of the data window.
+ */
+ TableDataWindow* m_pDataWindow;
+ /// the vertical scrollbar, if any
+ ScrollBar* m_pVScroll;
+ /// the horizontal scrollbar, if any
+ ScrollBar* m_pHScroll;
+ ScrollBarBox* m_pScrollCorner;
+ //selection engine - for determining selection range, e.g. single, multiple
+ SelectionEngine* m_pSelEngine;
+ //vector which contains the selected rows
+ std::vector<RowPos> m_nRowSelected;
+ //part of selection engine
+ TableFunctionSet* m_pTableFunctionSet;
+ //part of selection engine
+ RowPos m_nAnchor;
+
+
+
+#if DBG_UTIL
+ #define INV_SCROLL_POSITION 1
+ /** represents a bitmask of invariants to check
+
+ Actually, impl_checkInvariants checks more invariants than denoted in this
+ bit mask, but only those present here can be disabled temporarily.
+ */
+ sal_Int32 m_nRequiredInvariants;
+#endif
+
+ public:
+
+
+ PTableModel getModel() const;
+ void setModel( PTableModel _pModel );
+
+ inline const PTableInputHandler& getInputHandler() const { return m_pInputHandler; }
+
+ inline ColPos getCurColumn() const { return m_nCurColumn; }
+ inline RowPos getCurRow() const { return m_nCurRow; }
+ inline void setCurRow(RowPos curRow){ m_nCurRow = curRow; }
+ inline RowPos getTopRow() const { return m_nTopRow; }
+
+ inline long getColHeaderHightPixel() const { return m_nColHeaderHeightPixel; }
+
+ inline const TableControl& getAntiImpl() const { return m_rAntiImpl; }
+ inline TableControl& getAntiImpl() { return m_rAntiImpl; }
+ void setCellContent(CellEntryType* pCellEntryType);
+
+ public:
+ TableControl_Impl( TableControl& _rAntiImpl );
+ ~TableControl_Impl();
+
+#if DBG_UTIL
+ const sal_Char* impl_checkInvariants() const;
+#endif
+ /** to be called when the anti-impl instance has been resized
+ */
+ void onResize();
+
+ /** paints the table control content which intersects with the given rectangle
+ */
+ void doPaintContent( const Rectangle& _rUpdateRect );
+
+ /** moves the cursor to the cell with the given coordinates
+
+ To ease the caller's code, the coordinates must not necessarily denote a
+ valid position. If they don't, <FALSE/> will be returned.
+ */
+ bool goTo( ColPos _nColumn, RowPos _nRow );
+
+ /** ensures that the given coordinate is visible
+ @param _nColumn
+ the column position which should be visible. Must be non-negative, and smaller
+ than the column count.
+ @param _nRow
+ the row position which should be visibleMust be non-negative, and smaller
+ than the row count.
+ @param _bAcceptPartialVisibility
+ <TRUE/> if it's okay that the given cooordinate is only partially visible
+ */
+ void ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility );
+ /** returns the row, which contains the input point*/
+ RowPos getCurrentRow (const Point& rPoint);
+
+ void setCursorAtCurrentCell(const Point& rPoint);
+ /** proves whether the vector with the selected rows contains the current row*/
+ BOOL isRowSelected(::std::vector<RowPos> selectedRows, RowPos current);
+ /** returns the position of the current row in the selecttion vector */
+ int getRowSelectedNumber(::std::vector<RowPos> selectedRows, RowPos current);
+ /** _rCellRect contains the region, which should be invalidate after some action e.g. selectiong row*/
+ void invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect );
+ /** _rCellRect contains the region, which should be invalidate after some action e.g. selectiong row*/
+ //vielleicht kann man mit den anderen verschmelzen, mit einer berprfung ob prev==curr?
+ void invalidateSelectedRow( RowPos _nCurRow, Rectangle& _rCellRect );
+ /** to be called when a new row is added to the control*/
+ void invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect );
+ /** returns the vector, which contains the selected rows*/
+ std::vector<RowPos> getSelectedRows();
+ /** updates the vector, which contains the selected rows after removing the row nRowPos*/
+ void removeSelectedRow(RowPos _nRowPos);
+ void invalidateRows(RowPos _nRowStart, Rectangle& _rCellRect );
+ //virtual void DoubleClick();
+
+ // IAbstractTableControl
+ virtual void hideCursor();
+ virtual void showCursor();
+ virtual bool dispatchAction( TableControlAction _eAction );
+ virtual bool isClickInVisibleArea(const Point& rPoint);
+ virtual SelectionEngine* getSelEngine();
+
+ TableDataWindow* getDataWindow();
+
+ private:
+ /** toggles the cursor visibility
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+ */
+ void impl_ni_doSwitchCursor( bool _bOn );
+
+ /** retrieves the area occupied by the totality of (at least partially) visible cells
+
+ The returned area includes row and column headers. Also, it takes into
+ account the the fact that there might be less columns than would normally
+ find room in the control.
+
+ As a result of respecting the partial visibility of rows and columns,
+ the returned area might be larger than the data window's output size.
+ */
+ void impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const;
+
+ /** retrieves the area occupied by all (at least partially) visible data cells.
+
+ Effectively, the returned area is the same as returned by ->impl_getAllVisibleCellsArea,
+ minus the row and column header areas.
+ */
+ void impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const;
+
+ /** returns the number of visible rows.
+
+ @param _bAcceptPartialRow
+ specifies whether a possible only partially visible last row is
+ counted, too.
+ */
+ TableSize impl_getVisibleRows( bool _bAcceptPartialRow ) const;
+
+ /** returns the number of visible columns
+
+ The value may change with different horizontal scroll positions, as
+ different columns have different widths. For instance, if your control is
+ 100 pixels wide, and has three columns of width 50, 50, 100, respectively,
+ then this method will return either "2" or "1", depending on which column
+ is the first visible one.
+
+ @param _bAcceptPartialRow
+ specifies whether a possible only partially visible last row is
+ counted, too.
+ */
+ TableSize impl_getVisibleColumns( bool _bAcceptPartialRow ) const;
+
+ /** determines the rectangle occupied by the given cell
+ */
+ void impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const;
+
+ /** updates all cached model values
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+ */
+ void impl_ni_updateCachedModelValues();
+
+ /** updates ->m_aColumnWidthsPixel with the current pixel widths of all model columns
+
+ The method takes into account the current zoom factor and map mode of the table
+ control, plus any possible COLWIDTH_FIT_TO_VIEW widths in the model columns.
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+ */
+ void impl_ni_updateColumnWidths();
+
+ /** updates the scrollbars of the control
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+
+ This includes both the existence of the scrollbars, and their
+ state.
+ */
+ void impl_ni_updateScrollbars();
+
+ /** scrolls the view by the given number of rows
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+
+ @return
+ the number of rows by which the viewport was scrolled. This may differ
+ from the given numbers to scroll in case the begin or the end of the
+ row range were reached.
+ */
+ TableSize impl_ni_ScrollRows( TableSize _nRowDelta );
+
+ /** scrolls the view by the given number of columns
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+
+ @return
+ the number of columns by which the viewport was scrolled. This may differ
+ from the given numbers to scroll in case the begin or the end of the
+ column range were reached.
+ */
+ TableSize impl_ni_ScrollColumns( TableSize _nRowDelta );
+
+ DECL_LINK( OnScroll, ScrollBar* );
+ };
+ //see seleng.hxx, seleng.cxx, FunctionSet overwritables, part of selection engine
+ class TableFunctionSet : public FunctionSet
+ {
+ friend class TableDataWindow;
+ private:
+ TableControl_Impl* m_pTableControl;
+ RowPos m_nCurrentRow;
+ public:
+ TableFunctionSet(TableControl_Impl* _pTableControl);
+ virtual ~TableFunctionSet();
+
+ virtual void BeginDrag();
+ virtual void CreateAnchor();
+ virtual void DestroyAnchor();
+ virtual BOOL SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor);
+ virtual BOOL IsSelectionAtPoint( const Point& rPoint );
+ virtual void DeselectAtPoint( const Point& rPoint );
+ virtual void DeselectAll();
+ };
+
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_TABLECONTROL_IMPL_HXX
diff --git a/svtools/source/table/tabledatawindow.cxx b/svtools/source/table/tabledatawindow.cxx
new file mode 100644
index 000000000000..71a313bb2e00
--- /dev/null
+++ b/svtools/source/table/tabledatawindow.cxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/tablecontrol.hxx"
+#include "svtools/table/tabledatawindow.hxx"
+#include "tablecontrol_impl.hxx"
+
+//........................................................................
+namespace svt { namespace table
+{
+ class TableControl_Impl;
+//........................................................................
+
+ //====================================================================
+ //= TableDataWindow
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableDataWindow::TableDataWindow( TableControl_Impl& _rTableControl )
+ :Window( &_rTableControl.getAntiImpl() )
+ ,m_rTableControl ( _rTableControl )
+ {
+ Color backgroundColor = m_rTableControl.getAntiImpl().GetSettings().GetStyleSettings().GetFieldColor();
+ SetBackground( backgroundColor );
+ SetControlBackground( backgroundColor );
+ }
+
+ //--------------------------------------------------------------------
+ void TableDataWindow::Paint( const Rectangle& rUpdateRect )
+ {
+ m_rTableControl.doPaintContent( rUpdateRect );
+ }
+ void TableDataWindow::MouseMove( const MouseEvent& rMEvt )
+ {
+ if ( !m_rTableControl.getInputHandler()->MouseMove( m_rTableControl, rMEvt ) )
+ Window::MouseMove( rMEvt );
+ }
+ void TableDataWindow::MouseButtonDown( const MouseEvent& rMEvt )
+ {
+ if ( !m_rTableControl.getInputHandler()->MouseButtonDown( m_rTableControl, rMEvt ) )
+ Window::MouseButtonDown( rMEvt );
+ else
+ m_aMouseButtonDownHdl.Call( (MouseEvent*) &rMEvt);
+ m_rTableControl.getAntiImpl().LoseFocus();
+ }
+ void TableDataWindow::MouseButtonUp( const MouseEvent& rMEvt )
+ {
+ if ( !m_rTableControl.getInputHandler()->MouseButtonUp( m_rTableControl, rMEvt ) )
+ Window::MouseButtonUp( rMEvt );
+ else
+ m_aMouseButtonUpHdl.Call( (MouseEvent*) &rMEvt);
+ m_rTableControl.getAntiImpl().GetFocus();
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablegeometry.cxx b/svtools/source/table/tablegeometry.cxx
new file mode 100644
index 000000000000..569e14c61726
--- /dev/null
+++ b/svtools/source/table/tablegeometry.cxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+
+#include "tablegeometry.hxx"
+#include "tablecontrol_impl.hxx"
+
+#include <tools/debug.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= TableRowGeometry
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableRowGeometry::TableRowGeometry( const TableControl_Impl& _rControl, const Rectangle& _rBoundaries,
+ RowPos _nRow )
+ :TableGeometry( _rControl, _rBoundaries )
+ ,m_nRowPos( _nRow )
+ {
+ if ( m_nRowPos == ROW_COL_HEADERS )
+ {
+ DBG_ASSERT( m_rControl.m_pModel->hasColumnHeaders(),
+ "TableRowGeometry::TableRowGeometry: why asking for the geoemtry of the non-existent column header row?" );
+ m_aRect.Top() = 0;
+ m_aRect.Bottom() = m_rControl.m_nColHeaderHeightPixel - 1;
+ }
+ else
+ {
+ if ( ( m_nRowPos >= m_rControl.m_nTopRow ) && ( m_nRowPos < m_rControl.m_pModel->getRowCount() ) )
+ {
+ m_aRect.Top() = m_rControl.m_nColHeaderHeightPixel + ( m_nRowPos - m_rControl.m_nTopRow ) * m_rControl.m_nRowHeightPixel;
+ m_aRect.Bottom() = m_aRect.Top() + m_rControl.m_nRowHeightPixel - 1;
+ }
+ else
+ m_aRect.SetEmpty();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ bool TableRowGeometry::moveDown()
+ {
+ if ( ++m_nRowPos < m_rControl.m_pModel->getRowCount() )
+ m_aRect.Move( 0, m_rControl.m_nRowHeightPixel );
+ else
+ m_aRect.SetEmpty();
+ return isValid();
+ }
+
+ //====================================================================
+ //= TableColumnGeometry
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableColumnGeometry::TableColumnGeometry( const TableControl_Impl& _rControl, const Rectangle& _rBoundaries,
+ ColPos _nCol )
+ :TableGeometry( _rControl, _rBoundaries )
+ ,m_nColPos( _nCol )
+ {
+ if ( m_nColPos == COL_ROW_HEADERS )
+ {
+ DBG_ASSERT( m_rControl.m_pModel->hasRowHeaders(),
+ "TableColumnGeometry::TableColumnGeometry: why asking for the geoemtry of the non-existent row header column?" );
+ m_aRect.Left() = 0;
+ m_aRect.Right() = m_rControl.m_nRowHeaderWidthPixel - 1;
+ }
+ else
+ {
+ ColPos nLeftColumn = m_rControl.m_nLeftColumn;
+ if ( ( m_nColPos >= nLeftColumn ) && ( m_nColPos < (ColPos)m_rControl.m_aColumnWidthsPixel.size() ) )
+ {
+ m_aRect.Left() = m_rControl.m_nRowHeaderWidthPixel;
+ // TODO: take into account any possibly frozen columns
+
+ for ( ColPos col = nLeftColumn; col < m_nColPos; ++col )
+ m_aRect.Left() += m_rControl.m_aColumnWidthsPixel[ col ];
+ m_aRect.Right() = m_aRect.Left() + m_rControl.m_aColumnWidthsPixel[ m_nColPos ] - 1;
+ }
+ else
+ m_aRect.SetEmpty();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ bool TableColumnGeometry::moveRight()
+ {
+ DBG_ASSERT( m_nColPos != COL_ROW_HEADERS, "TableColumnGeometry::moveRight: cannot move the row header column!" );
+ // what would be COL_ROW_HEADERS + 1?
+
+ if ( ++m_nColPos < (ColPos)m_rControl.m_aColumnWidthsPixel.size() )
+ {
+ m_aRect.Left() = m_aRect.Right() + 1;
+ m_aRect.Right() += m_rControl.m_aColumnWidthsPixel[ m_nColPos ];
+ }
+ else
+ m_aRect.SetEmpty();
+
+ return isValid();
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablegeometry.hxx b/svtools/source/table/tablegeometry.hxx
new file mode 100644
index 000000000000..18b40c1e3781
--- /dev/null
+++ b/svtools/source/table/tablegeometry.hxx
@@ -0,0 +1,161 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_TABLEGEOMETRY_HXX
+#define SVTOOLS_TABLEGEOMETRY_HXX
+
+#ifndef SVTOOLS_INC_TABLE_TABLETYPES_HXX
+#include <svtools/table/tabletypes.hxx>
+#endif
+
+#ifndef _SV_GEN_HXX
+#include <tools/gen.hxx>
+#endif
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ class TableControl_Impl;
+
+ //====================================================================
+ //= TableGeometry
+ //====================================================================
+ class TableGeometry
+ {
+ protected:
+ const TableControl_Impl& m_rControl;
+ const Rectangle& m_rBoundaries;
+ Rectangle m_aRect;
+
+ protected:
+ TableGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries
+ )
+ :m_rControl( _rControl )
+ ,m_rBoundaries( _rBoundaries )
+ ,m_aRect( _rBoundaries )
+ {
+ }
+
+ public:
+ // attribute access
+ const TableControl_Impl& getControl() const { return m_rControl; }
+
+ // status
+ const Rectangle& getRect() const { return m_aRect; }
+ bool isValid() const { return !m_aRect.GetIntersection( m_rBoundaries ).IsEmpty(); }
+ };
+
+ //====================================================================
+ //= TableRowGeometry
+ //====================================================================
+ class TableRowGeometry : public TableGeometry
+ {
+ protected:
+ RowPos m_nRowPos;
+
+ public:
+ TableRowGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries,
+ RowPos _nRow
+ );
+
+ // status
+ RowPos getRow() const { return m_nRowPos; }
+ // operations
+ bool moveDown();
+ };
+
+ //====================================================================
+ //= TableColumnGeometry
+ //====================================================================
+ class TableColumnGeometry : public TableGeometry
+ {
+ protected:
+ ColPos m_nColPos;
+
+ public:
+ TableColumnGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries,
+ ColPos _nCol
+ );
+
+ // status
+ ColPos getCol() const { return m_nColPos; }
+ // operations
+ bool moveRight();
+ };
+
+ //====================================================================
+ //= TableCellGeometry
+ //====================================================================
+ /** a helper representing geometry information of a cell
+ */
+ class TableCellGeometry
+ {
+ private:
+ TableRowGeometry m_aRow;
+ TableColumnGeometry m_aCol;
+
+ public:
+ TableCellGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries,
+ ColPos _nCol,
+ RowPos _nRow
+ )
+ :m_aRow( _rControl, _rBoundaries, _nRow )
+ ,m_aCol( _rControl, _rBoundaries, _nCol )
+ {
+ }
+
+ TableCellGeometry(
+ const TableRowGeometry& _rRow,
+ ColPos _nCol
+ )
+ :m_aRow( _rRow )
+ ,m_aCol( _rRow.getControl(), _rRow.getRect(), _nCol )
+ {
+ }
+
+ inline Rectangle getRect() const { return m_aRow.getRect().GetIntersection( m_aCol.getRect() ); }
+ inline RowPos getRow() const { return m_aRow.getRow(); }
+ inline ColPos getColumn() const { return m_aCol.getCol(); }
+ inline bool isValid() const { return !getRect().IsEmpty(); }
+
+ inline bool moveDown() {return m_aRow.moveDown(); }
+ inline bool moveRight() {return m_aCol.moveRight(); }
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_TABLEGEOMETRY_HXX
diff --git a/svtools/source/uno/makefile.mk b/svtools/source/uno/makefile.mk
index 76ab335d58d5..51e55a1f9123 100644
--- a/svtools/source/uno/makefile.mk
+++ b/svtools/source/uno/makefile.mk
@@ -1,4 +1,4 @@
-
+#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
@@ -55,6 +55,7 @@ SLOFILES= \
$(SLO)$/genericunodialog.obj \
$(SLO)$/generictoolboxcontroller.obj \
$(SLO)$/treecontrolpeer.obj \
+ $(SLO)$/unocontroltablemodel.obj \
$(SLO)$/registerservices.obj\
$(SLO)$/contextmenuhelper.obj
diff --git a/svtools/source/uno/unocontroltablemodel.cxx b/svtools/source/uno/unocontroltablemodel.cxx
new file mode 100644
index 000000000000..e322dbb8f96e
--- /dev/null
+++ b/svtools/source/uno/unocontroltablemodel.cxx
@@ -0,0 +1,812 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: unocontroltablemodel.cxx,v $
+ * $Revision: 1.32 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "unocontroltablemodel.hxx"
+#include <com/sun/star/view/SelectionType.hpp>
+#include "svtools/table/gridtablerenderer.hxx"
+#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/tablecontrol.hxx"
+#include <comphelper/sequence.hxx>
+#include <rtl/ref.hxx>
+#include <tools/debug.hxx>
+#include <toolkit/helper/property.hxx>
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+
+using ::rtl::OUString;
+using namespace ::svt::table;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt::grid;
+
+using namespace ::svt::table;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::view;
+using namespace ::toolkit;
+
+class UnoControlTableColumn : public IColumnModel
+ {
+ private:
+ ColumnID m_nID;
+ String m_sName;
+ bool m_bIsResizable;
+ TableMetrics m_nWidth;
+ TableMetrics m_nMinWidth;
+ TableMetrics m_nMaxWidth;
+
+ public:
+ UnoControlTableColumn(Reference<XGridColumn>);
+
+ // IColumnModel overridables
+ virtual ColumnID getID() const;
+ virtual bool setID( const ColumnID _nID );
+ virtual String getName() const;
+ virtual void setName( const String& _rName );
+ virtual bool isResizable() const;
+ virtual void setResizable( bool _bResizable );
+ virtual TableMetrics getWidth() const;
+ virtual void setWidth( TableMetrics _nWidth );
+ virtual TableMetrics getMinWidth() const;
+ virtual void setMinWidth( TableMetrics _nMinWidth );
+ virtual TableMetrics getMaxWidth() const;
+ virtual void setMaxWidth( TableMetrics _nMaxWidth );
+ };
+
+ //--------------------------------------------------------------------
+ UnoControlTableColumn::UnoControlTableColumn(Reference<XGridColumn> m_xGridColumn)
+ :m_nID( 0 )
+ ,m_sName()
+ ,m_bIsResizable( false )
+ ,m_nWidth( 10 * 100 ) // 1 cm
+ ,m_nMinWidth( 0 ) // no min width
+ ,m_nMaxWidth( 0 ) // no max width
+ {
+ //m_nID = m_xGridColumn->getIdentifier();
+ //m_nWidth = m_xGridColumn->getColumnWidth();
+ m_sName = m_xGridColumn->getTitle();
+ }
+
+ //--------------------------------------------------------------------
+ ColumnID UnoControlTableColumn::getID() const
+ {
+ return m_nID;
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableColumn::setID( const ColumnID _nID )
+ {
+ // TODO: conflict check
+
+ m_nID = _nID;
+ // TODO: notifications?
+
+ return true;
+ }
+
+ //--------------------------------------------------------------------
+ String UnoControlTableColumn::getName() const
+ {
+ return m_sName;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setName( const String& _rName )
+ {
+ m_sName = _rName;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableColumn::isResizable() const
+ {
+ return m_bIsResizable;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setResizable( bool _bResizable )
+ {
+ m_bIsResizable = _bResizable;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableColumn::getWidth() const
+ {
+ return m_nWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setWidth( TableMetrics _nWidth )
+ {
+ m_nWidth = _nWidth;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableColumn::getMinWidth() const
+ {
+ return m_nMinWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setMinWidth( TableMetrics _nMinWidth )
+ {
+ m_nMinWidth = _nMinWidth;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableColumn::getMaxWidth() const
+ {
+ return m_nMaxWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setMaxWidth( TableMetrics _nMaxWidth )
+ {
+ m_nMaxWidth = _nMaxWidth;
+ // TODO: notifications?
+ }
+
+ //====================================================================
+ //= DefaultTableModel_Impl
+ //====================================================================
+ struct UnoControlTableModel_Impl
+ {
+ ::std::vector< PColumnModel > aColumns;
+ TableSize nRowCount;
+ bool bHasColumnHeaders;
+ bool bHasRowHeaders;
+ PTableRenderer pRenderer;
+ PTableInputHandler pInputHandler;
+ TableMetrics nRowHeight;
+ TableMetrics nColumnHeaderHeight;
+ TableMetrics nRowHeaderWidth;
+ std::vector<rtl::OUString> aRowHeadersTitle;
+ std::vector<std::vector<rtl::OUString> > aCellContent;
+
+ UnoControlTableModel_Impl()
+ :nRowCount ( 0 )
+ ,bHasColumnHeaders ( false )
+ ,bHasRowHeaders ( false )
+ ,pRenderer ( )
+ ,pInputHandler ( )
+ ,nRowHeight ( 4 * 100 ) // 40 mm
+ ,nColumnHeaderHeight( 5 * 100 ) // 50 mm
+ ,nRowHeaderWidth ( 10 * 100 ) // 50 mm
+ ,aRowHeadersTitle ( 0 )
+ ,aCellContent ( 0 )
+ {
+ }
+ };
+
+ //====================================================================
+ //= UnoControlTableModel
+ //====================================================================
+ //--------------------------------------------------------------------
+ UnoControlTableModel::UnoControlTableModel()
+ :m_pImpl( new UnoControlTableModel_Impl ),
+ m_xDataModel(0),
+ m_xColumnModel(0),
+ m_bHasColumnHeaders(false),
+ m_bHasRowHeaders(false),
+ m_bVScroll(false),
+ m_bHScroll(false)
+ {
+ m_pImpl->bHasColumnHeaders = m_bHasColumnHeaders;
+ m_pImpl->bHasRowHeaders = m_bHasRowHeaders;
+ m_pImpl->pRenderer.reset( new GridTableRenderer( *this ) );
+ m_pImpl->pInputHandler.reset( new DefaultInputHandler );
+ }
+
+ //--------------------------------------------------------------------
+ UnoControlTableModel::~UnoControlTableModel()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ TableSize UnoControlTableModel::getColumnCount() const
+ {
+ m_pImpl->aColumns.resize( m_xColumnModel->getColumnCount());
+ return (TableSize)m_pImpl->aColumns.size();
+ }
+
+ //--------------------------------------------------------------------
+ TableSize UnoControlTableModel::getRowCount() const
+ {
+ return m_pImpl->nRowCount;
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableModel::hasColumnHeaders() const
+ {
+ return m_pImpl->bHasColumnHeaders;
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableModel::hasRowHeaders() const
+ {
+ return m_pImpl->bHasRowHeaders;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeaders(bool _bRowHeaders)
+ {
+ m_pImpl->bHasRowHeaders = _bRowHeaders;
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setColumnHeaders(bool _bColumnHeaders)
+ {
+ m_pImpl->bHasColumnHeaders = _bColumnHeaders;
+ }
+
+ void UnoControlTableModel::setColumnCount(TableSize _nColCount)
+ {
+ m_pImpl->aColumns.resize( _nColCount);
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowCount(TableSize _nRowCount)
+ {
+ m_pImpl->nRowCount = _nRowCount;
+ }
+ //--------------------------------------------------------------------
+ bool UnoControlTableModel::isCellEditable( ColPos col, RowPos row ) const
+ {
+ (void)col;
+ (void)row;
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::addTableModelListener( const PTableModelListener& listener )
+ {
+ (void) listener;
+ //listener->onTableModelChanged(PTableModel(this));
+ // TODO
+ DBG_ERROR( "DefaultTableModel::addTableModelListener: not yet implemented!" );
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::removeTableModelListener( const PTableModelListener& listener )
+ {
+ (void)listener;
+ // TODO
+ DBG_ERROR( "DefaultTableModel::removeTableModelListener: not yet implemented!" );
+ }
+
+ //--------------------------------------------------------------------
+ PColumnModel UnoControlTableModel::getColumnModel( ColPos column )
+ {
+ DBG_ASSERT( ( column >= 0 ) && ( column < getColumnCount() ),
+ "DefaultTableModel::getColumnModel: invalid index!" );
+ return m_pImpl->aColumns[ column ];
+ }
+
+ //--------------------------------------------------------------------
+ PColumnModel UnoControlTableModel::getColumnModelByID( ColumnID id )
+ {
+ (void)id;
+ // TODO
+ DBG_ERROR( "DefaultTableModel::getColumnModelByID: not yet implemented!" );
+ return PColumnModel();
+ }
+
+ //--------------------------------------------------------------------
+ PTableRenderer UnoControlTableModel::getRenderer() const
+ {
+ return m_pImpl->pRenderer;
+ }
+
+ //--------------------------------------------------------------------
+ PTableInputHandler UnoControlTableModel::getInputHandler() const
+ {
+ return m_pImpl->pInputHandler;
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableModel::getRowHeight() const
+ {
+ return m_pImpl->nRowHeight;
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeight(TableMetrics _nRowHeight)
+ {
+ m_pImpl->nRowHeight = _nRowHeight;
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableModel::getColumnHeaderHeight() const
+ {
+ DBG_ASSERT( hasColumnHeaders(), "DefaultTableModel::getColumnHeaderHeight: invalid call!" );
+ return m_pImpl->nColumnHeaderHeight;
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableModel::getRowHeaderWidth() const
+ {
+ DBG_ASSERT( hasRowHeaders(), "DefaultTableModel::getRowHeaderWidth: invalid call!" );
+ return m_pImpl->nRowHeaderWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::SetTitleHeight( TableMetrics _nHeight )
+ {
+ DBG_ASSERT( _nHeight > 0, "DefaultTableModel::SetTitleHeight: invalid height value!" );
+ m_pImpl->nColumnHeaderHeight = _nHeight;
+ // TODO: notification
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::SetHandleWidth( TableMetrics _nWidth )
+ {
+ DBG_ASSERT( _nWidth > 0, "DefaultTableModel::SetHandleWidth: invalid width value!" );
+ m_pImpl->nRowHeaderWidth = _nWidth;
+ // TODO: notification
+ }
+
+ //--------------------------------------------------------------------
+ ScrollbarVisibility UnoControlTableModel::getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const
+ {
+ if(overAllHeight>=actHeight && !m_bVScroll)
+ return ScrollbarShowNever;
+ else
+ return ScrollbarShowAlways;
+ }
+
+ //--------------------------------------------------------------------
+ ScrollbarVisibility UnoControlTableModel::getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const
+ {
+ if(overAllWidth>=actWidth && !m_bHScroll)
+ return ScrollbarShowNever;
+ else
+ return ScrollbarShowAlways;
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setCellContent(std::vector<std::vector<rtl::OUString> > cellContent)
+ {
+ if(cellContent.empty())
+ {
+ unsigned int i = m_pImpl->aColumns.size();
+ std::vector<rtl::OUString> emptyCells;
+ while(i!=0)
+ {
+ cellContent.push_back(emptyCells);
+ --i;
+ }
+ }
+ std::vector<rtl::OUString> cCC;
+ for(::std::vector<std::vector<rtl::OUString> >::iterator iter = cellContent.begin(); iter!= cellContent.end();++iter)
+ {
+ cCC = *iter;
+ m_pImpl->aCellContent.push_back(cCC);
+ }
+ }
+
+ std::vector<std::vector<rtl::OUString> > UnoControlTableModel::getCellContent()
+ {
+ return m_pImpl->aCellContent;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeaderName(std::vector<rtl::OUString> cellColumnContent)
+ {
+ if(cellColumnContent.empty())
+ {
+ unsigned int i = m_pImpl->aColumns.size();
+ while(i!=0)
+ {
+ cellColumnContent.push_back(rtl::OUString::createFromAscii(""));
+ --i;
+ }
+ }
+ for(::std::vector<rtl::OUString>::iterator iter = cellColumnContent.begin(); iter!= cellColumnContent.end();++iter)
+ {
+ rtl::OUString s = *iter;
+ m_pImpl->aRowHeadersTitle.push_back(*iter);
+ }
+ }
+
+ std::vector<rtl::OUString> UnoControlTableModel::getRowHeaderName()
+ {
+ return m_pImpl->aRowHeadersTitle;
+ }
+
+::com::sun::star::uno::Any UnoControlTableModel::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
+{
+ ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
+ SAL_STATIC_CAST( ::com::sun::star::awt::grid::XGridControl*, this ),
+ SAL_STATIC_CAST( ::com::sun::star::awt::grid::XGridDataListener*, this ),
+ //SAL_STATIC_CAST( com::sun::star::lang::XEventListener*, this ),
+ //SAL_STATIC_CAST( com::sun::star::awt::XMouseListener*, this ),
+ SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider*, this ) );
+ return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
+}
+
+// ::com::sun::star::lang::XTypeProvider
+IMPL_XTYPEPROVIDER_START( UnoControlTableModel )
+ getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridControl>* ) NULL ),
+ getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel>* ) NULL ),
+ getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener>* ) NULL ),
+ VCLXWindow::getTypes()
+IMPL_XTYPEPROVIDER_END
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL UnoControlTableModel::getColumnModel( ) throw (::com::sun::star::uno::RuntimeException)
+{
+ return NULL;
+}
+void SAL_CALL UnoControlTableModel::setColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >& model ) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)model;
+}
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL UnoControlTableModel::getDataModel( ) throw (::com::sun::star::uno::RuntimeException)
+{
+ return NULL;
+}
+void SAL_CALL UnoControlTableModel::setDataModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >& model ) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)model;
+}
+sal_Int32 SAL_CALL UnoControlTableModel::getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTableControl = (TableControl*)GetWindow();
+ return pTableControl->GetCurrentRow( Point(x,y) );
+}
+
+/*
+void SAL_CALL UnoControlTableModel::addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException)
+{
+ VCLXWindow::addMouseListener( listener );
+}
+
+void SAL_CALL UnoControlTableModel::removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException)
+{
+ VCLXWindow::removeMouseListener( listener );
+}
+*/
+/*
+void SAL_CALL UnoControlTableModel::mousePressed( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void)rEvent;
+}
+void SAL_CALL UnoControlTableModel::mouseReleased( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void)rEvent;
+}
+void SAL_CALL UnoControlTableModel::mouseEntered( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void) rEvent;
+}
+void SAL_CALL UnoControlTableModel::mouseExited( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void) rEvent;
+}
+*/
+void SAL_CALL UnoControlTableModel::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)listener;
+}
+
+void SAL_CALL UnoControlTableModel::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void) listener;
+}
+
+void UnoControlTableModel::setProperty( const ::rtl::OUString& PropertyName, const Any& aValue) throw(RuntimeException)
+{
+ ::vos::OGuard aGuard( GetMutex() );
+
+ TableControl* pTableControl = (TableControl*)GetWindow();
+
+ switch( GetPropertyId( PropertyName ) )
+ {
+ case BASEPROPERTY_GRID_SELECTIONMODE:
+ {
+ SelectionType eSelectionType;
+ if( aValue >>= eSelectionType )
+ {
+ SelectionMode eSelMode;
+ switch( eSelectionType )
+ {
+ case SelectionType_SINGLE: eSelMode = SINGLE_SELECTION; break;
+ case SelectionType_RANGE: eSelMode = RANGE_SELECTION; break;
+ case SelectionType_MULTI: eSelMode = MULTIPLE_SELECTION; break;
+ // case SelectionType_NONE:
+ default: eSelMode = NO_SELECTION; break;
+ }
+ if( pTableControl->getSelEngine()->GetSelectionMode() != eSelMode )
+ pTableControl->getSelEngine()->SetSelectionMode( eSelMode );
+ }
+ break;
+ }
+ case BASEPROPERTY_HSCROLL:
+ {
+ sal_Bool bHScroll = true;
+ if( aValue >>= bHScroll )
+ {
+ m_bHScroll = bHScroll;
+ }
+ break;
+ }
+ case BASEPROPERTY_VSCROLL:
+ {
+ sal_Bool bVScroll = true;
+ if( aValue >>= bVScroll )
+ {
+ m_bVScroll = bVScroll;
+ }
+ break;
+ }
+ case BASEPROPERTY_GRID_SHOWROWHEADER:
+ {
+ sal_Bool rowHeader = true;
+ if( aValue >>= rowHeader )
+ {
+ setRowHeaders(rowHeader);
+ }
+ break;
+ }
+
+ case BASEPROPERTY_GRID_SHOWCOLUMNHEADER:
+ {
+ sal_Bool colHeader = true;
+ if( aValue >>= colHeader )
+ {
+ setColumnHeaders(colHeader);
+ }
+ break;
+ }
+ case BASEPROPERTY_GRID_DATAMODEL:
+ {
+ m_xDataModel = Reference< XGridDataModel >( aValue, UNO_QUERY );
+ Sequence<Sequence< ::rtl::OUString > > cellData = m_xDataModel->getData();
+ Sequence<rtl::OUString> rowData(0);
+ for(int i = 0; i< m_xDataModel->getRowCount();++i)
+ {
+ rowData = cellData[i];
+ std::vector<rtl::OUString> newRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(rowData));
+ if(newRow.size()<m_pImpl->aColumns.size())
+ newRow.resize(m_pImpl->aColumns.size(),rtl::OUString::createFromAscii(""));
+ m_pImpl->aCellContent.push_back(newRow);
+ }
+ Sequence< ::rtl::OUString > rowHeaders = m_xDataModel->getRowHeaders();
+ std::vector< rtl::OUString > newRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(rowHeaders));
+ m_pImpl->nRowCount = m_xDataModel->getRowCount();
+ setRowHeaderName(newRow);
+ break;
+ }
+ case BASEPROPERTY_GRID_COLUMNMODEL:
+ {
+ m_xColumnModel = Reference< XGridColumnModel >( aValue, UNO_QUERY );
+ Sequence<Reference< XGridColumn > > columns = m_xColumnModel->getColumns();
+ std::vector<Reference< XGridColumn > > aNewColumns(
+ comphelper::sequenceToContainer<std::vector<Reference< XGridColumn > > >(columns));
+ if(!m_pImpl->aColumns.empty())
+ m_pImpl->aColumns.clear();
+ for ( ::svt::table::ColPos col = 0; col < m_xColumnModel->getColumnCount(); ++col )
+ {
+ UnoControlTableColumn* tableColumn = new UnoControlTableColumn(aNewColumns[col]);
+ m_pImpl->aColumns.push_back((PColumnModel)tableColumn);
+ }
+ break;
+ }
+ default:
+ VCLXWindow::setProperty( PropertyName, aValue );
+ break;
+ }
+}
+
+Any UnoControlTableModel::getProperty( const ::rtl::OUString& PropertyName ) throw(RuntimeException)
+{
+ ::vos::OGuard aGuard( GetMutex() );
+
+ const sal_uInt16 nPropId = GetPropertyId( PropertyName );
+ TableControl* pTableControl = (TableControl*)GetWindow();
+ if(pTableControl)
+ {
+ switch(nPropId)
+ {
+ case BASEPROPERTY_GRID_SELECTIONMODE:
+ {
+ SelectionType eSelectionType;
+
+ SelectionMode eSelMode = pTableControl->getSelEngine()->GetSelectionMode();
+ switch( eSelMode )
+ {
+ case SINGLE_SELECTION: eSelectionType = SelectionType_SINGLE; break;
+ case RANGE_SELECTION: eSelectionType = SelectionType_RANGE; break;
+ case MULTIPLE_SELECTION:eSelectionType = SelectionType_MULTI; break;
+// case NO_SELECTION:
+ default: eSelectionType = SelectionType_NONE; break;
+ }
+ return Any( eSelectionType );
+ }
+ case BASEPROPERTY_GRID_SHOWROWHEADER:
+ {
+ return Any ((sal_Bool) pTableControl->GetModel()->hasRowHeaders());
+ }
+ case BASEPROPERTY_GRID_SHOWCOLUMNHEADER:
+ return Any ((sal_Bool) pTableControl->GetModel()->hasColumnHeaders());
+ case BASEPROPERTY_GRID_DATAMODEL:
+ return Any ( m_xDataModel );
+ case BASEPROPERTY_GRID_COLUMNMODEL:
+ return Any ( m_xColumnModel);
+ case BASEPROPERTY_HSCROLL:
+ return Any ( m_bHScroll);
+ case BASEPROPERTY_VSCROLL:
+ return Any ( m_bVScroll);
+ }
+ }
+ return VCLXWindow::getProperty( PropertyName );
+}
+
+void UnoControlTableModel::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
+{
+ PushPropertyIds( rIds,
+ BASEPROPERTY_GRID_SHOWROWHEADER,
+ BASEPROPERTY_GRID_SHOWCOLUMNHEADER,
+ BASEPROPERTY_GRID_DATAMODEL,
+ BASEPROPERTY_GRID_COLUMNMODEL,
+ BASEPROPERTY_GRID_SELECTIONMODE,
+ 0);
+ VCLXWindow::ImplGetPropertyIds( rIds, true );
+}
+void SAL_CALL UnoControlTableModel::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTable = (TableControl*)GetWindow();
+ if ( pTable )
+ {
+ pTable->SetModel(PTableModel(this));
+ pTable->Show( bVisible );
+ }
+}
+void SAL_CALL UnoControlTableModel::setFocus() throw(::com::sun::star::uno::RuntimeException)
+{
+ ::vos::OGuard aGuard( GetMutex() );
+ if ( GetWindow())
+ GetWindow()->GrabFocus();
+}
+void SAL_CALL UnoControlTableModel::rowAdded(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException)
+{
+ std::vector<OUString> aNewRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(Event.rowData));
+ if(aNewRow.size()<m_pImpl->aColumns.size())
+ aNewRow.resize(m_pImpl->aColumns.size(),rtl::OUString::createFromAscii(""));
+ m_pImpl->aCellContent.push_back(aNewRow);
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.push_back(Event.headerName);
+ m_pImpl->nRowCount=m_pImpl->aCellContent.size();
+ TableControl* pTable = (TableControl*)GetWindow();
+ pTable->InvalidateDataWindow(m_pImpl->nRowCount-1, false);
+ //pTable->GrabFocus();
+}
+
+void SAL_CALL UnoControlTableModel::rowRemoved(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTable = (TableControl*)GetWindow();
+ //unsigned int rows =m_pImpl->aCellContent.size()-1;
+ if(Event.index == -1)
+ {
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.clear();
+ m_pImpl->aCellContent.clear();
+ }
+ else
+ {
+ pTable->removeSelectedRow(Event.index);
+ if(m_pImpl->aCellContent.size()>1)
+ {
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.erase(m_pImpl->aRowHeadersTitle.begin()+Event.index);
+ m_pImpl->aCellContent.erase(m_pImpl->aCellContent.begin()+Event.index);
+
+ }
+ else
+ {
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.clear();
+ m_pImpl->aCellContent.clear();
+ //m_pImpl->nRowCount=0;
+ }
+ }
+ //pTable->InvalidateDataWindow(Event.index, true);
+ setRowCount(m_pImpl->aCellContent.size());
+ pTable->InvalidateDataWindow(Event.index, true);
+ //pTable->Invalidate();
+}
+
+void SAL_CALL UnoControlTableModel::dataChanged(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void) Event;
+}
+
+ void SAL_CALL UnoControlTableModel::disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException)
+ {
+ VCLXWindow::disposing( Source );
+ }
+
+::sal_Int32 SAL_CALL UnoControlTableModel::getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return 0;
+}
+
+::sal_Int32 SAL_CALL UnoControlTableModel::getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return 0;
+}
+
+void SAL_CALL UnoControlTableModel::insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)length;
+ (void)start;
+}
+
+void SAL_CALL UnoControlTableModel::removeIndexIntervall(::sal_Int32 start, ::sal_Int32 end) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)end;
+ (void)start;
+}
+
+::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoControlTableModel::getSelection() throw (::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTable = (TableControl*)GetWindow();
+ std::vector<RowPos> selectedRows = pTable->getSelectedRows();
+ Sequence<sal_Int32> selectedRowsToSequence(comphelper::containerToSequence(selectedRows));
+ return selectedRowsToSequence;
+}
+
+::sal_Bool SAL_CALL UnoControlTableModel::isCellEditable() throw (::com::sun::star::uno::RuntimeException)
+{
+ return sal_False;
+}
+
+::sal_Bool SAL_CALL UnoControlTableModel::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException)
+{
+ return sal_False;
+}
+
+::sal_Bool SAL_CALL UnoControlTableModel::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)index;
+ return sal_False;
+}
+
+void SAL_CALL UnoControlTableModel::selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)y;
+}
+
+void SAL_CALL UnoControlTableModel::selectColumn(::sal_Int32 x) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)x;
+}
diff --git a/svtools/source/uno/unocontroltablemodel.hxx b/svtools/source/uno/unocontroltablemodel.hxx
new file mode 100644
index 000000000000..5da9cc871756
--- /dev/null
+++ b/svtools/source/uno/unocontroltablemodel.hxx
@@ -0,0 +1,179 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: unocontroltablemodel.hxx,v $
+ * $Revision: 1.32 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _UNOCONTROL_TABLEMODEL_HXX_
+#define _UNOCONTROL_TABLEMODEL_HXX_
+
+#include <svtools/table/tablemodel.hxx>
+#include <svtools/table/tablecontrol.hxx>
+#include <com/sun/star/awt/grid/XGridControl.hpp>
+#include <com/sun/star/awt/grid/XGridDataListener.hpp>
+#include <com/sun/star/awt/grid/GridDataEvent.hpp>
+#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/XGridSelectionListener.hpp>
+#include <toolkit/awt/vclxwindow.hxx>
+#include <toolkit/awt/vclxwindows.hxx>
+#include <cppuhelper/typeprovider.hxx>
+#include <cppuhelper/implbase2.hxx>
+//#include <toolkit/helper/listenermultiplexer.hxx>
+
+
+using namespace ::svt::table;
+
+ struct UnoControlTableModel_Impl;
+
+ class UnoControlTableModel : public ITableModel, public ::cppu::ImplInheritanceHelper2< VCLXWindow, ::com::sun::star::awt::grid::XGridControl,
+ ::com::sun::star::awt::grid::XGridDataListener>
+ {
+ private:
+ UnoControlTableModel_Impl* m_pImpl;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >m_xDataModel;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >m_xColumnModel;
+ bool m_bHasColumnHeaders;
+ bool m_bHasRowHeaders;
+ bool m_bVScroll;
+ bool m_bHScroll;
+ //MouseListenerMultiplexer m_aMouseListeners;
+
+ public:
+ UnoControlTableModel();
+ ~UnoControlTableModel();
+
+ /// returns the current row height, in 1/100 millimeters
+ inline TableMetrics GetRowHeight() const { return getRowHeight(); }
+ /// sets a new row height.
+ void setRowHeight( TableMetrics _nHeight );
+
+ /// returns the height of the title row (containing the column headers)
+ inline TableMetrics GetTitleHeight() const { return getColumnHeaderHeight(); }
+ /// sets a new height for the title row (containing the column headers)
+ void SetTitleHeight( TableMetrics _nHeight );
+
+ /// returns the width of the handle column (containing the row headers)
+ inline TableMetrics GetHandleWidth() const { return getRowHeaderWidth(); }
+ /// sets a new width for the handle column (containing the row headers)
+ void SetHandleWidth( TableMetrics _nWidth );
+
+ /// sets the width of a column
+ inline void SetColumnWidth( ColPos _nColumn, TableMetrics _nWidth100thMM );
+ /// retrieves the width of a column, in 1/100th millimeters
+ inline TableMetrics GetColumnWidth( ColPos _nColumn );
+
+ // TODO: setters and getters for ID, Name, Resizable, MinWidth, MaxWidth
+
+ public:
+ // ITableModel overridables
+ virtual TableSize getColumnCount() const;
+ virtual TableSize getRowCount() const;
+ virtual void setColumnCount(TableSize _nColCount);
+ virtual void setRowCount(TableSize _nRowCount);
+ virtual bool hasColumnHeaders() const;
+ virtual bool hasRowHeaders() const;
+ virtual void setRowHeaders(bool _bRowHeaders);
+ virtual void setColumnHeaders(bool _bColumnHeaders);
+ virtual bool isCellEditable( ColPos col, RowPos row ) const;
+ virtual void addTableModelListener( const PTableModelListener& listener );
+ virtual void removeTableModelListener( const PTableModelListener& listener );
+ virtual PColumnModel getColumnModel( ColPos column );
+ virtual PColumnModel getColumnModelByID( ColumnID id );
+ virtual PTableRenderer getRenderer() const;
+ virtual PTableInputHandler getInputHandler() const;
+ virtual TableMetrics getRowHeight() const;
+ virtual TableMetrics getColumnHeaderHeight() const;
+ virtual TableMetrics getRowHeaderWidth() const;
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const;
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const;
+ virtual void setCellContent(std::vector<std::vector<rtl::OUString> > cellContent);
+ virtual std::vector<std::vector<rtl::OUString> > getCellContent();
+ virtual void setRowHeaderName(std::vector<rtl::OUString> cellColumnContent);
+ virtual std::vector<rtl::OUString> getRowHeaderName();
+
+ //XGridDataListener overridables
+ virtual void SAL_CALL rowAdded(const ::com::sun::star::awt::grid::GridDataEvent& Event) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL rowRemoved(const ::com::sun::star::awt::grid::GridDataEvent & Event) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL dataChanged(const ::com::sun::star::awt::grid::GridDataEvent & Event) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
+
+ ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
+ void SAL_CALL acquire() throw() { VCLXWindow::acquire(); }
+ void SAL_CALL release() throw() { VCLXWindow::release(); }
+
+ // ::com::sun::star::lang::XTypeProvider
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
+ ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
+
+ //::com::sun::star::awt::grid::XGridControl
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL getColumnModel( ) throw (::com::sun::star::uno::RuntimeException);
+ void SAL_CALL setColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >& model ) throw (::com::sun::star::uno::RuntimeException);
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL getDataModel( ) throw (::com::sun::star::uno::RuntimeException);
+ void SAL_CALL setDataModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >& model ) throw (::com::sun::star::uno::RuntimeException);
+
+ virtual ::sal_Int32 SAL_CALL getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeIndexIntervall(::sal_Int32 start, ::sal_Int32 end) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL getSelection() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isCellEditable() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL selectColumn(::sal_Int32 x) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+
+ //void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException);
+ //void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException);
+ //::com::sun::star::awt::XMouseListener
+ /*
+ virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ */
+
+ void SAL_CALL setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException);
+ ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException);
+ static void ImplGetPropertyIds( std::list< sal_uInt16 > &aIds );
+ void SAL_CALL setVisible(sal_Bool bVisible) throw(::com::sun::star::uno::RuntimeException);
+ void SAL_CALL setFocus() throw(::com::sun::star::uno::RuntimeException);
+ };
+
+ inline void UnoControlTableModel::SetColumnWidth( ColPos _nColumn, TableMetrics _nWidth100thMM )
+ {
+ getColumnModel( _nColumn )->setWidth( _nWidth100thMM );
+ }
+
+ inline TableMetrics UnoControlTableModel::GetColumnWidth( ColPos _nColumn )
+ {
+ return getColumnModel( _nColumn )->getWidth();
+ }
+ #endif // _UNOCONTROL_TABLEMODEL_HXX_
diff --git a/svtools/source/uno/unoiface.cxx b/svtools/source/uno/unoiface.cxx
index 91a6de4c404d..54cc448ff89e 100644
--- a/svtools/source/uno/unoiface.cxx
+++ b/svtools/source/uno/unoiface.cxx
@@ -54,6 +54,9 @@
#include <svtools/svtreebx.hxx>
#include "treecontrolpeer.hxx"
+//#include "vclxgridcontrol.hxx"
+#include "unocontroltablemodel.hxx"
+#include <svtools/table/tablecontrol.hxx>
namespace
{
@@ -83,8 +86,6 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::
if ( pParent )
{
pWindow = new MultiLineEdit( pParent, nWinBits|WB_IGNORETAB);
- static_cast< MultiLineEdit* >( pWindow )->DisableSelectionOnFocus();
- // #i89821# / 2008-12-17 / frank.schoenheit@sun.com
*ppNewComp = new VCLXMultiLineEdit;
}
else
@@ -132,7 +133,7 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::
}
else if (aServiceName.EqualsIgnoreCaseAscii("roadmap") )
{
- pWindow = new ::svt::ORoadmap( pParent, WB_DIALOGCONTROL);
+ pWindow = new ::svt::ORoadmap( pParent, WB_TABSTOP );
*ppNewComp = new SVTXRoadmap;
}
else if ( aServiceName.EqualsIgnoreCaseAscii( "ProgressBar" ) )
@@ -167,6 +168,21 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::
return NULL;
}
}
+ else if ( aServiceName.EqualsIgnoreCaseAscii( "Grid" ) )
+ {
+ if ( pParent )
+ {
+ ::svt::table::TableControl* m_pTable = new ::svt::table::TableControl(pParent, nWinBits);
+ UnoControlTableModel* pModel = new UnoControlTableModel();
+ *ppNewComp = pModel;
+ pWindow = m_pTable;
+ }
+ else
+ {
+ *ppNewComp = NULL;
+ return NULL;
+ }
+ }
return pWindow;
}
diff --git a/svtools/uno/makefile.mk b/svtools/uno/makefile.mk
index b572242f1d85..8f61c7100508 100644
--- a/svtools/uno/makefile.mk
+++ b/svtools/uno/makefile.mk
@@ -60,11 +60,13 @@ SHL1LIBS= \
SHL1STDLIBS=\
$(SVTOOLLIB) \
+ $(TKLIB) \
$(VCLLIB) \
$(SVLLIB) \
$(UNOTOOLSLIB) \
$(TOOLSLIB) \
$(COMPHELPERLIB) \
+ $(VOSLIB) \
$(CPPUHELPERLIB) \
$(CPPULIB) \
$(SALLIB)
diff --git a/svtools/util/makefile.mk b/svtools/util/makefile.mk
index d40195609115..80596d23e866 100644
--- a/svtools/util/makefile.mk
+++ b/svtools/util/makefile.mk
@@ -84,6 +84,7 @@ LIB7FILES= \
$(SLB)$/svhtml.lib \
$(SLB)$/svrtf.lib \
$(SLB)$/heavyconfig.lib \
+ $(SLB)$/table.lib \
$(SLB)$/java.lib
LIB8TARGET= $(SLB)$/svl.lib
diff --git a/toolkit/inc/toolkit/helper/listenermultiplexer.hxx b/toolkit/inc/toolkit/helper/listenermultiplexer.hxx
index 24a16d5868dd..543c8a85c401 100644
--- a/toolkit/inc/toolkit/helper/listenermultiplexer.hxx
+++ b/toolkit/inc/toolkit/helper/listenermultiplexer.hxx
@@ -129,7 +129,7 @@ DECL_LISTENERMULTIPLEXER_END
// ----------------------------------------------------
// class MouseListenerMultiplexer
// ----------------------------------------------------
-DECL_LISTENERMULTIPLEXER_START( MouseListenerMultiplexer, ::com::sun::star::awt::XMouseListener )
+DECL_LISTENERMULTIPLEXER_START_DLLPUB( MouseListenerMultiplexer, ::com::sun::star::awt::XMouseListener )
void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException);
void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException);
void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException);
diff --git a/toolkit/inc/toolkit/helper/property.hxx b/toolkit/inc/toolkit/helper/property.hxx
index f5e1b4ea3770..fbfe90494279 100644
--- a/toolkit/inc/toolkit/helper/property.hxx
+++ b/toolkit/inc/toolkit/helper/property.hxx
@@ -191,7 +191,13 @@ namespace rtl {
#define BASEPROPERTY_IMAGE_SCALE_MODE 137
#define BASEPROPERTY_WRITING_MODE 138
#define BASEPROPERTY_CONTEXT_WRITING_MODE 139
-#define BASEPROPERTY_ENABLEVISIBLE 140 // sal_Bool
+#define BASEPROPERTY_GRID_SHOWROWHEADER 140
+#define BASEPROPERTY_GRID_SHOWCOLUMNHEADER 141
+#define BASEPROPERTY_GRID_DATAMODEL 142
+#define BASEPROPERTY_GRID_COLUMNMODEL 143
+#define BASEPROPERTY_GRID_SELECTIONMODE 144
+#define BASEPROPERTY_ENABLEVISIBLE 145 // sal_Bool
+
// Keine gebundenen Properties, werden immer aus der Property BASEPROPERTY_FONTDESCRIPTOR entnommen.
#define BASEPROPERTY_FONTDESCRIPTORPART_START 1000
diff --git a/toolkit/inc/toolkit/helper/servicenames.hxx b/toolkit/inc/toolkit/helper/servicenames.hxx
index 31513f0f2358..89810ae69482 100644
--- a/toolkit/inc/toolkit/helper/servicenames.hxx
+++ b/toolkit/inc/toolkit/helper/servicenames.hxx
@@ -95,6 +95,12 @@ extern const sal_Char __FAR_DATA szServiceName_TreeControl[];
extern const sal_Char __FAR_DATA szServiceName_TreeControlModel[];
extern const sal_Char __FAR_DATA szServiceName_MutableTreeDataModel[];
+extern const sal_Char __FAR_DATA szServiceName_GridControl[];
+extern const sal_Char __FAR_DATA szServiceName_GridControlModel[];
+extern const sal_Char __FAR_DATA szServiceName_DefaultGridDataModel[];
+extern const sal_Char __FAR_DATA szServiceName_DefaultGridColumnModel[];
+extern const sal_Char __FAR_DATA szServiceName_GridColumn[];
+
extern const sal_Char __FAR_DATA szServiceName_UnoSimpleAnimationControl[], szServiceName_UnoSimpleAnimationControlModel[];
extern const sal_Char __FAR_DATA szServiceName_UnoThrobberControl[], szServiceName_UnoThrobberControlModel[];
extern const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlink[], szServiceName_UnoControlFixedHyperlinkModel[];
diff --git a/toolkit/inc/toolkit/helper/vclunohelper.hxx b/toolkit/inc/toolkit/helper/vclunohelper.hxx
index 1c5d89a3cc64..e29b7237abb8 100644
--- a/toolkit/inc/toolkit/helper/vclunohelper.hxx
+++ b/toolkit/inc/toolkit/helper/vclunohelper.hxx
@@ -36,6 +36,7 @@
#include <com/sun/star/uno/Sequence.h>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/awt/MouseEvent.hpp>
namespace com { namespace sun { namespace star { namespace uno {
@@ -59,6 +60,7 @@ namespace com { namespace sun { namespace star { namespace awt {
struct SimpleFontMetric;
struct FontDescriptor;
struct Rectangle;
+ struct KeyEvent;
}}}}
@@ -71,6 +73,8 @@ namespace com { namespace sun { namespace star { namespace awt {
class Window;
class OutputDevice;
+class MouseEvent;
+class KeyEvent;
// ----------------------------------------------------
// class VclUnoHelper
@@ -144,6 +148,18 @@ public:
static ::Rectangle ConvertToVCLRect( ::com::sun::star::awt::Rectangle const & _rRect );
static ::com::sun::star::awt::Rectangle ConvertToAWTRect( ::Rectangle const & _rRect );
+
+ static ::com::sun::star::awt::MouseEvent
+ createMouseEvent(
+ const ::MouseEvent& _rVclEvent,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext
+ );
+
+ static ::com::sun::star::awt::KeyEvent
+ createKeyEvent(
+ const ::KeyEvent& _rVclEvent,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext
+ );
};
diff --git a/toolkit/prj/build.lst b/toolkit/prj/build.lst
index 7fa0efaded53..304d0e7c978f 100644
--- a/toolkit/prj/build.lst
+++ b/toolkit/prj/build.lst
@@ -7,6 +7,7 @@ ti toolkit\source\helper nmake - all ti_helper ti_inc NULL
ti toolkit\source\awt nmake - all ti_awt ti_inc NULL
ti toolkit\source\controls nmake - all ti_controls ti_inc NULL
ti toolkit\source\controls\tree nmake - all ti_tree NULL
+ti toolkit\source\controls\grid nmake - all ti_grid NULL
ti toolkit\source\layout\core nmake - all ti_layout_core NULL
ti toolkit\source\layout\vcl nmake - all ti_layout_vcl NULL
-ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_layout_vcl NULL
+ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_grid ti_layout_vcl NULL
diff --git a/toolkit/source/awt/makefile.mk b/toolkit/source/awt/makefile.mk
index 86953691ad27..406386c5723e 100644
--- a/toolkit/source/awt/makefile.mk
+++ b/toolkit/source/awt/makefile.mk
@@ -44,7 +44,6 @@ ENABLE_EXCEPTIONS=TRUE
# --- Files --------------------------------------------------------
.IF "$(GUIBASE)"=="aqua"
-OBJCXXFLAGS=-x objective-c++ -fobjc-exceptions
CFLAGSCXX+=$(OBJCXXFLAGS)
.ENDIF # "$(GUIBASE)"=="aqua"
diff --git a/toolkit/source/awt/vclxmenu.cxx b/toolkit/source/awt/vclxmenu.cxx
index c8e5e1bd3853..5200849d66ed 100644
--- a/toolkit/source/awt/vclxmenu.cxx
+++ b/toolkit/source/awt/vclxmenu.cxx
@@ -578,7 +578,7 @@ sal_Int16 VCLXMenu::execute( const ::com::sun::star::uno::Reference< ::com::sun:
sal_Int16 nRet = 0;
if ( mpMenu && IsPopupMenu() )
- nRet = ((PopupMenu*)mpMenu)->Execute( VCLUnoHelper::GetWindow( rxWindowPeer ), VCLRectangle(rArea), nFlags );
+ nRet = ((PopupMenu*)mpMenu)->Execute( VCLUnoHelper::GetWindow( rxWindowPeer ), VCLRectangle(rArea), nFlags | POPUPMENU_NOMOUSEUPCLOSE );
return nRet;
}
diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx
index 337400c08713..a8c0912a583e 100644
--- a/toolkit/source/awt/vclxwindow.cxx
+++ b/toolkit/source/awt/vclxwindow.cxx
@@ -554,48 +554,6 @@ void ImplInitWindowEvent( ::com::sun::star::awt::WindowEvent& rEvent, Window* pW
pWindow->GetBorder( rEvent.LeftInset, rEvent.TopInset, rEvent.RightInset, rEvent.BottomInset );
}
-void ImplInitKeyEvent( ::com::sun::star::awt::KeyEvent& rEvent, const KeyEvent& rEvt )
-{
- rEvent.Modifiers = 0;
- if ( rEvt.GetKeyCode().IsShift() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::SHIFT;
- if ( rEvt.GetKeyCode().IsMod1() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD1;
- if ( rEvt.GetKeyCode().IsMod2() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD2;
- if ( rEvt.GetKeyCode().IsMod3() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD3;
-
- rEvent.KeyCode = rEvt.GetKeyCode().GetCode();
- rEvent.KeyChar = rEvt.GetCharCode();
- rEvent.KeyFunc = sal::static_int_cast< sal_Int16 >(
- rEvt.GetKeyCode().GetFunction());
-}
-
-void ImplInitMouseEvent( awt::MouseEvent& rEvent, const MouseEvent& rEvt )
-{
- rEvent.Modifiers = 0;
- if ( rEvt.IsShift() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::SHIFT;
- if ( rEvt.IsMod1() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD1;
- if ( rEvt.IsMod2() )
- rEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD2;
-
- rEvent.Buttons = 0;
- if ( rEvt.IsLeft() )
- rEvent.Buttons |= ::com::sun::star::awt::MouseButton::LEFT;
- if ( rEvt.IsRight() )
- rEvent.Buttons |= ::com::sun::star::awt::MouseButton::RIGHT;
- if ( rEvt.IsMiddle() )
- rEvent.Buttons |= ::com::sun::star::awt::MouseButton::MIDDLE;
-
- rEvent.X = rEvt.GetPosPixel().X();
- rEvent.Y = rEvt.GetPosPixel().Y();
- rEvent.ClickCount = rEvt.GetClicks();
- rEvent.PopupTrigger = sal_False;
-}
-
// ----------------------------------------------------
// class VCLXWindow
// ----------------------------------------------------
@@ -890,9 +848,9 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
{
if ( mpImpl->getKeyListeners().getLength() )
{
- ::com::sun::star::awt::KeyEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitKeyEvent( aEvent, *(KeyEvent*)rVclWindowEvent.GetData() );
+ ::com::sun::star::awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent(
+ *(KeyEvent*)rVclWindowEvent.GetData(), *this
+ ) );
mpImpl->getKeyListeners().keyPressed( aEvent );
}
}
@@ -901,9 +859,9 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
{
if ( mpImpl->getKeyListeners().getLength() )
{
- ::com::sun::star::awt::KeyEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitKeyEvent( aEvent, *(KeyEvent*)rVclWindowEvent.GetData() );
+ ::com::sun::star::awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent(
+ *(KeyEvent*)rVclWindowEvent.GetData(), *this
+ ) );
mpImpl->getKeyListeners().keyReleased( aEvent );
}
}
@@ -925,9 +883,7 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
}
MouseEvent aMEvt( aWhere, 1, MOUSE_SIMPLECLICK, MOUSE_LEFT, 0 );
- awt::MouseEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitMouseEvent( aEvent, aMEvt );
+ awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( aMEvt, *this ) );
aEvent.PopupTrigger = sal_True;
mpImpl->notifyMouseEvent( aEvent, EVENT_MOUSE_PRESSED );
}
@@ -938,10 +894,7 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
MouseEvent* pMouseEvt = (MouseEvent*)rVclWindowEvent.GetData();
if ( mpImpl->getMouseListeners().getLength() && ( pMouseEvt->IsEnterWindow() || pMouseEvt->IsLeaveWindow() ) )
{
- awt::MouseEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitMouseEvent( aEvent, *pMouseEvt );
-
+ awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *pMouseEvt, *this ) );
mpImpl->notifyMouseEvent(
aEvent,
pMouseEvt->IsEnterWindow() ? EVENT_MOUSE_ENTERED : EVENT_MOUSE_EXITED
@@ -950,11 +903,8 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
if ( mpImpl->getMouseMotionListeners().getLength() && !pMouseEvt->IsEnterWindow() && !pMouseEvt->IsLeaveWindow() )
{
- awt::MouseEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitMouseEvent( aEvent, *pMouseEvt );
+ awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *pMouseEvt, *this ) );
aEvent.ClickCount = 0; // #92138#
-
if ( pMouseEvt->GetMode() & MOUSE_SIMPLEMOVE )
mpImpl->getMouseMotionListeners().mouseMoved( aEvent );
else
@@ -966,9 +916,7 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
{
if ( mpImpl->getMouseListeners().getLength() )
{
- awt::MouseEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitMouseEvent( aEvent, *(MouseEvent*)rVclWindowEvent.GetData() );
+ awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *(MouseEvent*)rVclWindowEvent.GetData(), *this ) );
mpImpl->notifyMouseEvent( aEvent, EVENT_MOUSE_PRESSED );
}
}
@@ -977,9 +925,7 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
{
if ( mpImpl->getMouseListeners().getLength() )
{
- awt::MouseEvent aEvent;
- aEvent.Source = (::cppu::OWeakObject*)this;
- ImplInitMouseEvent( aEvent, *(MouseEvent*)rVclWindowEvent.GetData() );
+ awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *(MouseEvent*)rVclWindowEvent.GetData(), *this ) );
mpImpl->notifyMouseEvent( aEvent, EVENT_MOUSE_RELEASED );
}
}
diff --git a/toolkit/source/controls/dialogcontrol.cxx b/toolkit/source/controls/dialogcontrol.cxx
index 47028cc8e071..07d459a6111a 100644
--- a/toolkit/source/controls/dialogcontrol.cxx
+++ b/toolkit/source/controls/dialogcontrol.cxx
@@ -66,6 +66,7 @@
#include <vcl/image.hxx>
#include "tree/treecontrol.hxx"
+#include "grid/gridcontrol.hxx"
#include <map>
#include <algorithm>
@@ -453,6 +454,8 @@ Reference< XInterface > UnoControlDialogModel::createInstance( const ::rtl::OUSt
pNewModel = new OGeometryControlModel< UnoControlRoadmapModel >;
else if ( aServiceSpecifier.compareToAscii( szServiceName_TreeControlModel ) == 0 )
pNewModel = new OGeometryControlModel< UnoTreeModel >;
+ else if ( aServiceSpecifier.compareToAscii( szServiceName_GridControlModel ) == 0 )
+ pNewModel = new OGeometryControlModel< UnoGridModel >;
if ( !pNewModel )
{
@@ -515,6 +518,7 @@ Sequence< ::rtl::OUString > UnoControlDialogModel::getAvailableServiceNames() th
pNames[18] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlFixedLineModel );
pNames[19] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlRoadmapModel );
pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_TreeControlModel );
+ pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_GridControlModel );
}
return *pNamesSeq;
diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx
new file mode 100644
index 000000000000..bdd7fb475afe
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx
@@ -0,0 +1,242 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: treedatamodel.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include "defaultgridcolumnmodel.hxx"
+#include <comphelper/sequence.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <rtl/ref.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+#define COLUMNSELECTIONALLOWED ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ColumnSelectionAllowed" ))
+
+namespace toolkit
+{
+
+///////////////////////////////////////////////////////////////////////
+// class DefaultGridColumnModel
+///////////////////////////////////////////////////////////////////////
+
+DefaultGridColumnModel::DefaultGridColumnModel()
+: columns(std::vector< Reference< XGridColumn > >())
+{
+}
+
+//---------------------------------------------------------------------
+
+DefaultGridColumnModel::~DefaultGridColumnModel()
+{
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast( broadcast_type eType, const GridColumnEvent& aEvent )
+{
+ ::cppu::OInterfaceContainerHelper* pIter = BrdcstHelper.getContainer( XGridColumnListener::static_type() );
+ if( pIter )
+ {
+ ::cppu::OInterfaceIteratorHelper aListIter(*pIter);
+ while(aListIter.hasMoreElements())
+ {
+ XGridColumnListener* pListener = static_cast<XGridColumnListener*>(aListIter.next());
+ switch( eType )
+ {
+ case column_added: pListener->columnAdded(aEvent); break;
+ case column_removed: pListener->columnRemoved(aEvent); break;
+ case column_changed: pListener->columnChanged(aEvent); break;
+ }
+ }
+ }
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridColumnEvent aEvent( xSource, name, oldValue, newValue, 0, NULL );
+ broadcast( column_changed, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast_add( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridColumnEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, rColumn );
+ broadcast( column_added, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast_remove( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridColumnEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, rColumn );
+ broadcast( column_changed, aEvent);
+}
+
+//---------------------------------------------------------------------
+// XDefaultGridColumnModel
+//---------------------------------------------------------------------
+::sal_Bool SAL_CALL DefaultGridColumnModel::getColumnSelectionAllowed() throw (::com::sun::star::uno::RuntimeException)
+{
+ return selectionAllowed;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::setColumnSelectionAllowed(::sal_Bool value) throw (::com::sun::star::uno::RuntimeException)
+{
+ sal_Bool oldValue = selectionAllowed;
+ selectionAllowed = value;
+ broadcast_changed( COLUMNSELECTIONALLOWED, Any(oldValue) , Any(selectionAllowed));
+}
+
+//---------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL DefaultGridColumnModel::getColumnCount() throw (::com::sun::star::uno::RuntimeException)
+{
+ return columns.size();
+}
+
+//---------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL DefaultGridColumnModel::addColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & column) throw (::com::sun::star::uno::RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+
+ columns.push_back(column);
+
+ sal_Int32 index = columns.size() - 1;
+ broadcast_add(index, column );
+ return index;
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > SAL_CALL DefaultGridColumnModel::getColumns() throw (::com::sun::star::uno::RuntimeException)
+{
+ return comphelper::containerToSequence(columns);
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > SAL_CALL DefaultGridColumnModel::getColumn(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ if ( index >=0 && index < ((sal_Int32)columns.size()))
+ return columns[index];
+ else
+ return Reference< XGridColumn >();
+}
+
+void SAL_CALL DefaultGridColumnModel::addColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XGridColumnListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::removeColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XGridColumnListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+// XComponent
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::dispose() throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+
+ ::com::sun::star::lang::EventObject aEvent;
+ aEvent.Source.set( static_cast< ::cppu::OWeakObject* >( this ) );
+ BrdcstHelper.aLC.disposeAndClear( aEvent );
+
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XEventListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XEventListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+// XServiceInfo
+//---------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL DefaultGridColumnModel::getImplementationName( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.DefaultGridColumnModel" ) );
+ return aImplName;
+}
+
+//---------------------------------------------------------------------
+
+sal_Bool SAL_CALL DefaultGridColumnModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ return ServiceName.equalsAscii( szServiceName_DefaultGridColumnModel );
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridColumnModel::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aServiceName( OUString::createFromAscii( szServiceName_DefaultGridColumnModel ) );
+ static const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+}
+
+Reference< XInterface > SAL_CALL DefaultGridColumnModel_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::DefaultGridColumnModel );
+}
+
diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx
new file mode 100644
index 000000000000..b230188f9107
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: griddatamodel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+#include <com/sun/star/awt/grid/GridColumnEvent.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <rtl/ref.hxx>
+#include <vector>
+#include <toolkit/helper/mutexandbroadcasthelper.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+enum broadcast_type { column_added, column_removed, column_changed};
+
+class DefaultGridColumnModel : public ::cppu::WeakImplHelper2< XGridColumnModel, XServiceInfo >,
+ public MutexAndBroadcastHelper
+{
+public:
+ DefaultGridColumnModel();
+ virtual ~DefaultGridColumnModel();
+
+ // XGridColumnModel
+
+ virtual ::sal_Bool SAL_CALL getColumnSelectionAllowed() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setColumnSelectionAllowed(::sal_Bool the_value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getColumnCount() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL addColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & column) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > SAL_CALL getColumns() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > SAL_CALL getColumn(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (RuntimeException);
+ virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+private:
+
+ void broadcast( broadcast_type eType, const GridColumnEvent& aEvent );
+ void broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue );
+ void broadcast_add( sal_Int32 index,const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn );
+ void broadcast_remove( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn );
+
+ std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > columns;
+ sal_Bool selectionAllowed;
+};
+
+}
diff --git a/toolkit/source/controls/grid/defaultgriddatamodel.cxx b/toolkit/source/controls/grid/defaultgriddatamodel.cxx
new file mode 100644
index 000000000000..865be80f55a7
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgriddatamodel.cxx
@@ -0,0 +1,310 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: treedatamodel.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include "defaultgriddatamodel.hxx"
+#include <comphelper/sequence.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <rtl/ref.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+#define ROWHEIGHT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "RowHeight" ))
+#define ROWHEADERS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "RowHeaders" ))
+
+namespace toolkit
+{
+
+///////////////////////////////////////////////////////////////////////
+// class DefaultGridDataModel
+///////////////////////////////////////////////////////////////////////
+
+DefaultGridDataModel::DefaultGridDataModel()
+: rowHeight(0),
+ rowHeaders(std::vector< ::rtl::OUString >())
+{
+}
+
+//---------------------------------------------------------------------
+
+DefaultGridDataModel::~DefaultGridDataModel()
+{
+}
+
+void DefaultGridDataModel::broadcast( broadcast_type eType, const GridDataEvent& aEvent )
+{
+ ::cppu::OInterfaceContainerHelper* pIter = BrdcstHelper.getContainer( XGridDataListener::static_type() );
+ if( pIter )
+ {
+ ::cppu::OInterfaceIteratorHelper aListIter(*pIter);
+ while(aListIter.hasMoreElements())
+ {
+ XGridDataListener* pListener = static_cast<XGridDataListener*>(aListIter.next());
+ switch( eType )
+ {
+ case row_added: pListener->rowAdded(aEvent); break;
+ case row_removed: pListener->rowRemoved(aEvent); break;
+ case data_changed: pListener->dataChanged(aEvent); break;
+ }
+ }
+ }
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridDataModel::broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridDataEvent aEvent( xSource, name, oldValue, newValue, 0, ::rtl::OUString(), Sequence< ::rtl::OUString>() );
+ broadcast( data_changed, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridDataModel::broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridDataEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, headerName, rowData );
+ broadcast( row_added, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridDataModel::broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridDataEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, headerName, rowData );
+ broadcast( row_removed, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+// XDefaultGridDataModel
+//---------------------------------------------------------------------
+::sal_Int32 SAL_CALL DefaultGridDataModel::getRowHeight() throw (::com::sun::star::uno::RuntimeException)
+{
+ return rowHeight;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::setRowHeight(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException)
+{
+ sal_Int32 oldValue = rowHeight;
+ rowHeight = value;
+
+ broadcast_changed( ROWHEIGHT, Any(oldValue), Any(value) );
+}
+
+//---------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL DefaultGridDataModel::getRowCount() throw (::com::sun::star::uno::RuntimeException)
+{
+ return data.size();
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridDataModel::getRowHeaders() throw (::com::sun::star::uno::RuntimeException)
+{
+ return comphelper::containerToSequence(rowHeaders);
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException)
+{
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > oldValue( comphelper::containerToSequence(rowHeaders) );
+
+ std::vector< rtl::OUString>::iterator iterator;
+ int i = 0;
+ int sequenceSize = value.getLength();
+
+ for(iterator = rowHeaders.begin(); iterator != rowHeaders.end(); iterator++)
+ {
+ if ( sequenceSize > i )
+ *iterator = value[i];
+ else
+ *iterator = ::rtl::OUString();
+ i++;
+ }
+
+ broadcast_changed( ROWHEADERS, Any(oldValue), Any(comphelper::containerToSequence(rowHeaders)) );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & rRowdata) throw (::com::sun::star::uno::RuntimeException)
+{
+ // store header name
+ rowHeaders.push_back(headername);
+
+
+ // store row data
+ std::vector< rtl::OUString > newRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(rRowdata));
+
+ data.push_back( newRow );
+
+ broadcast_add( data.size()-1, headername, rRowdata);
+
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ if ( index >= 0 && index <= getRowCount()-1)
+ {
+ /* if(Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index ))
+ {
+ ::com::sun::star::uno::Sequence<::sal_Int32> selectedRows = Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection();
+ selectedRow.erase(selectedRows.begin()+index);
+ }*/
+
+ ::rtl::OUString headerName( (::rtl::OUString) rowHeaders[index] );
+ rowHeaders.erase(rowHeaders.begin() + index);
+
+ Sequence< ::rtl::OUString >& rowData ( (Sequence< ::rtl::OUString >&)data[index] );
+ data.erase(data.begin() + index);
+ broadcast_remove( index, headerName, rowData);
+ }
+ else
+ return;
+}
+//---------------------------------------------------------------------
+::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL DefaultGridDataModel::getData() throw (::com::sun::star::uno::RuntimeException)
+{
+
+ std::vector< std::vector< ::rtl::OUString > >::iterator iterator;
+ std::vector< Sequence< ::rtl::OUString > > dummyContainer(0);
+
+
+ for(iterator = data.begin(); iterator != data.end(); iterator++)
+ {
+ Sequence< ::rtl::OUString > cols(comphelper::containerToSequence(*iterator));
+ dummyContainer.push_back( cols );
+ }
+ Sequence< Sequence< ::rtl::OUString > > dataSequence(comphelper::containerToSequence(dummyContainer));
+
+ return dataSequence;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::addDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XGridDataListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::removeDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XGridDataListener::static_type(), xListener );
+}
+
+void SAL_CALL DefaultGridDataModel::removeAll() throw (RuntimeException)
+{
+ rowHeaders.clear();
+ data.clear();
+ broadcast_remove( -1, ::rtl::OUString(), 0);
+}
+
+//---------------------------------------------------------------------
+// XComponent
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::dispose() throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+
+ ::com::sun::star::lang::EventObject aEvent;
+ aEvent.Source.set( static_cast< ::cppu::OWeakObject* >( this ) );
+ BrdcstHelper.aLC.disposeAndClear( aEvent );
+
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XEventListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XEventListener::static_type(), xListener );
+}
+//---------------------------------------------------------------------
+// XServiceInfo
+//---------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL DefaultGridDataModel::getImplementationName( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.DefaultGridDataModel" ) );
+ return aImplName;
+}
+
+//---------------------------------------------------------------------
+
+sal_Bool SAL_CALL DefaultGridDataModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ return ServiceName.equalsAscii( szServiceName_DefaultGridDataModel );
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridDataModel::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aServiceName( OUString::createFromAscii( szServiceName_DefaultGridDataModel ) );
+ static const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+}
+
+Reference< XInterface > SAL_CALL DefaultGridDataModel_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::DefaultGridDataModel );
+}
+
diff --git a/toolkit/source/controls/grid/defaultgriddatamodel.hxx b/toolkit/source/controls/grid/defaultgriddatamodel.hxx
new file mode 100644
index 000000000000..18000c9f5a71
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgriddatamodel.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: griddatamodel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/GridDataEvent.hpp>
+#include <com/sun/star/awt/grid/XGridDataListener.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <rtl/ref.hxx>
+#include <vector>
+#include <toolkit/helper/mutexandbroadcasthelper.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+enum broadcast_type { row_added, row_removed, data_changed};
+
+class DefaultGridDataModel : public ::cppu::WeakImplHelper2< XGridDataModel, XServiceInfo >,
+ public MutexAndBroadcastHelper
+{
+public:
+ DefaultGridDataModel();
+ virtual ~DefaultGridDataModel();
+
+ // XGridDataModel
+ virtual ::sal_Int32 SAL_CALL getRowHeight() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRowHeight(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getRowCount() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowHeaders() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL getData() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & data) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeAll() throw (RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (RuntimeException);
+ virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+private:
+
+ void broadcast( broadcast_type eType, const GridDataEvent& aEvent );
+ void broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue );
+ void broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData );
+ void broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData );
+
+ sal_Int32 rowHeight;
+ std::vector< std::vector < ::rtl::OUString > > data;
+ std::vector< ::rtl::OUString > rowHeaders;
+};
+
+}
diff --git a/toolkit/source/controls/grid/gridcolumn.cxx b/toolkit/source/controls/grid/gridcolumn.cxx
new file mode 100644
index 000000000000..8b398b4aed58
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcolumn.cxx
@@ -0,0 +1,166 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: treedatamodel.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include "gridcolumn.hxx"
+#include <comphelper/sequence.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <rtl/ref.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+///////////////////////////////////////////////////////////////////////
+// class GridColumn
+///////////////////////////////////////////////////////////////////////
+
+GridColumn::GridColumn()
+: identifier(Any())
+{
+}
+
+//---------------------------------------------------------------------
+
+GridColumn::~GridColumn()
+{
+}
+
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+// XGridColumn
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Any SAL_CALL GridColumn::getIdentifier() throw (::com::sun::star::uno::RuntimeException)
+{
+ return identifier;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException)
+{
+ value >>= identifier;
+}
+
+//--------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL GridColumn::getColumnWidth() throw (::com::sun::star::uno::RuntimeException)
+{
+ return columnWidth;
+}
+
+//--------------------------------------------------------------------
+
+void SAL_CALL GridColumn::setColumnWidth(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException)
+{
+ columnWidth = value;
+}
+
+//--------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL GridColumn::getTitle() throw (::com::sun::star::uno::RuntimeException)
+{
+ return title;
+}
+
+//--------------------------------------------------------------------
+
+void SAL_CALL GridColumn::setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException)
+{
+ title = value;
+}
+
+//---------------------------------------------------------------------
+// XComponent
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::dispose() throw (RuntimeException)
+{
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ (void) xListener;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ (void) xListener;
+}
+
+//---------------------------------------------------------------------
+// XServiceInfo
+//---------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL GridColumn::getImplementationName( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.GridColumn" ) );
+ return aImplName;
+}
+
+//---------------------------------------------------------------------
+
+sal_Bool SAL_CALL GridColumn::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ return ServiceName.equalsAscii( szServiceName_GridColumn );
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL GridColumn::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aServiceName( OUString::createFromAscii( szServiceName_GridColumn ) );
+ static const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+}
+
+Reference< XInterface > SAL_CALL GridColumn_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::GridColumn );
+}
+
diff --git a/toolkit/source/controls/grid/gridcolumn.hxx b/toolkit/source/controls/grid/gridcolumn.hxx
new file mode 100644
index 000000000000..a451054ce93f
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcolumn.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: griddatamodel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <rtl/ref.hxx>
+#include <vector>
+#include <toolkit/helper/mutexandbroadcasthelper.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+class GridColumn : public ::cppu::WeakImplHelper2< XGridColumn, XServiceInfo >,
+ public MutexAndBroadcastHelper
+{
+public:
+ GridColumn();
+ virtual ~GridColumn();
+
+ // XGridColumn
+ virtual ::com::sun::star::uno::Any SAL_CALL getIdentifier() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getColumnWidth() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setColumnWidth(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getTitle() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (RuntimeException);
+ virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+
+private:
+ Any identifier;
+ sal_Int32 columnWidth;
+ ::rtl::OUString title;
+};
+
+}
diff --git a/toolkit/source/controls/grid/gridcontrol.cxx b/toolkit/source/controls/grid/gridcontrol.cxx
new file mode 100644
index 000000000000..c642d8a0dcce
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcontrol.cxx
@@ -0,0 +1,273 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: gridcontrol.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+
+#include <gridcontrol.hxx>
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/view/SelectionType.hpp>
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/ScrollBarMode.hpp>
+#include <toolkit/helper/unopropertyarrayhelper.hxx>
+#include <toolkit/helper/property.hxx>
+#include <com/sun/star/awt/XVclWindowPeer.hpp>
+#include <comphelper/processfactory.hxx>
+#include <osl/diagnose.h>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::view;
+
+namespace toolkit
+{
+// ----------------------------------------------------
+// class UnoGridModel
+// ----------------------------------------------------
+UnoGridModel::UnoGridModel()
+{
+ ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
+ ImplRegisterProperty( BASEPROPERTY_BORDER );
+ ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
+ ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
+ ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_FILLCOLOR );
+ ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
+ ImplRegisterProperty( BASEPROPERTY_HELPURL );
+ ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
+ ImplRegisterProperty( BASEPROPERTY_SIZEABLE ); // resizeable
+ ImplRegisterProperty( BASEPROPERTY_HSCROLL );
+ ImplRegisterProperty( BASEPROPERTY_VSCROLL );
+ ImplRegisterProperty( BASEPROPERTY_GRID_SHOWROWHEADER );
+ ImplRegisterProperty( BASEPROPERTY_GRID_SHOWCOLUMNHEADER );
+ ImplRegisterProperty( BASEPROPERTY_GRID_DATAMODEL );
+ ImplRegisterProperty( BASEPROPERTY_GRID_COLUMNMODEL );
+ ImplRegisterProperty( BASEPROPERTY_GRID_SELECTIONMODE );
+
+}
+
+UnoGridModel::UnoGridModel( const UnoGridModel& rModel )
+: UnoControlModel( rModel )
+{
+}
+
+UnoControlModel* UnoGridModel::Clone() const
+{
+ return new UnoGridModel( *this );
+}
+
+OUString UnoGridModel::getServiceName() throw(RuntimeException)
+{
+ return OUString::createFromAscii( szServiceName_GridControlModel );
+}
+
+Any UnoGridModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
+{
+ switch( nPropId )
+ {
+ case BASEPROPERTY_DEFAULTCONTROL:
+ return uno::makeAny( ::rtl::OUString::createFromAscii( szServiceName_GridControl ) );
+ case BASEPROPERTY_GRID_SELECTIONMODE:
+ return uno::makeAny( SelectionType(1) );
+ default:
+ return UnoControlModel::ImplGetDefaultValue( nPropId );
+ }
+
+}
+
+::cppu::IPropertyArrayHelper& UnoGridModel::getInfoHelper()
+{
+ static UnoPropertyArrayHelper* pHelper = NULL;
+ if ( !pHelper )
+ {
+ Sequence<sal_Int32> aIDs = ImplGetPropertyIds();
+ pHelper = new UnoPropertyArrayHelper( aIDs );
+ }
+ return *pHelper;
+}
+
+// XMultiPropertySet
+Reference< XPropertySetInfo > UnoGridModel::getPropertySetInfo( ) throw(RuntimeException)
+{
+ static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
+ return xInfo;
+}
+
+
+// ----------------------------------------------------
+// class UnoGridControl
+// ----------------------------------------------------
+UnoGridControl::UnoGridControl()
+: mSelectionMode(SelectionType(1))
+{
+}
+
+OUString UnoGridControl::GetComponentServiceName()
+{
+ return OUString::createFromAscii( "Grid" );
+}
+
+void SAL_CALL UnoGridControl::dispose( ) throw(RuntimeException)
+{
+ UnoControl::dispose();
+}
+
+void UnoGridControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer > & rParentPeer ) throw(uno::RuntimeException)
+{
+ UnoControlBase::createPeer( rxToolkit, rParentPeer );
+
+ Reference< XGridControl > xGrid( getPeer(), UNO_QUERY_THROW );
+
+ Reference<XGridDataListener> xListener ( getPeer(), UNO_QUERY_THROW );
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+
+ Reference<XGridDataModel> xGridDataModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "GridDataModel" )), UNO_QUERY_THROW );
+ xGridDataModel->addDataListener(xListener);
+}
+
+
+// -------------------------------------------------------------------
+// XGridControl
+// -------------------------------------------------------------------
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL UnoGridControl::getColumnModel() throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ Reference<XGridColumnModel> xGridColumnModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "ColumnModel" )), UNO_QUERY_THROW );
+
+ return xGridColumnModel;
+}
+
+void SAL_CALL UnoGridControl::setColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > & model) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ xPropSet->setPropertyValue(OUString::createFromAscii( "ColumnModel" ), Any (model));
+}
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL UnoGridControl::getDataModel() throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ Reference<XGridDataModel> xGridDataModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "GridDataModel" )), UNO_QUERY_THROW );
+
+ return xGridDataModel;
+}
+
+void SAL_CALL UnoGridControl::setDataModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > & model) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ xPropSet->setPropertyValue(OUString::createFromAscii( "GridDataModel" ), Any(model));
+}
+
+::sal_Int32 UnoGridControl::getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getItemIndexAtPoint( x, y );
+}
+
+/*
+void SAL_CALL UnoGridControl::addMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->addMouseListener( listener );
+}
+
+void SAL_CALL UnoGridControl::removeMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeMouseListener( listener );
+}
+*/
+// -------------------------------------------------------------------
+// XGridSelection
+// -------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL UnoGridControl::getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getMinSelectionIndex();
+}
+
+::sal_Int32 SAL_CALL UnoGridControl::getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getMaxSelectionIndex();
+}
+
+void SAL_CALL UnoGridControl::insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->insertIndexIntervall( start, length);
+}
+
+void SAL_CALL UnoGridControl::removeIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeIndexIntervall( start, length );
+}
+
+::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoGridControl::getSelection() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection();
+}
+
+::sal_Bool SAL_CALL UnoGridControl::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectionEmpty();
+}
+
+::sal_Bool SAL_CALL UnoGridControl::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index );
+}
+
+void SAL_CALL UnoGridControl::selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->selectRow( y );
+}
+
+void SAL_CALL UnoGridControl::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->addSelectionListener( listener );
+}
+
+void SAL_CALL UnoGridControl::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeSelectionListener( listener );
+}
+}
+
+Reference< XInterface > SAL_CALL GridControl_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridControl );
+}
+
+Reference< XInterface > SAL_CALL GridControlModel_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridModel );
+}
diff --git a/toolkit/source/controls/grid/gridcontrol.hxx b/toolkit/source/controls/grid/gridcontrol.hxx
new file mode 100644
index 000000000000..5648c812fbff
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcontrol.hxx
@@ -0,0 +1,124 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: gridcontrol.hxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef TOOLKIT_GRID_CONTROL_HXX
+#define TOOLKIT_GRID_CONTROL_HXX
+
+#include <com/sun/star/awt/grid/XGridControl.hpp>
+#include <com/sun/star/view/SelectionType.hpp>
+#include <toolkit/controls/unocontrols.hxx>
+#include <toolkit/controls/unocontrolmodel.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+#include <toolkit/helper/listenermultiplexer.hxx>
+
+namespace toolkit {
+
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+
+// ===================================================================
+// = UnoGridModel
+// ===================================================================
+class UnoGridModel : public UnoControlModel
+{
+protected:
+ Any ImplGetDefaultValue( sal_uInt16 nPropId ) const;
+ ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
+
+public:
+ UnoGridModel();
+ UnoGridModel( const UnoGridModel& rModel );
+
+ UnoControlModel* Clone() const;
+
+ // ::com::sun::star::beans::XMultiPropertySet
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::io::XPersistObject
+ ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ DECLIMPL_SERVICEINFO_DERIVED( UnoGridModel, UnoControlModel, szServiceName_GridControlModel )
+};
+
+
+// ===================================================================
+// = UnoGridControl
+// ===================================================================
+class UnoGridControl : public ::cppu::ImplInheritanceHelper1< UnoControlBase, ::com::sun::star::awt::grid::XGridControl >
+{
+public:
+ UnoGridControl();
+ ::rtl::OUString GetComponentServiceName();
+
+ // ::com::sun::star::lang::XComponent
+ void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::awt::XControl
+ void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& Toolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::awt::grid::XGridControl
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL getColumnModel() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > & model) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL getDataModel() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setDataModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > & model) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+ //virtual void SAL_CALL addMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ //virtual void SAL_CALL removeMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::awt::grid::XGridSelection
+
+ virtual ::sal_Int32 SAL_CALL getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL getSelection() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::lang::XServiceInfo
+ DECLIMPL_SERVICEINFO_DERIVED( UnoGridControl, UnoControlBase, szServiceName_GridControl )
+
+ using UnoControl::getPeer;
+private:
+ ::com::sun::star::view::SelectionType mSelectionMode;
+};
+
+} // toolkit
+
+#endif // _TOOLKIT_TREE_CONTROL_HXX
diff --git a/toolkit/source/controls/grid/makefile.mk b/toolkit/source/controls/grid/makefile.mk
new file mode 100644
index 000000000000..7c904b3ef02e
--- /dev/null
+++ b/toolkit/source/controls/grid/makefile.mk
@@ -0,0 +1,54 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.3 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=toolkit
+TARGET=grid
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/makefile.pmk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/gridcontrol.obj\
+ $(SLO)$/defaultgriddatamodel.obj\
+ $(SLO)$/defaultgridcolumnmodel.obj\
+ $(SLO)$/gridcolumn.obj
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/toolkit/source/controls/roadmapcontrol.cxx b/toolkit/source/controls/roadmapcontrol.cxx
index 724421da5f3c..da3a265130b8 100644
--- a/toolkit/source/controls/roadmapcontrol.cxx
+++ b/toolkit/source/controls/roadmapcontrol.cxx
@@ -104,6 +104,7 @@ static void lcl_throwIndexOutOfBoundsException( )
ImplRegisterProperty( BASEPROPERTY_COMPLETE );
ImplRegisterProperty( BASEPROPERTY_ACTIVATED );
ImplRegisterProperty( BASEPROPERTY_CURRENTITEMID );
+ ImplRegisterProperty( BASEPROPERTY_TABSTOP );
ImplRegisterProperty( BASEPROPERTY_TEXT );
}
diff --git a/toolkit/source/helper/property.cxx b/toolkit/source/helper/property.cxx
index 0560afbd835f..e71c03bae47d 100644
--- a/toolkit/source/helper/property.cxx
+++ b/toolkit/source/helper/property.cxx
@@ -48,6 +48,9 @@
#include <com/sun/star/awt/FontStrikeout.hpp>
#include <com/sun/star/awt/FontPitch.hpp>
#include <com/sun/star/awt/tree/XTreeDataModel.hpp>
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
+#include <com/sun/star/awt/grid/ScrollBarMode.hpp>
#include <com/sun/star/view/SelectionType.hpp>
#include <com/sun/star/style/VerticalAlignment.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
@@ -252,7 +255,6 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount )
DECL_PROP_2 ( "ValueStep", VALUESTEP_DOUBLE, double, BOUND, MAYBEDEFAULT ),
DECL_PROP_3 ( "VerticalAlign", VERTICALALIGN, VerticalAlignment, BOUND, MAYBEDEFAULT, MAYBEVOID ),
DECL_DEP_PROP_3 ( "VisibleSize", VISIBLESIZE, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
-
DECL_PROP_2 ( "Activated", ACTIVATED, sal_Bool, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "Complete", COMPLETE, sal_Bool, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "CurrentItemID", CURRENTITEMID, sal_Int16, BOUND, MAYBEDEFAULT ),
@@ -273,6 +275,11 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount )
DECL_PROP_2 ( "URL", URL, ::rtl::OUString, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "WritingMode", WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT ),
DECL_PROP_3 ( "ContextWritingMode", CONTEXT_WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT ),
+ DECL_PROP_2 ( "ShowRowHeader", GRID_SHOWROWHEADER, sal_Bool, BOUND, MAYBEDEFAULT ),
+ DECL_PROP_2 ( "ShowColumnHeader", GRID_SHOWCOLUMNHEADER, sal_Bool, BOUND, MAYBEDEFAULT ),
+ DECL_PROP_3 ( "GridDataModel", GRID_DATAMODEL, Reference< ::com::sun::star::awt::grid::XGridDataModel >, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "ColumnModel", GRID_COLUMNMODEL, Reference< ::com::sun::star::awt::grid::XGridColumnModel >, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "SelectionModel", GRID_SELECTIONMODE, ::com::sun::star::view::SelectionType, BOUND, MAYBEDEFAULT, MAYBEVOID ),
DECL_PROP_2 ( "EnableVisible", ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT )
};
pPropertyInfos = aImplPropertyInfos;
diff --git a/toolkit/source/helper/registerservices.cxx b/toolkit/source/helper/registerservices.cxx
index d9264f22cb51..ea29c9810beb 100644
--- a/toolkit/source/helper/registerservices.cxx
+++ b/toolkit/source/helper/registerservices.cxx
@@ -202,6 +202,12 @@ IMPL_CREATEINSTANCE( UnoThrobberControlModel )
extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL TreeControl_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL TreeControlModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL MutableTreeDataModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridControl_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridControlModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DefaultGridDataModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DefaultGridColumnModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridColumn_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+
extern sal_Bool SAL_CALL comp_AsyncCallback_component_writeInfo( void * serviceManager, void * registryKey );
extern void * SAL_CALL comp_AsyncCallback_component_getFactory( const char * implName, void * serviceManager, void * registryKey );
@@ -287,6 +293,11 @@ TOOLKIT_DLLPUBLIC sal_Bool SAL_CALL component_writeInfo( void* _pServiceManager,
registerServices( xRegistryKey, "UnoThrobberControl", szServiceName_UnoThrobberControl );
registerServices( xRegistryKey, "UnoFixedHyperlinkControl", szServiceName_UnoControlFixedHyperlink );
registerServices( xRegistryKey, "UnoControlFixedHyperlinkModel", szServiceName_UnoControlFixedHyperlinkModel );
+ registerServices( xRegistryKey, "GridControl", szServiceName_GridControl );
+ registerServices( xRegistryKey, "GridControlModel", szServiceName_GridControlModel );
+ registerServices( xRegistryKey, "DefaultGridDataModel", szServiceName_DefaultGridDataModel );
+ registerServices( xRegistryKey, "DefaultGridColumnModel", szServiceName_DefaultGridColumnModel );
+ registerServices( xRegistryKey, "GridColumn", szServiceName_GridColumn );
comp_AsyncCallback_component_writeInfo( _pServiceManager, _pRegistryKey );
comp_Layout_component_writeInfo( _pServiceManager, _pRegistryKey );
@@ -369,6 +380,12 @@ TOOLKIT_DLLPUBLIC void* SAL_CALL component_getFactory( const sal_Char* sImplemen
CHECKANDCREATEFACTORY( UnoThrobberControl, szServiceName_UnoThrobberControl, NULL )
CHECKANDCREATEFACTORY( UnoFixedHyperlinkControl, szServiceName_UnoControlFixedHyperlink, NULL )
CHECKANDCREATEFACTORY( UnoControlFixedHyperlinkModel, szServiceName_UnoControlFixedHyperlinkModel, NULL )
+ CHECKANDCREATEFACTORY( GridControl, szServiceName_GridControl, NULL );
+ CHECKANDCREATEFACTORY( GridControlModel, szServiceName_GridControlModel, NULL );
+ CHECKANDCREATEFACTORY( DefaultGridDataModel, szServiceName_DefaultGridDataModel, NULL );
+ CHECKANDCREATEFACTORY( DefaultGridColumnModel, szServiceName_DefaultGridColumnModel, NULL );
+ CHECKANDCREATEFACTORY( GridColumn, szServiceName_GridColumn, NULL );
+
if ( rtl_str_compare( sImplementationName, "com.sun.star.awt.comp.AsyncCallback" ) == 0 )
return comp_AsyncCallback_component_getFactory( sImplementationName, _pServiceManager, _pRegistryKey );
diff --git a/toolkit/source/helper/servicenames.cxx b/toolkit/source/helper/servicenames.cxx
index 903f18f95eae..f00e7a2b09fa 100644
--- a/toolkit/source/helper/servicenames.cxx
+++ b/toolkit/source/helper/servicenames.cxx
@@ -101,4 +101,8 @@ const sal_Char __FAR_DATA szServiceName_UnoThrobberControlModel[] = "com.sun.sta
const sal_Char __FAR_DATA szServiceName_UnoThrobberControl[] = "com.sun.star.awt.UnoThrobberControl";
const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlink[] = "com.sun.star.awt.UnoControlFixedHyperlink";
const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlinkModel[] = "com.sun.star.awt.UnoControlFixedHyperlinkModel";
-
+const sal_Char __FAR_DATA szServiceName_GridControl[] = "com.sun.star.awt.grid.UnoControlGrid";
+const sal_Char __FAR_DATA szServiceName_GridControlModel[] = "com.sun.star.awt.grid.UnoControlGridModel";
+const sal_Char __FAR_DATA szServiceName_DefaultGridDataModel[] = "com.sun.star.awt.grid.DefaultGridDataModel";
+const sal_Char __FAR_DATA szServiceName_DefaultGridColumnModel[] = "com.sun.star.awt.grid.DefaultGridColumnModel";
+const sal_Char __FAR_DATA szServiceName_GridColumn[] = "com.sun.star.awt.grid.GridColumn";
diff --git a/toolkit/source/helper/unowrapper.cxx b/toolkit/source/helper/unowrapper.cxx
index a652d493e653..96b8908558a7 100644
--- a/toolkit/source/helper/unowrapper.cxx
+++ b/toolkit/source/helper/unowrapper.cxx
@@ -65,6 +65,13 @@ using namespace ::com::sun::star;
case WINDOW_OKBUTTON:
case WINDOW_CANCELBUTTON: return new VCLXButton;
case WINDOW_CHECKBOX: return new VCLXCheckBox;
+ // --> OD 2009-06-29 #i95042#
+ // A Window of type <MetricBox> is inherited from type <ComboBox>.
+ // Thus, it does make more sense to return a <VCLXComboBox> instance
+ // instead of only a <VCLXWindow> instance, especially regarding its
+ // corresponding accessibility API.
+ case WINDOW_METRICBOX:
+ // <--
case WINDOW_COMBOBOX: return new VCLXComboBox;
case WINDOW_SPINFIELD:
case WINDOW_NUMERICFIELD:
@@ -109,7 +116,6 @@ using namespace ::com::sun::star;
// case WINDOW_DATEBOX:
// case WINDOW_GROUPBOX:
// case WINDOW_LONGCURRENCYBOX:
- // case WINDOW_METRICBOX:
// case WINDOW_SPLITTER:
// case WINDOW_STATUSBAR:
// case WINDOW_TABCONTROL:
diff --git a/toolkit/source/helper/vclunohelper.cxx b/toolkit/source/helper/vclunohelper.cxx
index 029e520baca6..89bde88d018e 100644
--- a/toolkit/source/helper/vclunohelper.cxx
+++ b/toolkit/source/helper/vclunohelper.cxx
@@ -45,6 +45,8 @@
#include <com/sun/star/awt/XControlContainer.hpp>
#include <com/sun/star/awt/FontWeight.hpp>
#include <com/sun/star/awt/FontWidth.hpp>
+#include <com/sun/star/awt/KeyModifier.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/embed/EmbedMapUnits.hpp>
@@ -67,6 +69,8 @@
#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/awt/Point.hpp>
+using namespace ::com::sun::star;
+
// ----------------------------------------------------
// class VCLUnoHelper
// ----------------------------------------------------
@@ -745,3 +749,54 @@ com::sun::star::awt::Point VCLUnoHelper::ConvertToAWTPoint(::Point /* VCLPoint *
{
return ::com::sun::star::awt::Rectangle( _rRect.Left(), _rRect.Top(), _rRect.GetWidth(), _rRect.GetHeight() );
}
+
+awt::MouseEvent VCLUnoHelper::createMouseEvent( const ::MouseEvent& _rVclEvent, const uno::Reference< uno::XInterface >& _rxContext )
+{
+ awt::MouseEvent aMouseEvent;
+ aMouseEvent.Source = _rxContext;
+
+ aMouseEvent.Modifiers = 0;
+ if ( _rVclEvent.IsShift() )
+ aMouseEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::SHIFT;
+ if ( _rVclEvent.IsMod1() )
+ aMouseEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD1;
+ if ( _rVclEvent.IsMod2() )
+ aMouseEvent.Modifiers |= ::com::sun::star::awt::KeyModifier::MOD2;
+
+ aMouseEvent.Buttons = 0;
+ if ( _rVclEvent.IsLeft() )
+ aMouseEvent.Buttons |= ::com::sun::star::awt::MouseButton::LEFT;
+ if ( _rVclEvent.IsRight() )
+ aMouseEvent.Buttons |= ::com::sun::star::awt::MouseButton::RIGHT;
+ if ( _rVclEvent.IsMiddle() )
+ aMouseEvent.Buttons |= ::com::sun::star::awt::MouseButton::MIDDLE;
+
+ aMouseEvent.X = _rVclEvent.GetPosPixel().X();
+ aMouseEvent.Y = _rVclEvent.GetPosPixel().Y();
+ aMouseEvent.ClickCount = _rVclEvent.GetClicks();
+ aMouseEvent.PopupTrigger = sal_False;
+
+ return aMouseEvent;
+}
+
+awt::KeyEvent VCLUnoHelper::createKeyEvent( const ::KeyEvent& _rVclEvent, const uno::Reference< uno::XInterface >& _rxContext )
+{
+ awt::KeyEvent aKeyEvent;
+ aKeyEvent.Source = _rxContext;
+
+ aKeyEvent.Modifiers = 0;
+ if ( _rVclEvent.GetKeyCode().IsShift() )
+ aKeyEvent.Modifiers |= awt::KeyModifier::SHIFT;
+ if ( _rVclEvent.GetKeyCode().IsMod1() )
+ aKeyEvent.Modifiers |= awt::KeyModifier::MOD1;
+ if ( _rVclEvent.GetKeyCode().IsMod2() )
+ aKeyEvent.Modifiers |= awt::KeyModifier::MOD2;
+ if ( _rVclEvent.GetKeyCode().IsMod3() )
+ aKeyEvent.Modifiers |= awt::KeyModifier::MOD3;
+
+ aKeyEvent.KeyCode = _rVclEvent.GetKeyCode().GetCode();
+ aKeyEvent.KeyChar = _rVclEvent.GetCharCode();
+ aKeyEvent.KeyFunc = ::sal::static_int_cast< sal_Int16 >( _rVclEvent.GetKeyCode().GetFunction());
+
+ return aKeyEvent;
+}
diff --git a/toolkit/util/makefile.mk b/toolkit/util/makefile.mk
index d6a1e5f15c65..3c5da82d0dd9 100644
--- a/toolkit/util/makefile.mk
+++ b/toolkit/util/makefile.mk
@@ -52,6 +52,7 @@ USE_DEFFILE=TRUE
LIB1TARGET= $(SLB)$/$(TARGET).lib
LIB1FILES= $(SLB)$/awt.lib \
$(SLB)$/tree.lib \
+ $(SLB)$/grid.lib \
$(SLB)$/controls.lib \
$(SLB)$/helper.lib\
$(SLB)$/layout-core.lib \
@@ -79,22 +80,6 @@ DEF1DEPN =$(LIB1TARGET)
DEF1DES =TK
DEFLIB1NAME =tk
-.IF "$(OS)"=="MACOSX"
-
-# [ed] 6/16/02 Add in X libraries if we're building X
-
-.IF "$(GUIBASE)"=="unx"
-SHL1STDLIBS +=\
- -lX11 -lXt -lXmu
-.ENDIF
-
-.ELSE
-.IF "$(GUI)"=="UNX"
-SHL1STDLIBS +=\
- -lX11
-.ENDIF
-.ENDIF
-
RESLIB1IMAGES=$(PRJ)$/source$/awt
RES1FILELIST=$(SRS)$/awt.srs
RESLIB1NAME=$(TARGET)
diff --git a/toolkit/util/toolkit.xml b/toolkit/util/toolkit.xml
index 8ec1a48d440d..2fb4588550bc 100644
--- a/toolkit/util/toolkit.xml
+++ b/toolkit/util/toolkit.xml
@@ -701,4 +701,50 @@
<status value="beta" />
<supported-service>com.sun.star.awt.tree.MutableTreeNode</supported-service>
</component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.UnoGridModel</name>
+ <description>specifies the model of a grid control</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.UnoControlGridModel</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.UnoGridControl</name>
+ <description>specifies a grid control</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.UnoControlGrid</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.DefaultGridDataModel</name>
+ <description>specifies the grid control default data model</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.DefaultGridDataModel</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.DefaultGridColumnModel</name>
+ <description>specifies the grid control default column model</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.DefaultGridColumnModel</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.GridColumn</name>
+ <description>specifies the grid coloumn model</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.GridColumn</supported-service>
+ </component-description>
+
</module-description> \ No newline at end of file
diff --git a/tools/inc/tools/errcode.hxx b/tools/inc/tools/errcode.hxx
index af420397eba2..337fedfea44a 100644
--- a/tools/inc/tools/errcode.hxx
+++ b/tools/inc/tools/errcode.hxx
@@ -314,6 +314,7 @@ inline ULONG ERRCODE_TOERROR( ULONG x )
#define PRINTER_ABORT ERRCODE_IO_ABORT
#define PRINTER_OUTOFMEMORY ERRCODE_IO_OUTOFMEMORY
#define PRINTER_GENERALERROR ERRCODE_IO_GENERAL
+#define PRINTER_ACCESSDENIED ERRCODE_IO_ACCESSDENIED
#define ERRCODE_INET_NAME_RESOLVE (ERRCODE_AREA_INET | ERRCODE_CLASS_READ | 1)
#define ERRCODE_INET_CONNECT (ERRCODE_AREA_INET | ERRCODE_CLASS_READ | 2)
diff --git a/tools/inc/tools/poly.hxx b/tools/inc/tools/poly.hxx
index 606c9c91e879..a77782bc963c 100644
--- a/tools/inc/tools/poly.hxx
+++ b/tools/inc/tools/poly.hxx
@@ -260,7 +260,6 @@ private:
ImplPolyPolygon* mpImplPolyPolygon;
//#if 0 // _SOLAR__PRIVATE
- TOOLS_DLLPRIVATE void *ImplCreateGPCPolygon() const;
TOOLS_DLLPRIVATE void ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const;
TOOLS_DLLPRIVATE void *ImplCreateArtVpath() const;
TOOLS_DLLPRIVATE void ImplSetFromArtVpath( void *pVpath );
diff --git a/tools/inc/tools/rc.h b/tools/inc/tools/rc.h
index 11d6e2030162..8bad7dbf3f8a 100644
--- a/tools/inc/tools/rc.h
+++ b/tools/inc/tools/rc.h
@@ -102,6 +102,7 @@ typedef short RSWND_STYLE;
//#define NUMERICFORMATTER_I12 0x08 // erAck: got rid of class International (2005-06-17)
#define NUMERICFORMATTER_DECIMALDIGITS 0x10
#define NUMERICFORMATTER_VALUE 0x20
+#define NUMERICFORMATTER_NOTHOUSANDSEP 0x40
#define METRICFORMATTER_UNIT 0x01
#define METRICFORMATTER_CUSTOMUNITTEXT 0x02
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index 2aff0d734bf6..f7ffed5e4dd1 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -407,7 +407,7 @@ static INetURLObject::SchemeInfo const aSchemeInfoMap[INET_PROT_END]
{ "out", "out://", 0, true, false, false, false, false, false,
false, false },
{ "vnd.sun.star.wfs", "vnd.sun.star.wfs://", 0, true, false, false,
- false, true, false, true, false },
+ false, true, true, true, false },
{ "vnd.sun.star.hier", "vnd.sun.star.hier:", 0, true, false, false,
false, false, false, true, false },
{ "vim", "vim://", 0, true, true, false, true, false, false, true,
@@ -4825,9 +4825,8 @@ bool INetURLObject::setFSysPath(rtl::OUString const & rFSysPath,
break;
}
- rtl::OUStringBuffer aSynAbsURIRef(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file://"),
- RTL_TEXTENCODING_ASCII_US));
+ rtl::OUStringBuffer aSynAbsURIRef(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file://")));
+
switch (eStyle)
{
case FSYS_VOS:
diff --git a/tools/source/generic/makefile.mk b/tools/source/generic/makefile.mk
index 9562999bd5d7..6340e4daae08 100644
--- a/tools/source/generic/makefile.mk
+++ b/tools/source/generic/makefile.mk
@@ -39,10 +39,6 @@ TARGET=gen
.INCLUDE : settings.mk
.INCLUDE : $(PRJ)$/util$/makefile.pmk
-.IF "$(WITH_GPC)"!="NO"
-CDEFS+=-DHAVE_GPC_H
-.ENDIF
-
# --- Files --------------------------------------------------------
EXCEPTIONSFILES = $(SLO)$/poly.obj $(OBJ)$/poly.obj
diff --git a/tools/source/generic/poly2.cxx b/tools/source/generic/poly2.cxx
index a560c961f481..ff97e6006a41 100644
--- a/tools/source/generic/poly2.cxx
+++ b/tools/source/generic/poly2.cxx
@@ -33,17 +33,10 @@
#define _SV_POLY2_CXX
-extern "C"
-{
-#if defined (HAVE_GPC_H) && !defined (__gpc_h)
-# include <external/gpc/gpc.h>
-#else
-# define GPC_INT 0
-# define GPC_UNION 1
-# define GPC_DIFF 2
-# define GPC_XOR 3
-#endif // HAVE_GPC_H
-}
+#define POLY_CLIP_INT 0
+#define POLY_CLIP_UNION 1
+#define POLY_CLIP_DIFF 2
+#define POLY_CLIP_XOR 3
#include <rtl/math.hxx>
#include <poly.h>
@@ -389,115 +382,34 @@ void PolyPolygon::AdaptiveSubdivide( PolyPolygon& rResult, const double d ) cons
void PolyPolygon::GetIntersection( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_INT );
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_INT );
}
// -----------------------------------------------------------------------
void PolyPolygon::GetUnion( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_UNION );
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_UNION );
}
// -----------------------------------------------------------------------
void PolyPolygon::GetDifference( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_DIFF );
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_DIFF );
}
// -----------------------------------------------------------------------
void PolyPolygon::GetXOR( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_XOR );
-}
-
-// -----------------------------------------------------------------------
-
-#ifdef HAVE_GPC_H
-
-void* PolyPolygon::ImplCreateGPCPolygon() const
-{
- gpc_polygon* pRet = new gpc_polygon;
-
- pRet->num_contours = 0;
- pRet->hole = NULL;
- pRet->contour = NULL;
-
- for( USHORT i = 0, nCount = Count(); i < nCount; i++ )
- {
- const Polygon& rPoly = GetObject( i );
- const USHORT nSize = rPoly.GetSize();
-
- if( nSize > 1 )
- {
- gpc_vertex_list aVertexList;
- gpc_vertex* pVertex;
-
- aVertexList.num_vertices = nSize;
- aVertexList.vertex = pVertex = new gpc_vertex[ nSize ];
-
- for( USHORT nPos = 0; nPos < nSize; nPos++, pVertex++ )
- {
- const Point& rPoint = rPoly[ nPos ];
- pVertex->x = rPoint.X();
- pVertex->y = rPoint.Y();
- }
-
- gpc_add_contour( pRet, &aVertexList, 0 );
- delete[] aVertexList.vertex;
- }
- }
-
- return pRet;
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_XOR );
}
// -----------------------------------------------------------------------
void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const
{
- gpc_polygon* pGPCPoly1 = (gpc_polygon*) ImplCreateGPCPolygon();
- gpc_polygon* pGPCPoly2 = (gpc_polygon*) rPolyPoly.ImplCreateGPCPolygon();
- gpc_polygon* pResult = new gpc_polygon;
-
- pResult->num_contours = 0;
- pResult->hole = NULL;
- pResult->contour = NULL;
-
- gpc_polygon_clip( (gpc_op) nOperation, pGPCPoly1, pGPCPoly2, pResult );
-
- rResult.Clear();
-
- for( int i = 0; i < pResult->num_contours; i++ )
- {
- gpc_vertex_list& rVertexList = pResult->contour[ i ];
- Polygon aPoly( ::sal::static_int_cast< USHORT >( rVertexList.num_vertices ) );
-
- for( int j = 0; j < rVertexList.num_vertices; j++ )
- {
- Point& rPt = aPoly[ ::sal::static_int_cast< USHORT >( j ) ];
- rPt.X() = FRound( rVertexList.vertex[ j ].x );
- rPt.Y() = FRound( rVertexList.vertex[ j ].y );
- }
-
- rResult.Insert( aPoly );
- }
-
- gpc_free_polygon( pGPCPoly1 );
- delete pGPCPoly1;
-
- gpc_free_polygon( pGPCPoly2 );
- delete pGPCPoly2;
-
- gpc_free_polygon( pResult );
- delete pResult;
-}
-
-#else
-
-void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const
-{
// Convert to B2DPolyPolygon, temporarily. It might be
// advantageous in the future, to have a PolyPolygon adaptor that
// just simulates a B2DPolyPolygon here...
@@ -514,21 +426,21 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR
// All code extracted from svx/source/svdraw/svedtv2.cxx
// -----------------------------------------------------
- case GPC_UNION:
+ case POLY_CLIP_UNION:
{
// merge A and B (OR)
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationOr(aMergePolyPolygonA, aMergePolyPolygonB);
break;
}
- case GPC_DIFF:
+ case POLY_CLIP_DIFF:
{
// substract B from A (DIFF)
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationDiff(aMergePolyPolygonA, aMergePolyPolygonB);
break;
}
- case GPC_XOR:
+ case POLY_CLIP_XOR:
{
// compute XOR between poly A and B
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationXor(aMergePolyPolygonA, aMergePolyPolygonB);
@@ -536,7 +448,7 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR
}
default:
- case GPC_INT:
+ case POLY_CLIP_INT:
{
// cut poly 1 against polys 2..n (AND)
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationAnd(aMergePolyPolygonA, aMergePolyPolygonB);
@@ -547,8 +459,6 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR
rResult = PolyPolygon( aMergePolyPolygonA );
}
-#endif // HAVE_GPC_H
-
// -----------------------------------------------------------------------
USHORT PolyPolygon::Count() const
diff --git a/tools/util/makefile.mk b/tools/util/makefile.mk
index 546ef29a449a..d9ba720543e3 100644
--- a/tools/util/makefile.mk
+++ b/tools/util/makefile.mk
@@ -113,13 +113,6 @@ SHL1IMPLIB= itools
SHL1USE_EXPORTS=name
SHL1STDLIBS+= $(SALLIB) $(VOSLIB) $(BASEGFXLIB) $(I18NISOLANGLIB) $(COMPHELPERLIB)
-.IF "$(WITH_LIBART)"=="YES"
-SHL1STDLIBS+= $(LIBART_LIBS)
-.ELSE
-SHL1STDLIBS+= $(GPC3RDLIB)
-.ENDIF
-
-
.IF "$(GUI)"=="WNT"
SHL1STDLIBS+= $(SHELL32LIB) \
$(MPRLIB) \
diff --git a/tools/workben/solar.c b/tools/workben/solar.c
index 91460614fe9b..05e9c103b8b4 100644
--- a/tools/workben/solar.c
+++ b/tools/workben/solar.c
@@ -352,6 +352,8 @@ void Description_Print( struct Description* pThis, char* name )
fprintf( f, "#define __SIZEOFDOUBLE\t%d\n", sizeof( double ) );
fprintf( f, "#define __IEEEDOUBLE\n" );
fprintf( f, "#define _SOLAR_NODESCRIPTION\n" );
+
+ fclose(f);
}
int
diff --git a/transex3/prj/build.lst b/transex3/prj/build.lst
index 91a5056acce3..0017471af134 100644
--- a/transex3/prj/build.lst
+++ b/transex3/prj/build.lst
@@ -1,7 +1,10 @@
-tr transex3 : tools NULL
+tr transex3 : tools libxslt berkeleydb LUCENE:lucene NULL
tr transex3 usr1 - all tr_mkout NULL
tr transex3\inc nmake - all tr_inc NULL
tr transex3\source nmake - all tr_src tr_inc NULL
tr transex3\layout nmake - all rt_layout tr_src tr_inc NULL
tr transex3\java\l10nconv nmake - all tr_conv NULL
tr transex3\java\receditor nmake - all tr_rece NULL
+tr transex3\source\help nmake - all tr_bla_help NULL
+tr transex3\source\filter\utils nmake - all tr_bla_utils NULL
+tr transex3\source\filter\merge nmake - all tr_bla_merge tr_bla_utils NULL
diff --git a/transex3/prj/d.lst b/transex3/prj/d.lst
index 54d1ab156205..39bafa4694c6 100644
--- a/transex3/prj/d.lst
+++ b/transex3/prj/d.lst
@@ -1,4 +1,10 @@
mkdir: %_DEST%\inc%_EXT%\transex3
+mkdir: %_DEST%\bin%_EXT%
+mkdir: %_DEST%\bin%_EXT%\help
+mkdir: %_DEST%\bin%_EXT%\help\com
+mkdir: %_DEST%\bin%_EXT%\help\com\sun
+mkdir: %_DEST%\bin%_EXT%\help\com\sun\star
+mkdir: %_DEST%\bin%_EXT%\help\com\sun\star\help
..\%__SRC%\bin\cfgex.exe %_DEST%\bin%_EXT%\cfgex.exe
..\%__SRC%\bin\cfgex %_DEST%\bin%_EXT%\cfgex
@@ -20,6 +26,14 @@ mkdir: %_DEST%\inc%_EXT%\transex3
..\%__SRC%\bin\txtconv %_DEST%\bin%_EXT%\txtconv
..\%__SRC%\bin\tralay.exe %_DEST%\bin%_EXT%\tralay.exe
..\%__SRC%\bin\tralay %_DEST%\bin%_EXT%\tralay
+..\%__SRC%\bin\ulfconv %_DEST%\bin%_EXT%\ulfconv
+..\%__SRC%\class\FCFGMerge.jar %_DEST%\bin%_EXT%\FCFGMerge.jar
+..\%__SRC%\class\HelpIndexerTool.jar %_DEST%\bin%_EXT%\HelpIndexerTool.jar
+..\%__SRC%\bin\HelpLinker %_DEST%\bin%_EXT%\HelpLinker
+..\%__SRC%\bin\HelpCompiler %_DEST%\bin%_EXT%\HelpCompiler
+..\%__SRC%\bin\HelpCompiler.exe %_DEST%\bin%_EXT%\HelpCompiler.exe
+..\%__SRC%\bin\HelpLinker.exe %_DEST%\bin%_EXT%\HelpLinker.exe
+..\%__SRC%\bin\HelpLinker* %_DEST%\bin%_EXT%
..\%__SRC%\class\converter\converter.jar %_DEST%\bin%_EXT%\converter.jar
..\%__SRC%\doc\converter_javadoc.zip %_DEST%\bin%_EXT%\converter_javadoc.zip
@@ -38,3 +52,8 @@ mkdir: %_DEST%\inc%_EXT%\transex3
..\inc\utf8conv.hxx %_DEST%\inc%_EXT%\transex3\utf8conv.hxx
..\%__SRC%\lib\transex.lib %_DEST%\lib%_EXT%\transex.lib
..\%__SRC%\lib\libtransex.a %_DEST%\lib%_EXT%\libtransex.a
+
+..\source\help\compilehelp.hxx %_DEST%\inc%_EXT%\transex3\compilehelp.hxx
+#..\source\help\helplinkerdllapi.h %_DEST%\inc%_EXT%\transex3\helplinkerdllapi.h
+..\%__SRC%\lib\* %_DEST%\lib%_EXT%\*
+..\%__SRC%\class\com\sun\star\help\* %_DEST%\bin%_EXT%\help\com\sun\star\help\*
diff --git a/transex3/source/filter/merge/FCFGMerge.cfg b/transex3/source/filter/merge/FCFGMerge.cfg
new file mode 100644
index 000000000000..46fcccafe7e4
--- /dev/null
+++ b/transex3/source/filter/merge/FCFGMerge.cfg
@@ -0,0 +1,125 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: FCFGMerge.cfg,v $
+#
+# $Revision: 1.5 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+#************************************************
+# Specify the verbose mode of this tool.
+# 1 = show errors only
+# 2 = show errors/warnings (default)
+# 3 = show errors/warnings and some generic infos
+# 4 = show anything (including detailed infos)
+#
+# [OPTIONAL]
+#************************************************
+
+loglevel = 2
+
+#************************************************
+# This extension is used for all XML files. It doesnt
+# matter if its used for reading fragments or writing
+# XML packages.
+# Must be given without any additional signes like "."
+# or "*."!
+#
+# [REQUIRED]
+#************************************************
+
+extension_xcu=xcu
+
+#************************************************
+# This extension is used for all Package files. It doesnt
+# matter if its used for reading such files or writing
+# it.
+# Must be given without any additional signes like "."
+# or "*."!
+#
+# [REQUIRED]
+#************************************************
+
+extension_pkg=pkg
+
+#************************************************
+# These values are used to generate a correct XML
+# header.
+# Note: The property "xmlpackage" must be specified
+# via command line. There exists more then one
+# possible value.
+#
+# [REQUIRED]
+#************************************************
+
+xmlversion = 1.0
+xmlencoding = UTF-8
+xmlpath = org.openoffice.TypeDetection
+#xmlpackage =
+
+#************************************************
+# These values are used to name the configuration
+# sets inside the generated XCM file for different
+# item groups like e.g. types, filters etcpp.
+#
+# [REQUIRED]
+#************************************************
+
+setname_types = Types
+setname_filters = Filters
+setname_frameloaders = FrameLoaders
+setname_contenthandlers = ContentHandlers
+
+subdir_types = types
+subdir_filters = filters
+subdir_frameloaders = frameloaders
+subdir_contenthandlers = contenthandlers
+
+#************************************************
+# This delimiter is used to split every
+# item list of the package configuration files
+# (which are temp. created by the make proccess)
+# into its tokens.
+#
+# [REQUIRED]
+#************************************************
+delimiter=,
+
+#************************************************
+# Enable/disable removing of leading/trailing withespaces
+# during splitting stringlists.
+#
+# [REQUIRED]
+#************************************************
+trim=true
+
+#************************************************
+# Enable/disable removing of leading/trailing "-signs
+# during splitting stringlists.
+#
+# [REQUIRED]
+#************************************************
+decode=false
diff --git a/transex3/source/filter/merge/FCFGMerge.java b/transex3/source/filter/merge/FCFGMerge.java
new file mode 100644
index 000000000000..7fbfa8a0c986
--- /dev/null
+++ b/transex3/source/filter/merge/FCFGMerge.java
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: FCFGMerge.java,v $
+ * $Revision: 1.5 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.filter.config.tools.merge;
+
+//_______________________________________________
+
+import java.lang.*;
+import java.util.*;
+import java.io.*;
+import com.sun.star.filter.config.tools.utils.*;
+
+//_______________________________________________
+
+/**
+ * Its a simple command line tool, which can merge different XML fragments
+ * together. Such fragments must exist as files on disk, will be moved into
+ * one file together on disk.
+ *
+ *
+ */
+public class FCFGMerge
+{
+ //___________________________________________
+ // const
+
+ private static final java.lang.String CFGFILE = "com/sun/star/filter/config/tools/merge/FCFGMerge.cfg";
+ private static final java.lang.String PROP_LOGLEVEL = "loglevel";
+
+ //___________________________________________
+ // main
+
+ public static void main(java.lang.String[] sCmdLine)
+ {
+ FCFGMerge.printCopyright();
+
+ // create log object in default mode "WARNINGS"
+ // If a command line parameter indicates another
+ // level - change it!
+ Logger aLog = new Logger();
+
+ try
+ {
+ // merge config file and overwrite properties
+ // via command line
+ ConfigHelper aCfg = null;
+ aCfg = new ConfigHelper(CFGFILE, sCmdLine);
+
+ // update log level
+ int nLogLevel = aCfg.getInt(PROP_LOGLEVEL, Logger.LEVEL_WARNINGS);
+ aLog = new Logger(nLogLevel);
+
+ // help requested?
+ if (aCfg.isHelp())
+ {
+ FCFGMerge.printHelp();
+ System.exit(-1);
+ }
+
+ // create new merge object and start operation
+ Merger aMerger = new Merger(aCfg, aLog);
+ aMerger.merge();
+ }
+ catch(java.lang.Throwable ex)
+ {
+ aLog.setException(ex);
+ System.exit(-1);
+ }
+
+ System.exit(0);
+ }
+
+ //___________________________________________
+
+ /** prints out a copyright message on stdout.
+ */
+ private static void printCopyright()
+ {
+ java.lang.StringBuffer sOut = new java.lang.StringBuffer(256);
+ sOut.append("FCFGMerge\n");
+ sOut.append("Copyright: 2003 by Sun Microsystems, Inc.\n");
+ sOut.append("All Rights Reserved.\n");
+ System.out.println(sOut.toString());
+ }
+
+ //___________________________________________
+
+ /** prints out a help message on stdout.
+ */
+ private static void printHelp()
+ {
+ java.lang.StringBuffer sOut = new java.lang.StringBuffer(256);
+ sOut.append("____________________________________________________________\n");
+ sOut.append("usage: FCFGMerge cfg=<file name>\n" );
+ sOut.append("parameters:\n" );
+ sOut.append("\tcfg=<file name>\n" );
+ sOut.append("\t\tmust point to a system file, which contains\n" );
+ sOut.append("\t\tall neccessary configuration data for the merge process.\n");
+ sOut.append("\n\tFurther cou can specify every parameter allowed in the\n" );
+ sOut.append("\n\tconfig file as command line parameter too, to overwrite\n" );
+ sOut.append("\n\tthe value from the file.\n" );
+ System.out.println(sOut.toString());
+ }
+}
diff --git a/transex3/source/filter/merge/Manifest.mf b/transex3/source/filter/merge/Manifest.mf
new file mode 100644
index 000000000000..1337eaf4d39a
--- /dev/null
+++ b/transex3/source/filter/merge/Manifest.mf
@@ -0,0 +1 @@
+Main-Class: com.sun.star.filter.config.tools.merge.FCFGMerge
diff --git a/transex3/source/filter/merge/Merger.java b/transex3/source/filter/merge/Merger.java
new file mode 100644
index 000000000000..0bf11fc42fbf
--- /dev/null
+++ b/transex3/source/filter/merge/Merger.java
@@ -0,0 +1,364 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: Merger.java,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package com.sun.star.filter.config.tools.merge;
+
+//_______________________________________________
+
+import java.lang.*;
+import java.util.*;
+import java.io.*;
+import com.sun.star.filter.config.tools.utils.*;
+
+//_______________________________________________
+
+/** can merge different xml fragments together.
+ *
+ *
+ */
+public class Merger
+{
+ //___________________________________________
+ // const
+
+ private static final java.lang.String PROP_XMLVERSION = "xmlversion" ; // <= global cfg file
+ private static final java.lang.String PROP_XMLENCODING = "xmlencoding" ; // <= global cfg file
+ private static final java.lang.String PROP_XMLPATH = "xmlpath" ; // <= global cfg file
+ private static final java.lang.String PROP_XMLPACKAGE = "xmlpackage" ; // <= global cfg file
+
+ private static final java.lang.String PROP_SETNAME_TYPES = "setname_types" ; // <= global cfg file
+ private static final java.lang.String PROP_SETNAME_FILTERS = "setname_filters" ; // <= global cfg file
+ private static final java.lang.String PROP_SETNAME_LOADERS = "setname_frameloaders" ; // <= global cfg file
+ private static final java.lang.String PROP_SETNAME_HANDLERS = "setname_contenthandlers" ; // <= global cfg file
+
+ private static final java.lang.String PROP_SUBDIR_TYPES = "subdir_types" ; // <= global cfg file
+ private static final java.lang.String PROP_SUBDIR_FILTERS = "subdir_filters" ; // <= global cfg file
+ private static final java.lang.String PROP_SUBDIR_LOADERS = "subdir_frameloaders" ; // <= global cfg file
+ private static final java.lang.String PROP_SUBDIR_HANDLERS = "subdir_contenthandlers" ; // <= global cfg file
+
+ private static final java.lang.String PROP_EXTENSION_XCU = "extension_xcu" ; // <= global cfg file
+ private static final java.lang.String PROP_EXTENSION_PKG = "extension_pkg" ; // <= global cfg file
+
+ private static final java.lang.String PROP_DELIMITER = "delimiter" ; // <= global cfg file
+ private static final java.lang.String PROP_TRIM = "trim" ; // <= global cfg file
+ private static final java.lang.String PROP_DECODE = "decode" ; // <= global cfg file
+
+ private static final java.lang.String PROP_FRAGMENTSDIR = "fragmentsdir" ; // <= cmdline
+ private static final java.lang.String PROP_TEMPDIR = "tempdir" ; // <= cmdline
+ private static final java.lang.String PROP_OUTDIR = "outdir" ; // <= cmdline
+ private static final java.lang.String PROP_PKG = "pkg" ; // <= cmdline
+ private static final java.lang.String PROP_DEBUG = "debug" ; // <= cmdline
+
+ private static final java.lang.String PROP_TCFG = "tcfg" ; // <= cmdline
+ private static final java.lang.String PROP_FCFG = "fcfg" ; // <= cmdline
+ private static final java.lang.String PROP_LCFG = "lcfg" ; // <= cmdline
+ private static final java.lang.String PROP_CCFG = "ccfg" ; // <= cmdline
+ private static final java.lang.String PROP_LANGUAGEPACK = "languagepack" ; // <= cmdline
+
+ private static final java.lang.String PROP_ITEMS = "items" ; // <= pkg cfg files!
+
+ //___________________________________________
+ // member
+
+ //-------------------------------------------
+ /** TODO */
+ private ConfigHelper m_aCfg;
+
+ //-------------------------------------------
+ /** TODO */
+ private Logger m_aLog;
+
+ //-------------------------------------------
+ /** TODO */
+ private java.io.File m_aFragmentsDir;
+
+ //-------------------------------------------
+ /** TODO */
+ private java.io.File m_aTempDir;
+
+ //-------------------------------------------
+ /** TODO */
+ private java.io.File m_aOutDir;
+
+ //-------------------------------------------
+ /** TODO */
+ private java.util.Vector m_lTypes;
+ private java.util.Vector m_lFilters;
+ private java.util.Vector m_lLoaders;
+ private java.util.Vector m_lHandlers;
+
+ //___________________________________________
+ // interface
+
+ //-------------------------------------------
+ /** initialize a new instance of this class and
+ * try to get all needed resources from the config module.
+ *
+ * @param aCfg
+ * provides access to all values of the global
+ * config file and to the command line.
+ *
+ * @param aLog
+ * can be used to print out log informations.
+ */
+ public Merger(ConfigHelper aCfg,
+ Logger aLog)
+ throws java.lang.Exception
+ {
+ m_aCfg = aCfg;
+ m_aLog = aLog;
+
+ m_aFragmentsDir = new java.io.File(m_aCfg.getString(PROP_FRAGMENTSDIR));
+ m_aTempDir = new java.io.File(m_aCfg.getString(PROP_TEMPDIR ));
+// m_aOutDir = new java.io.File(m_aCfg.getString(PROP_OUTDIR ));
+
+ java.lang.String sDelimiter = m_aCfg.getString(PROP_DELIMITER);
+ boolean bTrim = m_aCfg.getBoolean(PROP_TRIM);
+ boolean bDecode = m_aCfg.getBoolean(PROP_DECODE);
+
+ try
+ {
+ ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_TCFG), null);
+ m_lTypes = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode);
+ }
+ catch(java.util.NoSuchElementException ex1)
+ {
+ m_lTypes = new java.util.Vector();
+ //m_aLog.setWarning("Fragment list of types is missing. Parameter \"items\" seems to be invalid.");
+ }
+
+ try
+ {
+ ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_FCFG), null);
+ m_lFilters = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode);
+ }
+ catch(java.util.NoSuchElementException ex1)
+ {
+ m_lFilters = new java.util.Vector();
+ //m_aLog.setWarning("Fragment list of filters is missing. Parameter \"items\" seems to be invalid.");
+ }
+
+ try
+ {
+ ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_LCFG), null);
+ m_lLoaders = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode);
+ }
+ catch(java.util.NoSuchElementException ex1)
+ {
+ m_lLoaders = new java.util.Vector();
+ //m_aLog.setWarning("Fragment list of frame loader objects is missing. Parameter \"items\" seems to be invalid.");
+ }
+
+ try
+ {
+ ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_CCFG), null);
+ m_lHandlers = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode);
+ }
+ catch(java.util.NoSuchElementException ex1)
+ {
+ m_lHandlers = new java.util.Vector();
+ //m_aLog.setWarning("Fragment list of content handler objects is missing. Parameter \"items\" seems to be invalid.");
+ }
+ }
+
+ //-------------------------------------------
+ /** TODO */
+ public synchronized void merge()
+ throws java.lang.Exception
+ {
+ java.lang.StringBuffer sBuffer = new java.lang.StringBuffer(1000000);
+ java.lang.String sPackage = m_aCfg.getString(PROP_PKG);
+
+ m_aLog.setGlobalInfo("create package \""+sPackage+"\" ...");
+ m_aLog.setDetailedInfo("generate package header ... ");
+
+ sBuffer.append(
+ XMLHelper.generateHeader(
+ m_aCfg.getString (PROP_XMLVERSION ),
+ m_aCfg.getString (PROP_XMLENCODING ),
+ m_aCfg.getString (PROP_XMLPATH ),
+ m_aCfg.getString (PROP_XMLPACKAGE ),
+ m_aCfg.getBoolean(PROP_LANGUAGEPACK, false)));
+
+ // counts all transfered fragments
+ // Can be used later to decide, if a generated package file
+ // contains "nothing"!
+ int nItemCount = 0;
+
+ for (int i=0; i<4; ++i)
+ {
+ java.lang.String sSetName = null;
+ java.lang.String sSubDir = null;
+ java.util.Vector lFragments = null;
+
+ try
+ {
+ switch(i)
+ {
+ case 0: // types
+ {
+ m_aLog.setDetailedInfo("generate set for types ... ");
+ sSetName = m_aCfg.getString(PROP_SETNAME_TYPES);
+ sSubDir = m_aCfg.getString(PROP_SUBDIR_TYPES );
+ lFragments = m_lTypes;
+ }
+ break;
+
+ case 1: // filters
+ {
+ m_aLog.setDetailedInfo("generate set for filter ... ");
+ sSetName = m_aCfg.getString(PROP_SETNAME_FILTERS);
+ sSubDir = m_aCfg.getString(PROP_SUBDIR_FILTERS );
+ lFragments = m_lFilters;
+ }
+ break;
+
+ case 2: // loaders
+ {
+ m_aLog.setDetailedInfo("generate set for frame loader ... ");
+ sSetName = m_aCfg.getString(PROP_SETNAME_LOADERS);
+ sSubDir = m_aCfg.getString(PROP_SUBDIR_LOADERS );
+ lFragments = m_lLoaders;
+ }
+ break;
+
+ case 3: // handlers
+ {
+ m_aLog.setDetailedInfo("generate set for content handler ... ");
+ sSetName = m_aCfg.getString(PROP_SETNAME_HANDLERS);
+ sSubDir = m_aCfg.getString(PROP_SUBDIR_HANDLERS );
+ lFragments = m_lHandlers;
+ }
+ break;
+ }
+
+ nItemCount += lFragments.size();
+
+ getFragments(
+ new java.io.File(m_aFragmentsDir, sSubDir),
+ sSetName,
+ lFragments,
+ 1,
+ sBuffer);
+ }
+ catch(java.util.NoSuchElementException exIgnore)
+ { continue; }
+ }
+
+ m_aLog.setDetailedInfo("generate package footer ... ");
+ sBuffer.append(XMLHelper.generateFooter());
+
+ // Attention!
+ // If the package seem to be empty, it make no sense to generate a corresponding
+ // xml file. We should suppress writing of this file on disk completly ...
+ if (nItemCount < 1)
+ {
+ m_aLog.setWarning("Package is empty and will not result into a xml file on disk!? Please check configuration file.");
+ return;
+ }
+ m_aLog.setGlobalInfo("package contains "+nItemCount+" items");
+
+ java.io.File aPackage = new File(sPackage);
+ m_aLog.setGlobalInfo("write temp package \""+aPackage.getPath()); // TODO encoding must be readed from the configuration
+ FileHelper.writeEncodedBufferToFile(aPackage, "UTF-8", false, sBuffer); // check for success is done inside this method!
+ }
+
+ //-------------------------------------------
+ /** TODO */
+ private void getFragments(java.io.File aDir ,
+ java.lang.String sSetName ,
+ java.util.Vector lFragments ,
+ int nPrettyTabs,
+ java.lang.StringBuffer sBuffer )
+ throws java.lang.Exception
+ {
+ if (lFragments.size()<1)
+ {
+ m_aLog.setWarning("List of fragments is empty!? Will be ignored ...");
+ return;
+ }
+
+ java.util.Enumeration pFragments = lFragments.elements();
+ java.lang.String sExtXcu = m_aCfg.getString(PROP_EXTENSION_XCU);
+
+ for (int tabs=0; tabs<nPrettyTabs; ++tabs)
+ sBuffer.append("\t");
+ sBuffer.append("<node oor:name=\""+sSetName+"\">\n");
+ ++nPrettyTabs;
+
+ // special mode for generating language packs.
+ // In such case we must live with some missing fragment files.
+ // Reason behind; Not all filters are realy localized.
+ // But we dont use a different fragment list. We try to locate
+ // any fragment file in its language-pack version ...
+ boolean bHandleLanguagePacks = m_aCfg.getBoolean(PROP_LANGUAGEPACK, false);
+ boolean bDebug = m_aCfg.getBoolean(PROP_DEBUG , false);
+ java.lang.String sEncoding = "UTF-8";
+ if (bDebug)
+ sEncoding = "UTF-8Special";
+
+ while(pFragments.hasMoreElements())
+ {
+ java.lang.String sFragment = (java.lang.String)pFragments.nextElement();
+ java.io.File aFragment = new java.io.File(aDir, sFragment+"."+sExtXcu);
+
+ // handle simple files only and check for existence!
+ if (!aFragment.exists())
+ {
+ if (bHandleLanguagePacks)
+ {
+ m_aLog.setWarning("language fragment \""+aFragment.getPath()+"\" does not exist. Will be ignored.");
+ continue;
+ }
+ else
+ throw new java.io.IOException("fragment \""+aFragment.getPath()+"\" does not exists.");
+ }
+
+ if (!aFragment.isFile())
+ {
+ m_aLog.setWarning("fragment \""+aFragment.getPath()+"\" seem to be not a valid file.");
+ continue;
+ }
+
+ // copy file content of original fragment
+ // Note: A FileNotFoundException will be thrown automaticly by the
+ // used reader objects. Let it break this method too. Our calli is interested
+ // on such errors :-)
+ m_aLog.setDetailedInfo("merge fragment \""+aFragment.getPath()+"\" ...");
+ FileHelper.readEncodedBufferFromFile(aFragment, sEncoding, sBuffer);
+
+ sBuffer.append("\n");
+ }
+
+ --nPrettyTabs;
+ for (int tabs=0; tabs<nPrettyTabs; ++tabs)
+ sBuffer.append("\t");
+ sBuffer.append("</node>\n");
+ }
+}
diff --git a/transex3/source/filter/merge/makefile.mk b/transex3/source/filter/merge/makefile.mk
new file mode 100644
index 000000000000..bf768be851d8
--- /dev/null
+++ b/transex3/source/filter/merge/makefile.mk
@@ -0,0 +1,96 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.9.102.1 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ = ..$/..$/..
+TARGET = FCFGMerge
+PRJNAME = filter
+PACKAGE = com$/sun$/star$/filter$/config$/tools$/merge
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE: settings.mk
+
+#----- compile .java files -----------------------------------------
+#.IF "$(L10N_framework)"==""
+
+OWNCOPY = \
+ $(MISC)$/$(TARGET)_copied.done
+
+#JARFILES = \
+# ridl.jar \
+# unoil.jar \
+# jurt.jar \
+# juh.jar \
+# java_uno.jar
+
+CFGFILES = \
+ FCFGMerge.cfg
+
+JAVACLASSFILES = \
+ $(CLASSDIR)$/$(PACKAGE)$/Merger.class \
+ $(CLASSDIR)$/$(PACKAGE)$/FCFGMerge.class
+
+CUSTOMMANIFESTFILE = \
+ Manifest.mf
+
+MAXLINELENGTH = 100000
+
+#----- make a jar from compiled files ------------------------------
+
+JARCLASSDIRS = \
+ com$/sun$/star$/filter$/config$/tools$/utils \
+ com$/sun$/star$/filter$/config$/tools$/merge
+
+JARTARGET = $(TARGET).jar
+
+JARCOMPRESS = TRUE
+
+# --- targets -----------------------------------------------------
+
+.INCLUDE : target.mk
+
+.IF "$(SOLAR_JAVA)" != "" || "$(GUI)"=="OS2"
+ALLTAR : $(OWNCOPY)
+
+.IF "$(JARTARGETN)" != ""
+$(JARTARGETN) : $(OWNCOPY)
+.ENDIF
+
+$(OWNCOPY) : $(CFGFILES)
+ -$(MKDIRHIER) $(CLASSDIR)$/$(PACKAGE)
+ $(COPY) $? $(CLASSDIR)$/$(PACKAGE) && $(TOUCH) $@
+
+.ENDIF # "$(SOLAR_JAVA)" != ""
+
+#.ELSE
+#pseudo:
+
+#.ENDIF
diff --git a/transex3/source/filter/utils/AnalyzeStartupLog.java b/transex3/source/filter/utils/AnalyzeStartupLog.java
new file mode 100644
index 000000000000..498528850697
--- /dev/null
+++ b/transex3/source/filter/utils/AnalyzeStartupLog.java
@@ -0,0 +1,328 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: AnalyzeStartupLog.java,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.filter.config.tools.utils;
+
+//_______________________________________________
+// imports
+import java.util.*;
+import java.lang.*;
+
+//_______________________________________________
+// implementation
+public class AnalyzeStartupLog
+{
+ private class OperationTime
+ {
+ /** name the measured operation. */
+ public java.lang.String sOperation;
+
+ /** contains the time value, when this operation was started. */
+ public long nStartTime;
+
+ /** contains the time value, when this operation was finished. */
+ public long nEndTime;
+
+ /** text inside log file, which identifies the start time value. */
+ public java.lang.String sStartMsg;
+
+ /** text inside log file, which identifies the end time value. */
+ public java.lang.String sEndMsg;
+ }
+
+ //_________________________________
+ // main
+
+ public static void main(java.lang.String[] lCmdLine)
+ {
+ int nExit = 0;
+ try
+ {
+ // analyze command line
+ ConfigHelper aCmdLine = new ConfigHelper("", lCmdLine);
+ java.lang.String sLogDir = aCmdLine.getString("logdir" );
+ java.lang.String sDataFile = aCmdLine.getString("datafile");
+
+ if (sLogDir == null || sDataFile == null)
+ {
+ System.err.println("AnalyzeStartupLog lodir=<dir> datafile=<file>");
+ System.err.println("E.g.: AnalyzeStartupLog lodir=c:\\temp\\logs datafile=c:\\temp\\data.csv");
+ System.exit(--nExit);
+ }
+
+ // get list of all log files
+ boolean bRecursive = true;
+ java.util.Vector lLogs = FileHelper.getSystemFilesFromDir(new java.io.File(sLogDir), bRecursive);
+ if (lLogs == null || lLogs.isEmpty())
+ {
+ System.err.println("log dir is empty");
+ System.exit(--nExit);
+ }
+
+ // analyze it
+ java.lang.StringBuffer sOut = new java.lang.StringBuffer(1000);
+ sOut.append("log;t_cfg_start;t_cfg_end;t_fwk_start;t_fwk_end;t_sfx_start;t_sfx_end;t_types_start;t_types_end;t_filters_start;t_filters_end;");
+ sOut.append("t_filters_swriter_start;t_filters_swriter_end;t_filters_sweb_start;t_filters_sweb_end;t_filters_sglobal_start;t_filters_sglobal_end;t_filters_scalc_start;t_filters_scalc_end;t_filters_sdraw_start;t_filters_sdraw_end;t_filters_simpress_start;t_filters_simpress_end;t_filters_schart_start;t_filters_schart_end;t_filters_smath_start;t_filters_smath_end;");
+ sOut.append("t_others_start;t_others_end;d_cfg;d_fwk;d_sfx;d_types;d_filters;d_others;d_complete\n");
+
+ java.util.Enumeration aIt = lLogs.elements();
+ while (aIt.hasMoreElements())
+ {
+ java.io.File aLog = (java.io.File)aIt.nextElement();
+ java.io.FileReader aReader = new java.io.FileReader(aLog);
+ java.io.BufferedReader aBuffer = new java.io.BufferedReader(aReader);
+
+ long t_cfg_start = 0;
+ long t_cfg_end = 0;
+
+ long t_fwk_start = 0;
+ long t_fwk_end = 0;
+
+ long t_sfx_start = 0;
+ long t_sfx_end = 0;
+
+ long t_types_start = 0;
+ long t_types_end = 0;
+
+ long t_filters_start = 0;
+ long t_filters_end = 0;
+
+ long t_filters_swriter_start = 0;
+ long t_filters_swriter_end = 0;
+
+ long t_filters_sweb_start = 0;
+ long t_filters_sweb_end = 0;
+
+ long t_filters_sglobal_start = 0;
+ long t_filters_sglobal_end = 0;
+
+ long t_filters_scalc_start = 0;
+ long t_filters_scalc_end = 0;
+
+ long t_filters_sdraw_start = 0;
+ long t_filters_sdraw_end = 0;
+
+ long t_filters_simpress_start = 0;
+ long t_filters_simpress_end = 0;
+
+ long t_filters_schart_start = 0;
+ long t_filters_schart_end = 0;
+
+ long t_filters_smath_start = 0;
+ long t_filters_smath_end = 0;
+
+ long t_others_start = 0;
+ long t_others_end = 0;
+
+ while (true)
+ {
+ java.lang.String sLine = aBuffer.readLine();
+ if (sLine == null)
+ break;
+
+ if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : { creation ConfigItem [file=standard, version=6, mode=3]"))
+ t_cfg_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : } creation ConfigItem"))
+ t_cfg_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : { reading TypeDetection.xml"))
+ t_fwk_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : } reading TypeDetection.xml"))
+ t_fwk_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ framework (as96863) ::FilterCFGAccess::impl_loadTypes"))
+ t_types_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} framework (as96863) ::FilterCFGAccess::impl_loadTypes"))
+ t_types_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ framework (as96863) ::FilterCFGAccess::impl_loadFilters"))
+ t_filters_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} framework (as96863) ::FilterCFGAccess::impl_loadFilters"))
+ t_filters_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [swriter]"))
+ t_filters_swriter_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [swriter]"))
+ t_filters_swriter_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [sweb]"))
+ t_filters_sweb_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [sweb]"))
+ t_filters_sweb_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [sglobal]"))
+ t_filters_sglobal_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [sglobal]"))
+ t_filters_sglobal_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [scalc]"))
+ t_filters_scalc_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [scalc]"))
+ t_filters_scalc_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [sdraw]"))
+ t_filters_sdraw_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [sdraw]"))
+ t_filters_sdraw_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [simpress]"))
+ t_filters_simpress_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [simpress]"))
+ t_filters_simpress_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [schart]"))
+ t_filters_schart_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [schart]"))
+ t_filters_schart_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ reading FilterGroup [smath]"))
+ t_filters_smath_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} reading FilterGroup [smath]"))
+ t_filters_smath_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("{ framework (as96863) ::FilterCFGAccess::impl_loadDetectors"))
+ t_others_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} framework (as96863) ::FilterCFGAccess::impl_loadContentHandlers"))
+ t_others_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} framework (as96863) ::FilterCache::FilterCache"))
+ t_sfx_start = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ else
+ if (sLine.endsWith("} desktop (lo119109) OfficeWrapper::OfficeWrapper"))
+ t_sfx_end = new java.lang.Long(sLine.substring(0, 6)).longValue();
+ }
+
+ sOut.append(aLog.getName() );
+ sOut.append(";" );
+ sOut.append(t_cfg_start );
+ sOut.append(";" );
+ sOut.append(t_cfg_end );
+ sOut.append(";" );
+ sOut.append(t_fwk_start );
+ sOut.append(";" );
+ sOut.append(t_fwk_end );
+ sOut.append(";" );
+ sOut.append(t_sfx_start );
+ sOut.append(";" );
+ sOut.append(t_sfx_end );
+ sOut.append(";" );
+ sOut.append(t_types_start );
+ sOut.append(";" );
+ sOut.append(t_types_end );
+ sOut.append(";" );
+ sOut.append(t_filters_start );
+ sOut.append(";" );
+ sOut.append(t_filters_end );
+ sOut.append(";" );
+
+ sOut.append(t_filters_swriter_start );
+ sOut.append(";" );
+ sOut.append(t_filters_swriter_end );
+ sOut.append(";" );
+ sOut.append(t_filters_sweb_start );
+ sOut.append(";" );
+ sOut.append(t_filters_sweb_end );
+ sOut.append(";" );
+ sOut.append(t_filters_sglobal_start );
+ sOut.append(";" );
+ sOut.append(t_filters_sglobal_end );
+ sOut.append(";" );
+ sOut.append(t_filters_scalc_start );
+ sOut.append(";" );
+ sOut.append(t_filters_scalc_end );
+ sOut.append(";" );
+ sOut.append(t_filters_sdraw_start );
+ sOut.append(";" );
+ sOut.append(t_filters_sdraw_end );
+ sOut.append(";" );
+ sOut.append(t_filters_simpress_start );
+ sOut.append(";" );
+ sOut.append(t_filters_simpress_end );
+ sOut.append(";" );
+ sOut.append(t_filters_schart_start );
+ sOut.append(";" );
+ sOut.append(t_filters_schart_end );
+ sOut.append(";" );
+ sOut.append(t_filters_smath_start );
+ sOut.append(";" );
+ sOut.append(t_filters_smath_end );
+ sOut.append(";" );
+
+ sOut.append(t_others_start );
+ sOut.append(";" );
+ sOut.append(t_others_end );
+ sOut.append(";" );
+ sOut.append(t_cfg_end -t_cfg_start );
+ sOut.append(";" );
+ sOut.append(t_fwk_end -t_fwk_start );
+ sOut.append(";" );
+ sOut.append(t_sfx_end -t_sfx_start );
+ sOut.append(";" );
+ sOut.append(t_types_end -t_types_start );
+ sOut.append(";" );
+ sOut.append(t_filters_end-t_filters_start);
+ sOut.append(";" );
+ sOut.append(t_others_end -t_others_start );
+ sOut.append(";" );
+ sOut.append(t_others_end -t_cfg_start );
+ sOut.append("\n" );
+
+ aBuffer.close();
+ }
+
+ java.io.FileWriter aCSV = new java.io.FileWriter(sDataFile);
+ java.lang.String sData = sOut.toString();
+ aCSV.write(sData, 0, sData.length());
+ aCSV.flush();
+ aCSV.close();
+ }
+ catch(java.lang.Throwable exAny)
+ {
+ System.err.println(exAny.getMessage());
+ exAny.printStackTrace();
+ System.exit(--nExit);
+ }
+
+ System.exit(0);
+ }
+}
diff --git a/transex3/source/filter/utils/Cache.java b/transex3/source/filter/utils/Cache.java
new file mode 100644
index 000000000000..94c26008ed13
--- /dev/null
+++ b/transex3/source/filter/utils/Cache.java
@@ -0,0 +1,2449 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: Cache.java,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package com.sun.star.filter.config.tools.utils;
+
+//_______________________________________________
+
+import java.lang.*;
+import java.util.*;
+import java.io.*;
+
+//_______________________________________________
+
+/**
+ * It implements a container for all possible entries which are part of the type
+ * and filter mechanism of an office - means all items of the configuration file
+ * "TypeDetection". How these entries will be readed or written can be switch
+ * in different modes. That would make it possible to edit an xml directly or
+ * to contact a running office instance.
+ *
+ *
+ */
+public class Cache
+{
+ //___________________________________________
+ // public const
+
+ /** identifies a file type item of this cache. */
+ public static final int E_TYPE = 0;
+
+ /** identifies a filter item of this cache. */
+ public static final int E_FILTER = 1;
+
+ /** identifies a detect service item of this cache. */
+ public static final int E_DETECTSERVICE = 2;
+
+ /** identifies a frame loader item of this cache. */
+ public static final int E_FRAMELOADER = 3;
+
+ /** identifies a content handler item of this cache. */
+ public static final int E_CONTENTHANDLER = 4;
+
+ /** indicates an unsupported xml format => error! */
+ public static final int FORMAT_UNSUPPORTED = -1;
+
+ /** identify the configuration format of an office 6.0.
+ * The own formated data string is used. */
+ public static final int FORMAT_60 = 0;
+
+ /** identify the configuration format of an office 6.y.
+ * Properties are realy xml tags again. */
+ public static final int FORMAT_6Y = 1;
+
+ /** identify the configuration format which is used inside
+ * this tooling project. */
+ public static final int FORMAT_INTERNAL = 2;
+
+ /** right value for a command line parameter to define a 6.0 version. */
+ public static final java.lang.String CMDVAL_FORMAT_60 = "6.0";
+
+ /** right value for a command line parameter to define a 6.Y version. */
+ public static final java.lang.String CMDVAL_FORMAT_6Y = "6.Y";
+
+ /** right value for a command line parameter to define an internal xml version! */
+ public static final java.lang.String CMDVAL_FORMAT_INTERNAL = "internal";
+
+ // general
+ public static final java.lang.String PROPNAME_DATA = "Data";
+ public static final java.lang.String PROPNAME_NAME = "Name";
+ public static final java.lang.String PROPNAME_UINAME = "UIName";
+ public static final java.lang.String PROPNAME_UINAMES = "UINames";
+
+ // type 6.0 ...
+ public static final java.lang.String PROPNAME_MEDIATYPE = "MediaType";
+ public static final java.lang.String PROPNAME_PREFERRED = "Preferred";
+ public static final java.lang.String PROPNAME_CLIPBOARDFORMAT = "ClipboardFormat";
+ public static final java.lang.String PROPNAME_DOCUMENTICONID = "DocumentIconID";
+ public static final java.lang.String PROPNAME_URLPATTERN = "URLPattern";
+ public static final java.lang.String PROPNAME_EXTENSIONS = "Extensions";
+ // ... +6.y
+ public static final java.lang.String PROPNAME_UIORDER = "UIOrder";
+ public static final java.lang.String PROPNAME_PREFERREDFILTER = "PreferredFilter";
+ public static final java.lang.String PROPNAME_DETECTSERVICE = "DetectService";
+ public static final java.lang.String PROPNAME_FRAMELOADER = "FrameLoader";
+ public static final java.lang.String PROPNAME_CONTENTHANDLER = "ContentHandler";
+
+ // filter
+ public static final java.lang.String PROPNAME_DOCUMENTSERVICE = "DocumentService";
+ public static final java.lang.String PROPNAME_FILEFORMATVERSION = "FileFormatVersion";
+ public static final java.lang.String PROPNAME_FILTERSERVICE = "FilterService";
+ public static final java.lang.String PROPNAME_FLAGS = "Flags";
+ public static final java.lang.String PROPNAME_ORDER = "Order"; // -6.y
+ public static final java.lang.String PROPNAME_TEMPLATENAME = "TemplateName";
+ public static final java.lang.String PROPNAME_TYPE = "Type";
+ public static final java.lang.String PROPNAME_UICOMPONENT = "UIComponent";
+ public static final java.lang.String PROPNAME_USERDATA = "UserData";
+
+ // frame loader / detect services / content handler
+ public static final java.lang.String PROPNAME_TYPES = "Types";
+
+ //___________________________________________
+ // private const
+
+ private static final java.lang.String FILTERSERVICE_NATIVEWARPPER = "com.sun.star.filter.NativeFilterWrapper";
+ private static final java.lang.String GENERIC_DETECTSERVICE = "com.sun.star.comp.office.FrameLoader";
+
+ /** its the name of the cfg set, which contains all types. */
+ private static final java.lang.String CFGNODE_TYPES = "Types";
+
+ /** its the name of the cfg set, which contains all filters. */
+ private static final java.lang.String CFGNODE_FILTERS = "Filters";
+
+ /** its the name of the cfg set, which contains all detect services. */
+ private static final java.lang.String CFGNODE_DETECTSERVICES = "DetectServices";
+
+ /** its the name of the cfg set, which contains all frame loaders. */
+ private static final java.lang.String CFGNODE_FRAMELOADERS = "FrameLoaders";
+
+ /** its the name of the cfg set, which contains all content handlers. */
+ private static final java.lang.String CFGNODE_CONTENTHANDLERS = "ContentHandlers";
+
+ // names for filter flags
+ private static final java.lang.String FLAGNAME_3RDPARTYFILTER = "3RDPARTYFILTER";
+ private static final java.lang.String FLAGNAME_ALIEN = "ALIEN";
+ private static final java.lang.String FLAGNAME_ASYNCHRON = "ASYNCHRON";
+ private static final java.lang.String FLAGNAME_BROWSERPREFERRED = "BROWSERPREFERRED";
+ private static final java.lang.String FLAGNAME_CONSULTSERVICE = "CONSULTSERVICE";
+ private static final java.lang.String FLAGNAME_DEFAULT = "DEFAULT";
+ private static final java.lang.String FLAGNAME_EXPORT = "EXPORT";
+ private static final java.lang.String FLAGNAME_IMPORT = "IMPORT";
+ private static final java.lang.String FLAGNAME_INTERNAL = "INTERNAL";
+ private static final java.lang.String FLAGNAME_NOTINCHOOSER = "NOTINCHOOSER";
+ private static final java.lang.String FLAGNAME_NOTINFILEDIALOG = "NOTINFILEDIALOG";
+ private static final java.lang.String FLAGNAME_NOTINSTALLED = "NOTINSTALLED";
+ private static final java.lang.String FLAGNAME_OWN = "OWN";
+ private static final java.lang.String FLAGNAME_PACKED = "PACKED";
+ private static final java.lang.String FLAGNAME_PREFERRED = "PREFERRED";
+ private static final java.lang.String FLAGNAME_READONLY = "READONLY";
+ private static final java.lang.String FLAGNAME_SILENTEXPORT = "SILENTEXPORT";
+ private static final java.lang.String FLAGNAME_TEMPLATE = "TEMPLATE";
+ private static final java.lang.String FLAGNAME_TEMPLATEPATH = "TEMPLATEPATH";
+ private static final java.lang.String FLAGNAME_USESOPTIONS = "USESOPTIONS";
+
+ private static final java.lang.String FLAGNAME_COMBINED = "COMBINED";
+ private static final java.lang.String FLAGNAME_SUPPORTSSELECTION= "SUPPORTSSELECTION";
+
+ // values for filter flags
+ private static final int FLAGVAL_3RDPARTYFILTER = 0x00080000; // 524288
+ private static final int FLAGVAL_ALIEN = 0x00000040; // 64
+ private static final int FLAGVAL_ALL = 0xffffffff; // 4294967295
+ private static final int FLAGVAL_ASYNCHRON = 0x00004000; // 16384
+ private static final int FLAGVAL_BROWSERPREFERRED = 0x00400000; // 4194304
+ private static final int FLAGVAL_CONSULTSERVICE = 0x00040000; // 262144
+ private static final int FLAGVAL_DEFAULT = 0x00000100; // 256
+ private static final int FLAGVAL_EXPORT = 0x00000002; // 2
+ private static final int FLAGVAL_IMPORT = 0x00000001; // 1
+ private static final int FLAGVAL_INTERNAL = 0x00000008; // 8
+ private static final int FLAGVAL_NOTINCHOOSER = 0x00002000; // 8192
+ private static final int FLAGVAL_NOTINFILEDIALOG = 0x00001000; // 4096
+ private static final int FLAGVAL_NOTINSTALLED = 0x00020000; // 131072
+ private static final int FLAGVAL_OWN = 0x00000020; // 32
+ private static final int FLAGVAL_PACKED = 0x00100000; // 1048576
+ private static final int FLAGVAL_PREFERRED = 0x10000000; // 268435456
+ private static final int FLAGVAL_READONLY = 0x00010000; // 65536
+ private static final int FLAGVAL_SILENTEXPORT = 0x00200000; // 2097152
+ private static final int FLAGVAL_TEMPLATE = 0x00000004; // 4
+ private static final int FLAGVAL_TEMPLATEPATH = 0x00000010; // 16
+ private static final int FLAGVAL_USESOPTIONS = 0x00000080; // 128
+
+ private static final int FLAGVAL_COMBINED = 0x00800000; // ...
+ private static final int FLAGVAL_SUPPORTSSELECTION = 0x00000400; // 1024
+
+ //___________________________________________
+ // member
+
+ /** list of all located types.
+ * Format: [string,HashMap]
+ */
+ private java.util.HashMap m_lTypes;
+
+ /** list of all located filters.
+ * Format: [string,HashMap]
+ */
+ private java.util.HashMap m_lFilters;
+
+ /** list of all located detect services.
+ * Format: [string,HashMap]
+ */
+ private java.util.HashMap m_lDetectServices;
+
+ /** list of all located frame loader.
+ * Format: [string,HashMap]
+ */
+ private java.util.HashMap m_lFrameLoaders;
+
+ /** list of all located content handler.
+ * Format: [string,HashMap]
+ */
+ private java.util.HashMap m_lContentHandlers;
+
+ /** contains all analyzed relations between
+ * filters and types. The key is an internal
+ * type name (can be used as reference into the
+ * list m_lTypes) and the value is a Vector of all
+ * internal filter names, which are registered for
+ * this type.
+ * Format: [string, Vector]
+ */
+ private java.util.HashMap m_lFilterToTypeRegistrations;
+
+ private int m_nDoubleRegisteredFilters;
+ private int m_nTypesForFilters;
+ private int m_nTypesForDetectServices;
+ private int m_nTypesForFrameLoaders;
+ private int m_nTypesForContentHandlers;
+
+ /** can be used to log different informations. */
+ private Logger m_aDebug;
+
+ //___________________________________________
+ // interface
+
+ /** standard ctor.
+ *
+ * Initialize an empty cache instance. You have to use
+ * on of the fromXXX() methods to fill it from different
+ * sources with content.
+ */
+ public Cache(Logger aDebug)
+ {
+ reset();
+ m_aDebug = aDebug;
+ }
+
+ //___________________________________________
+
+ /** free memory and set default values on all members.
+ */
+ public synchronized void reset()
+ {
+ m_lTypes = new java.util.HashMap();
+ m_lFilters = new java.util.HashMap();
+ m_lFrameLoaders = new java.util.HashMap();
+ m_lDetectServices = new java.util.HashMap();
+ m_lContentHandlers = new java.util.HashMap();
+ m_lFilterToTypeRegistrations = new java.util.HashMap();
+ m_aDebug = new Logger();
+ m_nDoubleRegisteredFilters = 0;
+ m_nTypesForFilters = 0;
+ m_nTypesForDetectServices = 0;
+ m_nTypesForFrameLoaders = 0;
+ m_nTypesForContentHandlers = 0;
+ }
+
+ //___________________________________________
+
+ /** converts a string representation of an xml format
+ * to its int value, which must be used at some interface
+ * methods of this cache.
+ *
+ * If the given string does not match to any well known format,
+ * the return value will be FORMAT_UNSUPPORTED. The calli have to
+ * check that. Otherwhise a called interface method at this cache
+ * instance will be rejected by an exception!
+ *
+ * @param sFormat
+ * the string representation
+ * Must be one of our public const values from type CMDVAL_FORMAT_xxx.
+ *
+ * @return [int]
+ * the int representation.
+ * Will be one of our public const values from type FORMAT_xxx.
+ */
+ public static int mapFormatString2Format(java.lang.String sFormat)
+ {
+ int nFormat = FORMAT_UNSUPPORTED;
+ if (sFormat.equalsIgnoreCase(CMDVAL_FORMAT_60))
+ nFormat = FORMAT_60;
+ else
+ if (sFormat.equalsIgnoreCase(CMDVAL_FORMAT_6Y))
+ nFormat = FORMAT_6Y;
+ else
+ if (sFormat.equalsIgnoreCase(CMDVAL_FORMAT_INTERNAL))
+ nFormat = FORMAT_INTERNAL;
+ return nFormat;
+ }
+
+ //___________________________________________
+
+ /** return some statistic values.
+ *
+ * Such values can be: - count of container items,
+ * - ...
+ *
+ * @return [java.lang.String]
+ * a formated string, which contains al statistic data.
+ */
+ public synchronized java.lang.String getStatistics()
+ {
+ java.lang.StringBuffer sBuffer = new java.lang.StringBuffer(256);
+
+ sBuffer.append("types = "+m_lTypes.size() +"\n");
+ sBuffer.append("filters = "+m_lFilters.size() +"\n");
+ sBuffer.append("detect services = "+m_lDetectServices.size() +"\n");
+ sBuffer.append("frame loaders = "+m_lFrameLoaders.size() +"\n");
+ sBuffer.append("content handler = "+m_lContentHandlers.size() +"\n");
+ sBuffer.append("double registered filters = "+m_nDoubleRegisteredFilters+"\n");
+ sBuffer.append("types used by filters = "+m_nTypesForFilters +"\n");
+ sBuffer.append("types used by detect services = "+m_nTypesForDetectServices +"\n");
+ sBuffer.append("types used by frame loaders = "+m_nTypesForFrameLoaders +"\n");
+ sBuffer.append("types used by content handlers = "+m_nTypesForContentHandlers+"\n");
+
+ return sBuffer.toString();
+ }
+
+ //___________________________________________
+
+ /** reset this cache and fill it with new values using the given XML file.
+ *
+ * @param aXML
+ * must be a system file of a suitable XML file, which
+ * include all neccessary type/filter items.
+ *
+ * @param nFormat
+ * identifies the format of the specified xml file,
+ * which must be interpreted.
+ */
+ public synchronized void fromXML(java.io.File aXML ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ // clear this cache
+ reset();
+
+ // parse it
+ javax.xml.parsers.DocumentBuilderFactory aFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
+ /* Attention:
+ * This call is important. It force right handling of entities during parsing and(!)
+ * writing. It let all possible signs for entities or it's quoted representations
+ * untouched. So this class don't change the original signs of the original file.
+ * Means:
+ * <ul>
+ * <li>(') => (')</li>
+ * <li>(") => (")</li>
+ * <li>(>) => (&gt;)</li>
+ * <li>(<) => (&lt;)</li>
+ * <li>(&gt;) => (&gt;)</li>
+ * <li>(&amp;) => (&amp;)</li>
+ * <li>...</li>
+ * </ul>
+ */
+
+ System.out.println("TODO: must be adapted to java 1.3 :-(");
+ System.exit(-1);
+//TODO_JAVA aFactory.setExpandEntityReferences(false);
+
+ javax.xml.parsers.DocumentBuilder aBuilder = aFactory.newDocumentBuilder();
+ org.w3c.dom.Document aDOM = aBuilder.parse(aXML);
+ org.w3c.dom.Element aRoot = aDOM.getDocumentElement();
+
+ // step over all sets
+ java.util.Vector lSetNodes = XMLHelper.extractChildNodesByTagName(aRoot, XMLHelper.XMLTAG_NODE);
+ java.util.Enumeration it1 = lSetNodes.elements();
+ while (it1.hasMoreElements())
+ {
+ // try to find out, which set should be read
+ org.w3c.dom.Node aSetNode = (org.w3c.dom.Node)it1.nextElement();
+ java.lang.String sSetName = XMLHelper.extractNodeAttribByName(aSetNode, XMLHelper.XMLATTRIB_OOR_NAME);
+ if (sSetName == null)
+ throw new java.io.IOException("unsupported format: could not extract set name on node ...\n"+aSetNode);
+
+ // map some generic interfaces to the right members!
+ int eType = -1 ;
+ java.util.HashMap rMap = null;
+
+ if (sSetName.equals(CFGNODE_TYPES))
+ {
+ eType = E_TYPE;
+ rMap = m_lTypes;
+ }
+ else
+ if (sSetName.equals(CFGNODE_FILTERS))
+ {
+ eType = E_FILTER;
+ rMap = m_lFilters;
+ }
+ else
+ if (sSetName.equals(CFGNODE_FRAMELOADERS))
+ {
+ eType = E_FRAMELOADER;
+ rMap = m_lFrameLoaders;
+ }
+ else
+ if (sSetName.equals(CFGNODE_DETECTSERVICES))
+ {
+ eType = E_DETECTSERVICE;
+ rMap = m_lDetectServices;
+ }
+ else
+ if (sSetName.equals(CFGNODE_CONTENTHANDLERS))
+ {
+ eType = E_CONTENTHANDLER;
+ rMap = m_lContentHandlers;
+ }
+ else
+ throw new java.io.IOException("unsupported format: unknown set name [\""+sSetName+"\"] detected on node ...\n"+aSetNode);
+
+ // load all set entries
+ java.util.Vector lChildNodes = XMLHelper.extractChildNodesByTagName(aSetNode, XMLHelper.XMLTAG_NODE);
+ java.util.Enumeration it2 = lChildNodes.elements();
+ while (it2.hasMoreElements())
+ {
+ org.w3c.dom.Node aChildNode = (org.w3c.dom.Node)it2.nextElement();
+ java.lang.String sChildName = XMLHelper.extractNodeAttribByName(aChildNode, XMLHelper.XMLATTRIB_OOR_NAME);
+ if (sChildName == null)
+ throw new java.io.IOException("unsupported format: could not extract child node name on node ...\n"+aChildNode);
+ java.util.HashMap aPropSet = null;
+
+ // Note: Our internal format is different from the source format!
+ java.util.HashMap aTempSet = XMLHelper.convertNodeToPropSet(aChildNode);
+ switch(eType)
+ {
+ case E_TYPE :
+ {
+ aPropSet = Cache.convertTypePropsToInternal(aTempSet, nFormat);
+ m_aDebug.setDetailedInfo("type [\""+sChildName+"\"] converted to internal format");
+ }
+ break;
+
+ case E_FILTER :
+ {
+ aPropSet = Cache.convertFilterPropsToInternal(aTempSet, nFormat);
+ m_aDebug.setDetailedInfo("filter [\""+sChildName+"\"] converted to internal format");
+ }
+ break;
+
+ case E_DETECTSERVICE :
+ {
+ aPropSet = Cache.convertDetectServicePropsToInternal(aTempSet, nFormat);
+ m_aDebug.setDetailedInfo("detect service [\""+sChildName+"\"] converted to internal format");
+ }
+ break;
+
+ case E_FRAMELOADER :
+ {
+ aPropSet = Cache.convertFrameLoaderPropsToInternal(aTempSet, nFormat);
+ m_aDebug.setDetailedInfo("frame loader [\""+sChildName+"\"] converted to internal format");
+ }
+ break;
+
+ case E_CONTENTHANDLER :
+ {
+ aPropSet = Cache.convertContentHandlerPropsToInternal(aTempSet, nFormat);
+ m_aDebug.setDetailedInfo("content handler [\""+sChildName+"\"] converted to internal format");
+ }
+ break;
+ }
+ m_aDebug.setDetailedInfo("props = "+aTempSet);
+ rMap.put(sChildName, aPropSet);
+ }
+ }
+ }
+
+ //___________________________________________
+
+ /** create some hml views of the current content of this cache.
+ *
+ * The given directory is used to create different html files
+ * there. Every of them show another aspect of this cache.
+ * E.g.: - all type/filter properties
+ * - relation ships between types/filters/loaders etc.
+ *
+ * @param aDirectory
+ * points to a system directory, which
+ * can be used completely(!) to generate
+ * the results there.
+ *
+ * @param nFormat
+ * specify in which context the cache items should be
+ * interpreted.
+ */
+ public synchronized void toHTML(java.io.File aDirectory,
+ int nFormat ,
+ java.lang.String sEncoding )
+ throws java.lang.Exception
+ {
+ if (nFormat != FORMAT_6Y)
+ throw new java.lang.Exception("HTML views are supported for the new 6.y format only yet.");
+
+ java.lang.StringBuffer sRelationView = new java.lang.StringBuffer(1000);
+ sRelationView.append("<html><header><title>Relation View</title></header><body>");
+ sRelationView.append("<table border=1>");
+ sRelationView.append("<tr><td><b>type</b></td><td><b>detect service</b></td><td><b>preferred filter</b></td><td><b>frame loader</b></td><td><b>content handler</b></td></tr>");
+
+ java.util.Iterator aIt = m_lTypes.keySet().iterator();
+ while (aIt.hasNext())
+ {
+ java.lang.String sType = (java.lang.String)aIt.next();
+ java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sType);
+
+ sRelationView.append("<tr>");
+ sRelationView.append("<td>"+sType+"</td>");
+
+ java.lang.String sVal = (java.lang.String)aType.get(PROPNAME_DETECTSERVICE);
+ if (sVal == null || sVal.length()<1)
+ sRelationView.append("<td> - </td>");
+ else
+ sRelationView.append("<td>"+sVal+"</td>");
+
+ sVal = (java.lang.String)aType.get(PROPNAME_PREFERREDFILTER);
+ if (sVal == null || sVal.length()<1)
+ sRelationView.append("<td> - </td>");
+ else
+ sRelationView.append("<td>"+sVal+"</td>");
+
+ sVal = (java.lang.String)aType.get(PROPNAME_FRAMELOADER);
+ if (sVal == null || sVal.length()<1)
+ sRelationView.append("<td> - </td>");
+ else
+ sRelationView.append("<td>"+sVal+"</td>");
+
+ sVal = (java.lang.String)aType.get(PROPNAME_CONTENTHANDLER);
+ if (sVal == null || sVal.length()<1)
+ sRelationView.append("<td> - </td>");
+ else
+ sRelationView.append("<td>"+sVal+"</td>");
+
+ sRelationView.append("</tr>");
+ }
+
+ sRelationView.append("</table>");
+ sRelationView.append("</body>");
+
+ FileHelper.writeEncodedBufferToFile(new java.io.File(aDirectory, "relation_view.html"), sEncoding, false, sRelationView);
+
+ java.util.HashMap lFilters2TypeRegistration = new java.util.HashMap();
+ aIt = m_lFilters.keySet().iterator();
+ while (aIt.hasNext())
+ {
+ java.lang.String sFilter = (java.lang.String)aIt.next();
+ java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter);
+ java.lang.String sType = (java.lang.String)aFilter.get(PROPNAME_TYPE);
+
+ java.util.Vector lFilters = (java.util.Vector)lFilters2TypeRegistration.get(sType);
+ if (lFilters == null)
+ lFilters = new java.util.Vector();
+ lFilters.add(sFilter);
+ lFilters2TypeRegistration.put(sType, lFilters);
+ }
+
+ java.lang.StringBuffer sType2FiltersView = new java.lang.StringBuffer(1000);
+ sType2FiltersView.append("<html><header><title>Type2Filters View</title></header><body>");
+ sType2FiltersView.append("<table border=1>");
+ sType2FiltersView.append("<tr><td><b>type</b></td><td><b>filters</b></td></tr>");
+
+ aIt = lFilters2TypeRegistration.keySet().iterator();
+ while (aIt.hasNext())
+ {
+ java.lang.String sType = (java.lang.String)aIt.next();
+ java.util.Vector lFilters = (java.util.Vector)lFilters2TypeRegistration.get(sType);
+
+ sType2FiltersView.append("<tr><td>"+sType+"</td><td>");
+ java.util.Enumeration aEn = lFilters.elements();
+ while(aEn.hasMoreElements())
+ sType2FiltersView.append(aEn.nextElement()+"<br>");
+ sType2FiltersView.append("</td></tr>");
+ }
+
+ sType2FiltersView.append("</table>");
+ sType2FiltersView.append("</body>");
+
+ FileHelper.writeEncodedBufferToFile(new java.io.File(aDirectory, "type2filters_view.html"), sEncoding, false, sType2FiltersView);
+ }
+
+ //___________________________________________
+
+ /** converts all items of this cache to its xml representation
+ * and write it to the given file.
+ *
+ * @param aXML
+ * the target file for output.
+ *
+ * @param nFormat
+ * the requested xml format.
+ * see const values FORMAT_xxx too.
+ *
+ * @param sEncoding
+ * specify the file encoding for the generated xml file.
+ *
+ * @throws [java.lang.Exception]
+ * if something fail during convertion.
+ */
+ public synchronized void toXML(java.io.File aXML ,
+ int nFormat ,
+ java.lang.String sEncoding)
+ throws java.lang.Exception
+ {
+ java.lang.StringBuffer sXML = new java.lang.StringBuffer(500000);
+
+ for (int i=0; i<5; ++i)
+ {
+ // define right sub container
+ java.lang.String sSetName = null;
+ java.util.HashMap rMap = null;
+ int eType = -1;
+
+ switch(i)
+ {
+ case 0 :
+ {
+ sSetName = CFGNODE_TYPES;
+ rMap = m_lTypes;
+ eType = E_TYPE;
+ }
+ break;
+
+ case 1 :
+ {
+ sSetName = CFGNODE_FILTERS;
+ rMap = m_lFilters;
+ eType = E_FILTER;
+ }
+ break;
+
+ case 2 :
+ {
+ sSetName = CFGNODE_DETECTSERVICES;
+ rMap = m_lDetectServices;
+ eType = E_DETECTSERVICE;
+ }
+ break;
+
+ case 3 :
+ {
+ sSetName = CFGNODE_FRAMELOADERS;
+ rMap = m_lFrameLoaders;
+ eType = E_FRAMELOADER;
+ }
+ break;
+
+ case 4 :
+ {
+ sSetName = CFGNODE_CONTENTHANDLERS;
+ rMap = m_lContentHandlers;
+ eType = E_CONTENTHANDLER;
+ }
+ break;
+ }
+
+ // generate set
+ sXML.append("<node oor:name=\""+sSetName+"\" oor:op=\"replace\">\n");
+ java.util.Iterator it = rMap.keySet().iterator();
+ while(it.hasNext())
+ {
+ java.lang.String sItem = (java.lang.String)it.next();
+ sXML.append("<node oor:name=\""+sItem+"\" oor:op=\"replace\">\n");
+ sXML.append(getItemAsXML(eType, sItem, nFormat));
+ sXML.append("</node>\n");
+ }
+ sXML.append("</node>\n");
+ }
+
+ java.io.FileOutputStream aStream = new java.io.FileOutputStream(aXML.getAbsolutePath(), false);
+ java.io.OutputStreamWriter aWriter = new java.io.OutputStreamWriter(aStream, sEncoding);
+ java.lang.String sOut = sXML.toString();
+ aWriter.write(sOut, 0, sOut.length());
+ aWriter.flush();
+ aWriter.close();
+ }
+
+ //___________________________________________
+
+ /** converts a type property set from internal format
+ * to an external one.
+ *
+ * @param aMap
+ * points to the item, which should be converted.
+ *
+ * @param nFormat
+ * specify the requested output format.
+ *
+ * @return [java.util.HashMap]
+ * contains the properties in the requested format.
+ *
+ * @throws [java.lang.Exception
+ * if something fail during convertion.
+ */
+ private static java.util.HashMap convertTypePropsToExternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = new java.util.HashMap();
+ // copy Name property ... if it exists!
+ if (aMap.containsKey(PROPNAME_NAME))
+ aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME));
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // copy UIName property unchanged
+ aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME));
+
+ // ignore properties "UIOrder", "PreferredFilter", "DetectService"
+ // They are not supported for 6.0 types.
+
+ // pack all other properties to one "Data" string value
+ java.lang.StringBuffer sData = new java.lang.StringBuffer(256);
+
+ sData.append(aMap.get(PROPNAME_PREFERRED));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_MEDIATYPE));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_CLIPBOARDFORMAT));
+ sData.append(",");
+
+ java.util.Vector lList = (java.util.Vector)aMap.get(PROPNAME_URLPATTERN);
+ int c = lList.size();
+ int i = 0;
+ for (i=0; i<c; ++i)
+ {
+ sData.append(lList.elementAt(i));
+ if (i<(c-1))
+ sData.append(";");
+ }
+
+ lList = (java.util.Vector)aMap.get(PROPNAME_EXTENSIONS);
+ c = lList.size();
+ for (i=0; i<c; ++i)
+ {
+ sData.append(lList.elementAt(i));
+ if (i<(c-1))
+ sData.append(";");
+ }
+
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_DOCUMENTICONID));
+ sData.append(",");
+
+ aResultMap.put(PROPNAME_DATA, sData.toString());
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // copy all supported properties directly
+ aResultMap.put(PROPNAME_PREFERRED , aMap.get(PROPNAME_PREFERRED ));
+ aResultMap.put(PROPNAME_MEDIATYPE , aMap.get(PROPNAME_MEDIATYPE ));
+ aResultMap.put(PROPNAME_URLPATTERN , aMap.get(PROPNAME_URLPATTERN ));
+ aResultMap.put(PROPNAME_EXTENSIONS , aMap.get(PROPNAME_EXTENSIONS ));
+ aResultMap.put(PROPNAME_UINAME , aMap.get(PROPNAME_UINAME ));
+ aResultMap.put(PROPNAME_PREFERREDFILTER, aMap.get(PROPNAME_PREFERREDFILTER));
+ aResultMap.put(PROPNAME_DETECTSERVICE , aMap.get(PROPNAME_DETECTSERVICE ));
+ aResultMap.put(PROPNAME_CLIPBOARDFORMAT, aMap.get(PROPNAME_CLIPBOARDFORMAT));
+ aResultMap.put(PROPNAME_UIORDER , aMap.get(PROPNAME_UIORDER ));
+ /* REMOVED!
+ aResultMap.put(PROPNAME_DOCUMENTICONID , aMap.get(PROPNAME_DOCUMENTICONID ));
+ */
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ //___________________________________________
+
+ /** converts a filter property set from internal format
+ * to an external one.
+ *
+ * @param aMap
+ * points to the item, which should be converted.
+ *
+ * @param nFormat
+ * specify the requested output format.
+ *
+ * @return [java.util.HashMap]
+ * contains the properties in the requested format.
+ *
+ * @throws [java.lang.Exception
+ * if something fail during convertion.
+ */
+ private static java.util.HashMap convertFilterPropsToExternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = new java.util.HashMap();
+ // copy Name property ... if it exists!
+ if (aMap.containsKey(PROPNAME_NAME))
+ aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME));
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // copy UIName property unchanged!
+ aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME));
+
+ // but pack all other properties
+ java.lang.StringBuffer sData = new java.lang.StringBuffer(256);
+
+ sData.append(aMap.get(PROPNAME_ORDER));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_TYPE));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_DOCUMENTSERVICE));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_FILTERSERVICE));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_FLAGS));
+ sData.append(",");
+ java.util.Vector lList = (java.util.Vector)aMap.get(PROPNAME_USERDATA);
+ int c = lList.size();
+ int i = 0;
+ for (i=0; i<c; ++i)
+ {
+ sData.append(lList.elementAt(i));
+ if (i<(c-1))
+ sData.append(";");
+ }
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_FILEFORMATVERSION));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_TEMPLATENAME));
+ sData.append(",");
+ sData.append(aMap.get(PROPNAME_UICOMPONENT));
+ sData.append(",");
+
+ aResultMap.put(PROPNAME_DATA, sData.toString());
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // supress "Order" property.
+ // Will be moved to type entries in 6.y version!
+
+ // supress "UIName" property.
+ // Only type entries will be localized in 6.y version!
+ /* TODO make it configurable :-) */
+ aResultMap.put(PROPNAME_UINAME , aMap.get(PROPNAME_UINAME ));
+
+ // copy all supported properties directly
+ aResultMap.put(PROPNAME_TYPE , aMap.get(PROPNAME_TYPE ));
+ aResultMap.put(PROPNAME_DOCUMENTSERVICE , aMap.get(PROPNAME_DOCUMENTSERVICE ));
+ aResultMap.put(PROPNAME_FILTERSERVICE , aMap.get(PROPNAME_FILTERSERVICE ));
+ aResultMap.put(PROPNAME_USERDATA , aMap.get(PROPNAME_USERDATA ));
+ aResultMap.put(PROPNAME_FILEFORMATVERSION, aMap.get(PROPNAME_FILEFORMATVERSION));
+ aResultMap.put(PROPNAME_TEMPLATENAME , aMap.get(PROPNAME_TEMPLATENAME ));
+ aResultMap.put(PROPNAME_UICOMPONENT , aMap.get(PROPNAME_UICOMPONENT ));
+
+ // "Flags" will be converted from internal format [int] to
+ // the 6.y format [string-list]!
+ java.lang.Integer nFlags = (java.lang.Integer)aMap.get(PROPNAME_FLAGS);
+ java.util.Vector lFlags = Cache.convertFilterFlagValues2Names(nFlags);
+ aResultMap.put(PROPNAME_FLAGS, lFlags);
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ //___________________________________________
+
+ /** converts a detect service property set from internal format
+ * to an external one.
+ *
+ * @param aMap
+ * points to the item, which should be converted.
+ *
+ * @param nFormat
+ * specify the requested output format.
+ *
+ * @return [java.util.HashMap]
+ * contains the properties in the requested format.
+ *
+ * @throws [java.lang.Exception
+ * if something fail during convertion.
+ */
+ private static java.util.HashMap convertDetectServicePropsToExternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = null;
+
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // no changes!
+ aResultMap = aMap;
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // remove localized name
+ aResultMap = aMap;
+ aResultMap.remove(PROPNAME_UINAME);
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ private static java.util.HashMap convertFrameLoaderPropsToExternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = null;
+
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // no changes!
+ aResultMap = aMap;
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // remove localized name
+ aResultMap = aMap;
+ aResultMap.remove(PROPNAME_UINAME);
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ private static java.util.HashMap convertContentHandlerPropsToExternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = null;
+
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // no changes!
+ aResultMap = aMap;
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // remove localized name
+ aResultMap = aMap;
+ aResultMap.remove(PROPNAME_UINAME);
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ //___________________________________________
+
+ /** converts a type property set (using an external format) to
+ * our internal cache format.
+ *
+ * Especialy the data format string will be expanded
+ * to its real properties.
+ *
+ * Schema:
+ * aMap["UIName"] => aExpandedMap["UIName"]
+ * aMap["Data" ] => aExpandedMap["Preferred" ], aExpandedMap["MediaType"] etc. ...
+ *
+ * @param aMap
+ * points to the item, which should be converted.
+
+ * @param nFormat
+ * specify the external format.
+ *
+ * @return [java.util.HashMap]
+ * The new map in internal format.
+ */
+ private static java.util.HashMap convertTypePropsToInternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = new java.util.HashMap();
+ // copy Name property ... if it exists!
+ if (aMap.containsKey(PROPNAME_NAME))
+ aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME));
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // copy UIName property unchanged!
+ aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME));
+
+ // generate new property "UIOrder"
+ // Its the moved property "Order" of filters for versions >= 6.y!
+ aResultMap.put(PROPNAME_UIORDER, new java.lang.Integer(0));
+
+ // generate new property "PreferredFilter"
+ // Its a the moved filter flag "Preferred" for versions >= 6.y!
+ aResultMap.put(PROPNAME_PREFERREDFILTER, new java.lang.String());
+
+ // generate new property "DetectService"
+ // Every type know its detector diretcly from now. No search
+ // will be neccessary any longer.
+ aResultMap.put(PROPNAME_DETECTSERVICE, new java.lang.String());
+
+ // analyze the Data property of the original map
+ // and copy its results (means all expanded properties)
+ // to the result map.
+ java.lang.String sDataVal = (java.lang.String)aMap.get(PROPNAME_DATA);
+ java.util.Vector lTokens = Cache.splitTokenString(sDataVal, ",");
+
+ int t = 0;
+ java.util.Enumeration it = lTokens.elements();
+ while (it.hasMoreElements())
+ {
+ java.lang.String sToken = (java.lang.String)it.nextElement();
+ switch(t)
+ {
+ case 0 :
+ aResultMap.put(PROPNAME_PREFERRED, new java.lang.Boolean(sToken));
+ break;
+ case 1 :
+ aResultMap.put(PROPNAME_MEDIATYPE, sToken);
+ break;
+ case 2 :
+ {
+ /*HACK ersetze %20 mit " " ...*/
+ int ni = sToken.indexOf("%20");
+ if (ni!=-1)
+ {
+ java.lang.String sPatch = sToken.substring(0,ni) + " " + sToken.substring(ni+3);
+ sToken = sPatch;
+ }
+ aResultMap.put(PROPNAME_CLIPBOARDFORMAT, sToken);
+ }
+ break;
+ case 3 :
+ aResultMap.put(PROPNAME_URLPATTERN, Cache.splitTokenString(sToken, ";"));
+ break;
+ case 4 :
+ aResultMap.put(PROPNAME_EXTENSIONS, Cache.splitTokenString(sToken, ";"));
+ break;
+ case 5 :
+ aResultMap.put(PROPNAME_DOCUMENTICONID, new java.lang.Integer(sToken));
+ break;
+ default :
+ throw new java.lang.Exception("unsupported format for data value of a type \""+aMap.get(PROPNAME_NAME)+"\" detected.");
+ }
+ ++t;
+ }
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // copy all supported properties directly
+ aResultMap.put(PROPNAME_PREFERRED , aMap.get(PROPNAME_PREFERRED ));
+ aResultMap.put(PROPNAME_MEDIATYPE , aMap.get(PROPNAME_MEDIATYPE ));
+ aResultMap.put(PROPNAME_CLIPBOARDFORMAT, aMap.get(PROPNAME_CLIPBOARDFORMAT));
+ aResultMap.put(PROPNAME_URLPATTERN , aMap.get(PROPNAME_URLPATTERN ));
+ aResultMap.put(PROPNAME_EXTENSIONS , aMap.get(PROPNAME_EXTENSIONS ));
+ aResultMap.put(PROPNAME_DOCUMENTICONID , aMap.get(PROPNAME_DOCUMENTICONID ));
+ aResultMap.put(PROPNAME_UINAME , aMap.get(PROPNAME_UINAME ));
+ aResultMap.put(PROPNAME_UIORDER , aMap.get(PROPNAME_UIORDER ));
+ aResultMap.put(PROPNAME_PREFERREDFILTER, aMap.get(PROPNAME_PREFERREDFILTER));
+ aResultMap.put(PROPNAME_DETECTSERVICE , aMap.get(PROPNAME_DETECTSERVICE ));
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ //___________________________________________
+
+ /** converts a filter property set (using an external format) to
+ * our internal cache format.
+ *
+ * Especialy the data format string will be expanded
+ * to its real properties.
+ *
+ * Schema:
+ * aMap["UIName"] => aExpandedMap["UIName"]
+ * aMap["Data" ] => aExpandedMap["Order" ], aExpandedMap["Flags"] etc. ...
+ *
+ * @param aMap
+ * points to the item, which should be converted.
+ *
+ * @param nFormat
+ * specify the external format.
+ *
+ * @return [java.util.HashMap]
+ * The new map in internal format.
+ */
+ private static java.util.HashMap convertFilterPropsToInternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aResultMap = new java.util.HashMap();
+ // copy Name property ... if it exists!
+ if (aMap.containsKey(PROPNAME_NAME))
+ aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME));
+ switch(nFormat)
+ {
+ //-----------------------------------
+ case FORMAT_60 :
+ {
+ // copy UIName property
+ aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME));
+
+ // analyze the Data property of the original map
+ // and copy its results (means all expanded properties)
+ // to the result map.
+ java.lang.String sDataVal = (java.lang.String)aMap.get(PROPNAME_DATA);
+ java.util.Vector lTokens = Cache.splitTokenString(sDataVal, ",");
+
+ int t = 0;
+ java.util.Enumeration it = lTokens.elements();
+ while (it.hasMoreElements())
+ {
+ java.lang.String sToken = (java.lang.String)it.nextElement();
+ switch(t)
+ {
+ case 0 :
+ aResultMap.put(PROPNAME_ORDER, new java.lang.Integer(sToken));
+ break;
+ case 1 :
+ aResultMap.put(PROPNAME_TYPE, sToken);
+ break;
+ case 2 :
+ aResultMap.put(PROPNAME_DOCUMENTSERVICE, sToken);
+ break;
+ case 3 :
+ aResultMap.put(PROPNAME_FILTERSERVICE, sToken);
+ break;
+ case 4 :
+ aResultMap.put(PROPNAME_FLAGS, new java.lang.Integer(sToken));
+ break;
+ case 5 :
+ aResultMap.put(PROPNAME_USERDATA, Cache.splitTokenString(sToken, ";"));
+ break;
+ case 6 :
+ aResultMap.put(PROPNAME_FILEFORMATVERSION, new java.lang.Integer(sToken));
+ break;
+ case 7 :
+ aResultMap.put(PROPNAME_TEMPLATENAME, sToken);
+ break;
+ case 8 :
+ aResultMap.put(PROPNAME_UICOMPONENT, sToken);
+ break;
+ default :
+ throw new java.lang.Exception("unsupported format for data value of a filter detected.");
+ }
+ ++t;
+ }
+
+ // its an optional property :-)
+ if (!aResultMap.containsKey(PROPNAME_TEMPLATENAME))
+ aResultMap.put(PROPNAME_TEMPLATENAME, new java.lang.String(""));
+
+ // its an optional property :-)
+ if (!aResultMap.containsKey(PROPNAME_UICOMPONENT))
+ aResultMap.put(PROPNAME_UICOMPONENT, new java.lang.String(""));
+ }
+ break;
+
+ //-----------------------------------
+ case FORMAT_6Y :
+ {
+ // "Order" does not exist for 6.y versions! Use default.
+ aResultMap.put(PROPNAME_ORDER, new java.lang.Integer(0));
+
+ // "UIName" property does not exist for 6.y versions! use default.
+ /* TODO make it configurable :-) */
+ aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME));
+ //aResultMap.put(PROPNAME_UINAME, new java.util.HashMap());
+
+ // "Flags" must be converted from names to its values
+ java.util.Vector lFlags = (java.util.Vector)aMap.get(PROPNAME_FLAGS);
+ java.lang.Integer nFlags = Cache.convertFilterFlagNames2Values(lFlags);
+ aResultMap.put(PROPNAME_FLAGS, nFlags);
+
+ // copy all direct supported properties
+ aResultMap.put(PROPNAME_TYPE , aMap.get(PROPNAME_TYPE ));
+ aResultMap.put(PROPNAME_DOCUMENTSERVICE , aMap.get(PROPNAME_DOCUMENTSERVICE ));
+ aResultMap.put(PROPNAME_FILTERSERVICE , aMap.get(PROPNAME_ORDER ));
+ aResultMap.put(PROPNAME_USERDATA , aMap.get(PROPNAME_USERDATA ));
+ aResultMap.put(PROPNAME_FILEFORMATVERSION, aMap.get(PROPNAME_FILEFORMATVERSION));
+ aResultMap.put(PROPNAME_TEMPLATENAME , aMap.get(PROPNAME_TEMPLATENAME ));
+ aResultMap.put(PROPNAME_UICOMPONENT , aMap.get(PROPNAME_UICOMPONENT ));
+ }
+ break;
+
+ //-----------------------------------
+ default :
+ throw new java.lang.Exception("unknown format");
+ }
+
+ return aResultMap;
+ }
+
+ private static java.util.HashMap convertDetectServicePropsToInternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ /*FIXME*/
+ java.util.HashMap aResultMap = aMap;
+ return aResultMap;
+ }
+
+ private static java.util.HashMap convertFrameLoaderPropsToInternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ /*FIXME*/
+ java.util.HashMap aResultMap = aMap;
+ return aResultMap;
+ }
+
+ private static java.util.HashMap convertContentHandlerPropsToInternal(java.util.HashMap aMap ,
+ int nFormat)
+ throws java.lang.Exception
+ {
+ /*FIXME*/
+ java.util.HashMap aResultMap = aMap;
+ return aResultMap;
+ }
+
+ //___________________________________________
+
+ /** converts filter flag names to its int representation.
+ *
+ * @param lFlags
+ * a list of flag names.
+ *
+ * @return [java.lang.Integer]
+ * an integer field of all set flags.
+ *
+ * @throws [java.lang.Exception]
+ * for unsupported flags or empty flag fields!
+ */
+ private static java.lang.Integer convertFilterFlagNames2Values(java.util.Vector lFlags)
+ throws java.lang.Exception
+ {
+ int nFlags = 0;
+ java.util.Enumeration it = lFlags.elements();
+ while(it.hasMoreElements())
+ {
+ java.lang.String sFlagName = (java.lang.String)it.nextElement();
+
+ if (sFlagName.equals(FLAGNAME_3RDPARTYFILTER))
+ nFlags |= FLAGVAL_3RDPARTYFILTER;
+ else
+ if (sFlagName.equals(FLAGNAME_ALIEN))
+ nFlags |= FLAGVAL_ALIEN;
+ else
+ if (sFlagName.equals(FLAGNAME_ASYNCHRON))
+ nFlags |= FLAGVAL_ASYNCHRON;
+ else
+ if (sFlagName.equals(FLAGNAME_BROWSERPREFERRED))
+ nFlags |= FLAGVAL_BROWSERPREFERRED;
+ else
+ if (sFlagName.equals(FLAGNAME_CONSULTSERVICE))
+ nFlags |= FLAGVAL_CONSULTSERVICE;
+ else
+ if (sFlagName.equals(FLAGNAME_DEFAULT))
+ nFlags |= FLAGVAL_DEFAULT;
+ else
+ if (sFlagName.equals(FLAGNAME_EXPORT))
+ nFlags |= FLAGVAL_EXPORT;
+ else
+ if (sFlagName.equals(FLAGNAME_IMPORT))
+ nFlags |= FLAGVAL_IMPORT;
+ else
+ if (sFlagName.equals(FLAGNAME_INTERNAL))
+ nFlags |= FLAGVAL_INTERNAL;
+ else
+ if (sFlagName.equals(FLAGNAME_NOTINCHOOSER))
+ nFlags |= FLAGVAL_NOTINCHOOSER;
+ else
+ if (sFlagName.equals(FLAGNAME_NOTINFILEDIALOG))
+ nFlags |= FLAGVAL_NOTINFILEDIALOG;
+ else
+ if (sFlagName.equals(FLAGNAME_NOTINSTALLED))
+ nFlags |= FLAGVAL_NOTINSTALLED;
+ else
+ if (sFlagName.equals(FLAGNAME_OWN))
+ nFlags |= FLAGVAL_OWN;
+ else
+ if (sFlagName.equals(FLAGNAME_PACKED))
+ nFlags |= FLAGVAL_PACKED;
+ else
+ if (sFlagName.equals(FLAGNAME_PREFERRED))
+ nFlags |= FLAGVAL_PREFERRED;
+ else
+ if (sFlagName.equals(FLAGNAME_READONLY))
+ nFlags |= FLAGVAL_READONLY;
+ else
+ if (sFlagName.equals(FLAGNAME_SILENTEXPORT))
+ nFlags |= FLAGVAL_SILENTEXPORT;
+ else
+ if (sFlagName.equals(FLAGNAME_TEMPLATE))
+ nFlags |= FLAGVAL_TEMPLATE;
+ else
+ if (sFlagName.equals(FLAGNAME_TEMPLATEPATH))
+ nFlags |= FLAGVAL_TEMPLATEPATH;
+ else
+ if (sFlagName.equals(FLAGNAME_USESOPTIONS))
+ nFlags |= FLAGVAL_USESOPTIONS;
+ else
+ if (sFlagName.equals(FLAGNAME_COMBINED))
+ nFlags |= FLAGVAL_COMBINED;
+ else
+ throw new java.lang.Exception("unsupported filter flag detected: \""+sFlagName+"\"");
+ }
+
+ if (nFlags == 0)
+ throw new java.lang.Exception("no filter flags?");
+
+ return new java.lang.Integer(nFlags);
+ }
+
+ //___________________________________________
+
+ /** converts filter flag values to its string representation.
+ *
+ * @param nFlags
+ * the flag field as int value.
+ *
+ * @return [java.util.Vector]
+ * a list of flag names.
+ *
+ * @throws [java.lang.Exception]
+ * for unsupported flags or empty flag fields!
+ */
+ private static java.util.Vector convertFilterFlagValues2Names(java.lang.Integer nFlags)
+ throws java.lang.Exception
+ {
+ java.util.Vector lFlags = new java.util.Vector();
+ int field = nFlags.intValue();
+
+ if (field == 0)
+ throw new java.lang.Exception("no filter flags?");
+
+ if((field & FLAGVAL_IMPORT) == FLAGVAL_IMPORT)
+ lFlags.add(FLAGNAME_IMPORT);
+
+ if((field & FLAGVAL_EXPORT) == FLAGVAL_EXPORT)
+ lFlags.add(FLAGNAME_EXPORT);
+
+ if((field & FLAGVAL_TEMPLATE) == FLAGVAL_TEMPLATE)
+ lFlags.add(FLAGNAME_TEMPLATE);
+
+ if((field & FLAGVAL_INTERNAL) == FLAGVAL_INTERNAL)
+ lFlags.add(FLAGNAME_INTERNAL);
+
+ if((field & FLAGVAL_TEMPLATEPATH) == FLAGVAL_TEMPLATEPATH)
+ lFlags.add(FLAGNAME_TEMPLATEPATH);
+
+ if((field & FLAGVAL_OWN) == FLAGVAL_OWN)
+ lFlags.add(FLAGNAME_OWN);
+
+ if((field & FLAGVAL_ALIEN) == FLAGVAL_ALIEN)
+ lFlags.add(FLAGNAME_ALIEN);
+
+ if((field & FLAGVAL_USESOPTIONS) == FLAGVAL_USESOPTIONS)
+ lFlags.add(FLAGNAME_USESOPTIONS);
+
+ if((field & FLAGVAL_DEFAULT) == FLAGVAL_DEFAULT)
+ lFlags.add(FLAGNAME_DEFAULT);
+
+ if((field & FLAGVAL_NOTINFILEDIALOG) == FLAGVAL_NOTINFILEDIALOG)
+ lFlags.add(FLAGNAME_NOTINFILEDIALOG);
+
+ if((field & FLAGVAL_NOTINCHOOSER) == FLAGVAL_NOTINCHOOSER)
+ lFlags.add(FLAGNAME_NOTINCHOOSER);
+
+ if((field & FLAGVAL_ASYNCHRON) == FLAGVAL_ASYNCHRON)
+ lFlags.add(FLAGNAME_ASYNCHRON);
+
+ if((field & FLAGVAL_READONLY) == FLAGVAL_READONLY)
+ lFlags.add(FLAGNAME_READONLY);
+
+ if((field & FLAGVAL_NOTINSTALLED) == FLAGVAL_NOTINSTALLED)
+ lFlags.add(FLAGNAME_NOTINSTALLED);
+
+ if((field & FLAGVAL_CONSULTSERVICE) == FLAGVAL_CONSULTSERVICE)
+ lFlags.add(FLAGNAME_CONSULTSERVICE);
+
+ if((field & FLAGVAL_3RDPARTYFILTER) == FLAGVAL_3RDPARTYFILTER)
+ lFlags.add(FLAGNAME_3RDPARTYFILTER);
+
+ if((field & FLAGVAL_PACKED) == FLAGVAL_PACKED)
+ lFlags.add(FLAGNAME_PACKED);
+
+ if((field & FLAGVAL_SILENTEXPORT) == FLAGVAL_SILENTEXPORT)
+ lFlags.add(FLAGNAME_SILENTEXPORT);
+
+ if((field & FLAGVAL_BROWSERPREFERRED) == FLAGVAL_BROWSERPREFERRED)
+ lFlags.add(FLAGNAME_BROWSERPREFERRED);
+
+ if((field & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED)
+ lFlags.add(FLAGNAME_PREFERRED);
+
+ if((field & FLAGVAL_COMBINED) == FLAGVAL_COMBINED)
+ lFlags.add(FLAGNAME_COMBINED);
+
+ if((field & FLAGVAL_COMBINED) == FLAGVAL_SUPPORTSSELECTION)
+ lFlags.add(FLAGNAME_SUPPORTSSELECTION);
+
+ return lFlags;
+ }
+
+ //___________________________________________
+
+ /** return a reference to one of our member
+ * lists for types/filters etc ...
+ *
+ * @param eItemType
+ * specify, which item map is required.
+ *
+ * @return [java.util.HashMap]
+ * a reference(!) to the right member.
+ *
+ * @throws [java.lang.Exception]
+ * if the specified map does not exist.
+ */
+ private java.util.HashMap getItemMap(int eItemType)
+ throws java.lang.Exception
+ {
+ java.util.HashMap rMap = null;
+ switch(eItemType)
+ {
+ case E_TYPE :
+ rMap = m_lTypes;
+ break;
+
+ case E_FILTER :
+ rMap = m_lFilters;
+ break;
+
+ case E_DETECTSERVICE :
+ rMap = m_lDetectServices;
+ break;
+
+ case E_FRAMELOADER :
+ rMap = m_lFrameLoaders;
+ break;
+
+ case E_CONTENTHANDLER :
+ rMap = m_lContentHandlers;
+ break;
+
+ default:
+ throw new java.lang.Exception("Invalid item map specified.");
+ }
+ return rMap;
+ }
+
+ //___________________________________________
+
+ /** return the count of items inside a sub container
+ * of this cache.
+ *
+ * @param eItemType
+ * specify, which item map is required.
+ *
+ * @throws [java.lang.Exception]
+ * if the specified map does not exist.
+ */
+ public synchronized int getItemCount(int eItemType)
+ throws java.lang.Exception
+ {
+ java.util.HashMap rMap = getItemMap(eItemType);
+ return rMap.size();
+ }
+
+ //___________________________________________
+
+ /** get a list of all item names of the specified
+ * sub container.
+ *
+ * @param eItemType
+ * specify, which item map is required.
+ *
+ * @throws [java.lang.Exception]
+ * if the specified map does not exist.
+ */
+ public synchronized java.util.Vector getItemNames(int eItemType)
+ throws java.lang.Exception
+ {
+ java.util.Vector lNames = new java.util.Vector();
+ java.util.HashMap rMap = getItemMap(eItemType);
+ java.util.Iterator it = rMap.keySet().iterator();
+ while(it.hasNext())
+ lNames.add(it.next());
+ return lNames;
+ }
+
+ //___________________________________________
+
+ /** get a list of all item names of the specified
+ * sub coontainer, where items match to given property set.
+ *
+ * Note: The given property set must exist at all
+ * returned items as minimum and every checked property
+ * value must be equals! Using of reg expressions or
+ * similar mechanism will not be supported here.
+ *
+ * @param eItemType
+ * specify, which item map is required.
+ *
+ * @param aPropSet
+ * the set of properties, which must
+ * exist at the returned item as minimum.
+ *
+ * @throws [java.lang.Exception]
+ * if the specified map does not exist.
+ */
+ public synchronized java.util.Vector getMatchedItemNames(int eItemType,
+ java.util.HashMap aPropSet )
+ throws java.lang.Exception
+ {
+ java.util.Vector lNames = new java.util.Vector();
+ java.util.HashMap rMap = getItemMap(eItemType);
+ java.util.Iterator it = rMap.keySet().iterator();
+ while(it.hasNext())
+ {
+ java.lang.String sItemName = (java.lang.String)it.next();
+ java.util.HashMap rItemProps = (java.util.HashMap)rMap.get(sItemName);
+
+ boolean bMatch = Cache.matchPropSet(rItemProps, aPropSet);
+ if (bMatch)
+ lNames.add(sItemName);
+ else
+ {
+ java.lang.StringBuffer sBuffer = new java.lang.StringBuffer(1000);
+ sBuffer.append("entry ["+eItemType+"] \""+sItemName+"\" does not match.\n");
+ sBuffer.append("\torg items = {"+rItemProps+"}\n");
+ sBuffer.append("\treq items = {"+aPropSet+"}\n");
+
+ m_aDebug.setDetailedInfo(sBuffer.toString());
+ }
+ }
+ return lNames;
+ }
+
+ //___________________________________________
+
+ /** check if two property sets are equals in its
+ * shared properties.
+ *
+ * Note: Only set properties of the match set will be searched
+ * inside the original set. And its values must be equals.
+ * Using of reg expressions or similar mechanism will not
+ * be supported here.
+ *
+ * @param rOrgProps
+ * the original property set, which should be checked.
+ *
+ * @param rMatchProps
+ * contains the properties, which must be searched
+ * inside rOrgProps.
+ *
+ * @return TRUE if all properties of rMatchProps could be located
+ * inside rOrgProps.
+ */
+ private static boolean matchPropSet(java.util.HashMap rOrgProps ,
+ java.util.HashMap rMatchProps)
+ {
+ java.util.Iterator it = rMatchProps.keySet().iterator();
+ while(it.hasNext())
+ {
+ java.lang.String sMatchName = (java.lang.String)it.next();
+ java.lang.Object aMatchValue = rMatchProps.get(sMatchName);
+
+ if (
+ (!rOrgProps.containsKey(sMatchName) ) ||
+ (!rOrgProps.get(sMatchName).equals(aMatchValue))
+ )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ //___________________________________________
+
+ /** return a property set for the queried container item.
+ *
+ * @param eItemType
+ * specify, which item map is required.
+ *
+ * @param sItemName
+ * must be a valid item name of the specified item map.
+ *
+ * @return [java.util.HashMap]
+ * the property set of the queried item.
+ * Always different from null!
+ *
+ * @throws [java.lang.Exception]
+ * if the specified item does not exists or
+ * seems to be invalid in general (means null!).
+ */
+ public synchronized java.util.HashMap getItem(int eItemType,
+ java.lang.String sItemName)
+ throws java.lang.Exception
+ {
+ java.util.HashMap rMap = getItemMap(eItemType);
+ java.util.HashMap rItem = (java.util.HashMap)rMap.get(sItemName);
+ if (rItem == null)
+ throw new java.lang.Exception("Queried item \""+sItemName+"\" does not exist inside this cache.");
+ return rItem;
+ }
+
+ //___________________________________________
+
+ /** return a requested item in XML format.
+ *
+ * @param eItemType
+ * identify the right sub set of this cache
+ * inside which the requested item should exist.
+ * e.g. E_TYPE, E_FILTER, ...
+ *
+ * @param sItemName
+ * the name of the request item
+ *
+ * @param nXMLFormat
+ * means the format of the generated xml source.
+ *
+ * @return [java.lang.String]
+ * a xml formated string, which contains all properties
+ * for this container item.
+ */
+ public synchronized java.lang.String getItemAsXML(int eItemType ,
+ java.lang.String sItemName ,
+ int nXMLFormat)
+ throws java.lang.Exception
+ {
+ // Note: Our internal format must be converted to the target format!
+ java.util.HashMap rItem = getItem(eItemType, sItemName);
+ java.util.HashMap rFormatedItem = null;
+ switch(eItemType)
+ {
+ case E_TYPE :
+ {
+ rFormatedItem = Cache.convertTypePropsToExternal(rItem, nXMLFormat);
+ m_aDebug.setGlobalInfo("type to external \""+sItemName+"\"");
+ }
+ break;
+
+ case E_FILTER :
+ {
+ rFormatedItem = Cache.convertFilterPropsToExternal(rItem, nXMLFormat);
+ m_aDebug.setGlobalInfo("filter to external \""+sItemName+"\"");
+ }
+ break;
+
+ case E_DETECTSERVICE :
+ {
+ rFormatedItem = Cache.convertDetectServicePropsToExternal(rItem, nXMLFormat);
+ m_aDebug.setGlobalInfo("detect service to external \""+sItemName+"\"");
+ }
+ break;
+
+ case E_FRAMELOADER :
+ {
+ rFormatedItem = Cache.convertFrameLoaderPropsToExternal(rItem, nXMLFormat);
+ m_aDebug.setGlobalInfo("frame loader to external \""+sItemName+"\"");
+ }
+ break;
+
+ case E_CONTENTHANDLER :
+ {
+ rFormatedItem = Cache.convertContentHandlerPropsToExternal(rItem, nXMLFormat);
+ m_aDebug.setGlobalInfo("content handler to external \""+sItemName+"\"");
+ }
+ break;
+ }
+
+ java.lang.StringBuffer sXML = new java.lang.StringBuffer(1000);
+ int nPrettyTabs = 1;
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+ sXML.append("<"+XMLHelper.XMLTAG_NODE+" "+XMLHelper.XMLATTRIB_OOR_NAME+"=\""+XMLHelper.encodeHTMLSigns(sItemName)+"\" "+XMLHelper.XMLATTRIB_OOR_OP+"=\""+XMLHelper.XMLATTRIB_OP_REPLACE+"\">\n");
+ sXML.append(XMLHelper.convertPropSetToXML(rFormatedItem, nPrettyTabs+1));
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+ sXML.append("</"+XMLHelper.XMLTAG_NODE+">\n");
+
+ return sXML.toString();
+ }
+
+ //___________________________________________
+
+ /** split the given string (using the specified delimiter)
+ * and return alist of found string tokens.
+ *
+ * Note: Against the normal behaviour of the StringTokenizer class
+ * this method returns empty tokens too.
+ * E.g: "0,,1" will return "0" - "" - "1"
+ *
+ * @param sTokenString
+ * the string value, which should be analyzed.
+ *
+ * @param sDelim
+ * the delimiter, which will be used to differe between tokens.
+ *
+ * @return [java.util.Vector]
+ * a list of string tokens. Can be empty - but not null!
+ */
+ private static java.util.Vector splitTokenString(java.lang.String sTokenString,
+ java.lang.String sDelim )
+ {
+ java.util.Vector lTokens = new java.util.Vector();
+ java.util.StringTokenizer aTokenizer = new java.util.StringTokenizer(sTokenString, sDelim, true);
+ boolean bLastWasDelim = false;
+
+ while (aTokenizer.hasMoreTokens())
+ {
+ java.lang.String sToken = aTokenizer.nextToken();
+ if (sToken.equals(sDelim))
+ {
+ if (bLastWasDelim)
+ {
+ // last token was a delimiter - new one too
+ // => an empty token must be placed between these
+ // two delimiters! Add this empty value to the return list.
+ lTokens.add("");
+ }
+ else
+ {
+ // last token was not a delimiter - new one is such delim
+ // => ignore this delimiter - but save the information, that
+ // it occured
+ bLastWasDelim = true;
+ }
+ }
+ else
+ {
+ // new token is no delim
+ // => Add it to the return list.
+ lTokens.add(sToken);
+ // Dont forget to reset this information - so next loop
+ // will do the right things!
+ bLastWasDelim = false;
+ }
+ }
+
+ return lTokens;
+ }
+
+ //___________________________________________
+
+ /**
+ */
+ public synchronized void analyze()
+ {
+ m_nDoubleRegisteredFilters = 0;
+ m_nTypesForFilters = 0;
+ m_nTypesForDetectServices = 0;
+ m_nTypesForFrameLoaders = 0;
+ m_nTypesForContentHandlers = 0;
+
+ // create table of types and all registered filters for such types
+ // By the way: count all double registrations, where a filter
+ // uses the same type then another filter.
+ m_lFilterToTypeRegistrations = new java.util.HashMap();
+ java.util.Iterator aIt1 = m_lFilters.keySet().iterator();
+ while (aIt1.hasNext())
+ {
+ java.lang.String sFilter = (java.lang.String)aIt1.next();
+ java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter);
+ java.lang.String sType = (java.lang.String)aFilter.get(PROPNAME_TYPE);
+
+ java.util.Vector lFilters = (java.util.Vector)m_lFilterToTypeRegistrations.get(sType);
+ if (lFilters == null)
+ lFilters = new java.util.Vector();
+ else
+ ++m_nDoubleRegisteredFilters;
+ lFilters.add(sFilter);
+ m_lFilterToTypeRegistrations.put(sType, lFilters);
+ }
+
+ // count, how many types are used by filters, frame loaders or content handlers
+ aIt1 = m_lTypes.keySet().iterator();
+ while (aIt1.hasNext())
+ {
+ java.lang.String sType = (java.lang.String)aIt1.next();
+
+ java.util.Iterator aIt2 = m_lFilters.keySet().iterator();
+ while (aIt2.hasNext())
+ {
+ java.lang.String sItem = (java.lang.String)aIt2.next();
+ java.util.HashMap aItem = (java.util.HashMap)m_lFilters.get(sItem);
+ java.lang.String sTypeReg = (java.lang.String)aItem.get(PROPNAME_TYPE);
+
+ if (sTypeReg.equals(sType))
+ {
+ ++m_nTypesForFilters;
+ break;
+ }
+ }
+
+ aIt2 = m_lDetectServices.keySet().iterator();
+ while (aIt2.hasNext())
+ {
+ java.lang.String sItem = (java.lang.String)aIt2.next();
+ java.util.HashMap aItem = (java.util.HashMap)m_lDetectServices.get(sItem);
+ java.util.Vector lTypeReg = (java.util.Vector)aItem.get(PROPNAME_TYPES);
+
+ if (lTypeReg.contains(sType))
+ {
+ ++m_nTypesForDetectServices;
+ break;
+ }
+ }
+
+ aIt2 = m_lFrameLoaders.keySet().iterator();
+ while (aIt2.hasNext())
+ {
+ java.lang.String sItem = (java.lang.String)aIt2.next();
+ java.util.HashMap aItem = (java.util.HashMap)m_lFrameLoaders.get(sItem);
+ java.util.Vector lTypeReg = (java.util.Vector)aItem.get(PROPNAME_TYPES);
+
+ if (lTypeReg.contains(sType))
+ {
+ ++m_nTypesForFrameLoaders;
+ break;
+ }
+ }
+
+ aIt2 = m_lContentHandlers.keySet().iterator();
+ while (aIt2.hasNext())
+ {
+ java.lang.String sItem = (java.lang.String)aIt2.next();
+ java.util.HashMap aItem = (java.util.HashMap)m_lContentHandlers.get(sItem);
+ java.util.Vector lTypeReg = (java.util.Vector)aItem.get(PROPNAME_TYPES);
+
+ if (lTypeReg.contains(sType))
+ {
+ ++m_nTypesForContentHandlers;
+ break;
+ }
+ }
+ }
+ }
+
+ //___________________________________________
+
+ /** validate all cache entries.
+ *
+ * It checks if all made registrations are valid;
+ * try to repair some simple problems;
+ * create missing informations on demand ...
+ *
+ * @param nFormat
+ * specify, which configuration format
+ * must be checked.
+ *
+ * @throws [java.lang.Exception]
+ * if an unrecoverable problem occure.
+ */
+ public synchronized void validate(int nFormat)
+ throws java.lang.Exception
+ {
+ validateTypes(nFormat);
+ validateFilters(nFormat);
+ }
+
+ //___________________________________________
+
+ /** validate all type entries of this cache.
+ *
+ * @param nFormat
+ * specify, which configuration format
+ * must be checked.
+ *
+ * @throws [java.lang.Exception]
+ * if an unrecoverable problem occure.
+ */
+ private void validateTypes(int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.Iterator aIt1 = m_lTypes.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ java.lang.String sType = (java.lang.String)aIt1.next();
+ java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sType);
+ if (aType == null)
+ throw new java.lang.Exception("type ["+sType+"] dos not exist realy?!");
+
+ if (
+ (!aType.containsKey(PROPNAME_MEDIATYPE )) ||
+ (!aType.containsKey(PROPNAME_PREFERRED )) ||
+ (!aType.containsKey(PROPNAME_CLIPBOARDFORMAT)) ||
+ (!aType.containsKey(PROPNAME_DOCUMENTICONID )) ||
+ (!aType.containsKey(PROPNAME_URLPATTERN )) ||
+ (!aType.containsKey(PROPNAME_EXTENSIONS )) ||
+ (!aType.containsKey(PROPNAME_UINAME ))
+ )
+ {
+ throw new java.lang.Exception("Type \""+sType+"\" does not contain all neccessary properties for a 6.0/6.Y format.");
+ }
+
+ if (
+ (((java.util.Vector)aType.get(PROPNAME_EXTENSIONS)).isEmpty()) &&
+ (((java.util.Vector)aType.get(PROPNAME_URLPATTERN)).isEmpty())
+ )
+ {
+ throw new java.lang.Exception("Type \""+sType+"\" does not contain any extension nor an url pattern.");
+ }
+
+ if (((java.util.HashMap)aType.get(PROPNAME_UINAME)).isEmpty())
+ throw new java.lang.Exception("Type \""+sType+"\" is not localized.");
+
+ if (nFormat == FORMAT_6Y)
+ {
+ if (
+ (!aType.containsKey(PROPNAME_UIORDER )) ||
+ (!aType.containsKey(PROPNAME_PREFERREDFILTER)) ||
+ (!aType.containsKey(PROPNAME_DETECTSERVICE ))
+ )
+ {
+ throw new java.lang.Exception("Type \""+sType+"\" does not contain all neccessary properties for a 6.Y format.");
+ }
+
+ if (((java.lang.Integer)aType.get(PROPNAME_UIORDER)).intValue() < 0)
+ throw new java.lang.Exception("Type \""+sType+"\" has invalid value for prop UIOrder.");
+
+ if (((java.lang.String)aType.get(PROPNAME_DETECTSERVICE)).length() < 1)
+ m_aDebug.setWarning("Type \""+sType+"\" has no detect service registered.");
+
+ java.lang.String sPreferredReg = (java.lang.String)aType.get(PROPNAME_PREFERREDFILTER);
+ if (
+ (sPreferredReg == null) ||
+ (sPreferredReg.length() < 1 )
+ )
+ {
+ m_aDebug.setWarning("Type \""+sType+"\" has no preferred filter ...");
+ /*FIXME
+ * OK - not every type has a filter registered .. but the
+ * a frame loader MUST(!) exist! Check it.
+ */
+ }
+ else
+ {
+ if (!m_lFilters.containsKey(sPreferredReg))
+ throw new java.lang.Exception("Type \""+sType+"\" has no valid preferred filter registration [\""+sPreferredReg+"\"].");
+ }
+ }
+ }
+ }
+
+ //___________________________________________
+
+ /** validate all filter entries of this cache.
+ *
+ * @param nFormat
+ * specify, which configuration format
+ * must be checked.
+ *
+ * @throws [java.lang.Exception]
+ * if an unrecoverable problem occure.
+ */
+ public synchronized void validateFilters(int nFormat)
+ throws java.lang.Exception
+ {
+ java.util.Iterator aIt1 = m_lFilters.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ java.lang.String sFilter = (java.lang.String)aIt1.next();
+ java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter);
+ if (aFilter == null)
+ throw new java.lang.Exception("filter ["+sFilter+"] dos not exist realy?!");
+
+ if (
+ (!aFilter.containsKey(PROPNAME_DOCUMENTSERVICE )) ||
+ (!aFilter.containsKey(PROPNAME_FILEFORMATVERSION)) ||
+ (!aFilter.containsKey(PROPNAME_FILTERSERVICE )) ||
+ (!aFilter.containsKey(PROPNAME_FLAGS )) ||
+ (!aFilter.containsKey(PROPNAME_TEMPLATENAME )) ||
+ (!aFilter.containsKey(PROPNAME_TYPE )) ||
+ (!aFilter.containsKey(PROPNAME_UICOMPONENT )) ||
+ (!aFilter.containsKey(PROPNAME_USERDATA ))
+ )
+ {
+ throw new java.lang.Exception("Filter \""+sFilter+"\" does not contain all neccessary properties for a 6.0/6.Y format.");
+ }
+
+ if (((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue() < 1)
+ throw new java.lang.Exception("Filter \""+sFilter+"\" does not have a valid flag field.");
+
+ if (!m_lTypes.containsKey(aFilter.get(PROPNAME_TYPE)))
+ throw new java.lang.Exception("Filter \""+sFilter+"\" is not registered for a well known type.");
+
+ if (nFormat == FORMAT_60)
+ {
+ if (
+ (!aFilter.containsKey(PROPNAME_ORDER )) ||
+ (!aFilter.containsKey(PROPNAME_UINAME))
+ )
+ {
+ throw new java.lang.Exception("Filter \""+sFilter+"\" does not contain all neccessary properties for a 6.0 format.");
+ }
+
+ if (((java.lang.Integer)aFilter.get(PROPNAME_ORDER)).intValue() < 0)
+ throw new java.lang.Exception("Filter \""+sFilter+"\" does not have a valid Order value.");
+
+ if (((java.util.HashMap)aFilter.get(PROPNAME_UINAME)).isEmpty())
+ throw new java.lang.Exception("Filter \""+sFilter+"\" is not localized.");
+ }
+/*TODO
+ depends from the configuration item "remove_filter_flag_preferred" ...
+
+ if (nFormat == FORMAT_6Y)
+ {
+ int flags = ((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue();
+ if ((flags & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED)
+ throw new java.lang.Exception("Filter \""+sFilter+"\" has superflous Preferred flag set. Please remove this flag. ["+flags+"]");
+ }
+*/
+ }
+ }
+
+ /*TODO
+ * - remove graphic filters!
+ * - move detect services to types
+ */
+
+ public synchronized void transform60to6Y(boolean bCreateCombineFilterFlag ,
+ boolean bRemoveFilterFlagBrowserPreferred,
+ boolean bRemoveFilterFlagPreferred ,
+ boolean bRemoveFilterFlag3rdparty ,
+ boolean bRemoveFilterUINames ,
+ boolean bRemoveGraphicFilters ,
+ boolean bSetDefaultDetector )
+ throws java.lang.Exception
+ {
+ // remove some superflous cache entries ...
+ // everything related to "load macros"
+ // Macros should be dispatched instead of loaded!
+ if (m_lTypes.containsKey("macro"))
+ {
+ m_lTypes.remove("macro");
+ m_aDebug.setDetailedInfo("superflous type \"macro\" was removed");
+ }
+ if (m_lFrameLoaders.containsKey("com.sun.star.comp.sfx2.SfxMacroLoader"))
+ {
+ m_lFrameLoaders.remove("com.sun.star.comp.sfx2.SfxMacroLoader");
+ m_aDebug.setDetailedInfo("superflous frame loader \"com.sun.star.comp.sfx2.SfxMacroLoader\" was removed");
+ }
+
+ // step over all filters and check her properties and references
+ java.util.Vector lPreferredFilters = new java.util.Vector();
+ java.util.Vector lNoRealFilters = new java.util.Vector();
+ java.util.Iterator aIt1 = m_lFilters.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ java.lang.String sFilter = (java.lang.String)aIt1.next();
+ java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter);
+
+ // remove the "graphic helper filters" used by draw and impress
+ // They dont have any valid document service name set and cant be handled
+ // by our generic FrameLoader!
+ // They must be moved to her own configuration ...
+
+ if (
+ (bRemoveGraphicFilters ) &&
+ (((java.lang.String)aFilter.get(PROPNAME_DOCUMENTSERVICE)).length() < 1)
+ )
+ {
+ lNoRealFilters.add(sFilter);
+ continue;
+ }
+
+ java.lang.String sTypeReg = (java.lang.String)aFilter.get(PROPNAME_TYPE);
+ java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg);
+
+ // move UINames of filters to types
+ java.util.HashMap lFilterUINames = (java.util.HashMap)aFilter.get(PROPNAME_UINAME);
+ java.util.HashMap lTypeUINames = (java.util.HashMap)aType.get(PROPNAME_UINAME);
+ java.util.HashMap lPatchUINames = new java.util.HashMap();
+
+ java.util.Iterator pUINames = lTypeUINames.keySet().iterator();
+ while(pUINames.hasNext())
+ {
+ java.lang.String sLocale = (java.lang.String)pUINames.next();
+ java.lang.String sValue = (java.lang.String)lTypeUINames.get(sLocale);
+ lPatchUINames.put(sLocale, sValue);
+ }
+
+ pUINames = lFilterUINames.keySet().iterator();
+ while(pUINames.hasNext())
+ {
+ java.lang.String sLocale = (java.lang.String)pUINames.next();
+ java.lang.String sValue = (java.lang.String)lFilterUINames.get(sLocale);
+ lPatchUINames.put(sFilter+":"+sLocale, sValue);
+ }
+ aType.put(PROPNAME_UINAME, lPatchUINames);
+
+ // set generic filter service wrapper for our own native filters!
+ // By the way: The format types of such filters can be detected by our
+ // generic detector too.
+ if (
+ (bSetDefaultDetector ) &&
+ (((java.lang.String)aFilter.get(PROPNAME_FILTERSERVICE)).length() < 1)
+ )
+ {
+ /*ME_THINKING aFilter.put(PROPNAME_FILTERSERVICE, FILTERSERVICE_NATIVEWARPPER);*/
+ aType.put(PROPNAME_DETECTSERVICE, GENERIC_DETECTSERVICE);
+ }
+
+ // move the preferred filter information to any type
+ // Set the filter name to the type for which the filter is registered.
+ // If this type already have a set PreferredFilter value, check if the current filter
+ // has the preferred flag set. If not ignore it - otherwhise overwrite the
+ // current information at the type. But look for multiple preferred filter relations ...
+ // means: look if more the one filter has set the preferred flag for the same type!
+
+ /* Attention!
+ *
+ * Dont remove the preferred flag from any filter! ... not here.
+ * Otherwhise next loop can't detect ambigous preferred registrations!
+ * Add filter to a temp. list, which can be used later to remove the preferred
+ * flag ...
+ */
+
+ int flags1 = ((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue();
+ java.lang.String sDocSrv = (java.lang.String)aFilter.get(PROPNAME_DOCUMENTSERVICE);
+ if (sDocSrv.length()>0)// without a doc service its not a real filter - its a graphic filter!
+ {
+ boolean preferred1 = ((flags1 & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED);
+ if (preferred1)
+ lPreferredFilters.add(aFilter);
+
+ java.lang.String sAlreadyRegisteredFilter = (java.lang.String)aType.get(PROPNAME_PREFERREDFILTER);
+ // no registration => set this filter as "any possible one"!
+ if (sAlreadyRegisteredFilter.length() < 1)
+ aType.put(PROPNAME_PREFERREDFILTER, sFilter);
+ else
+ {
+ java.util.HashMap aAlreadyRegisteredFilter = (java.util.HashMap)m_lFilters.get(sAlreadyRegisteredFilter);
+ int flags2 = ((java.lang.Integer)aAlreadyRegisteredFilter.get(PROPNAME_FLAGS)).intValue();
+ boolean preferred2 = ((flags2 & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED);
+
+ // two preferred filters for the same type! => error
+ if (preferred1 && preferred2)
+ {
+ java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256);
+ sMsg.append("More the one preferred filter detected for the same type.\n");
+ sMsg.append("\ttype = \""+sTypeReg+"\"\n");
+ sMsg.append("\tfilter[1] = \""+sAlreadyRegisteredFilter+"\"\n");
+ sMsg.append("\tfilter[2] = \""+sFilter+"\"\n");
+ throw new java.lang.Exception(sMsg.toString());
+ }
+ else
+ // overwrite the "any possible" filter with a real preferred one
+ if (preferred1 && !preferred2)
+ aType.put(PROPNAME_PREFERREDFILTER, sFilter);
+ }
+ }
+
+ // create the new combined filter flag if required
+ if (bCreateCombineFilterFlag)
+ {
+ if (
+ ((flags1 & FLAGVAL_IMPORT) == FLAGVAL_IMPORT) &&
+ ((flags1 & FLAGVAL_EXPORT) == FLAGVAL_EXPORT)
+ )
+ {
+ flags1 |= FLAGVAL_COMBINED;
+ flags1 &= ~FLAGVAL_IMPORT ;
+ flags1 &= ~FLAGVAL_EXPORT ;
+ aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags1));
+ }
+ }
+
+ // remove some obsolete filter flags
+ if (bRemoveFilterFlagBrowserPreferred)
+ {
+ flags1 &= ~FLAGVAL_BROWSERPREFERRED;
+ aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags1));
+ }
+
+ if (bRemoveFilterFlag3rdparty)
+ {
+ flags1 &= ~FLAGVAL_3RDPARTYFILTER;
+ aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags1));
+ }
+
+ // if its a filter with an UI order ...
+ // move this information to the registered type.
+ // Note: Because more then one filter can be registered for the same type.
+ // Handle it as an error ... till we find a better transformation!
+ java.lang.Integer nOrder = (java.lang.Integer)aFilter.get(PROPNAME_ORDER);
+ java.lang.Integer nUIOrder = (java.lang.Integer)aType.get(PROPNAME_UIORDER);
+ int order = nOrder.intValue();
+ int uiorder = nUIOrder.intValue();
+
+ if (order > 0)
+ {
+ if (
+ (uiorder < 1 ) ||
+ (uiorder > order)
+ )
+ {
+ aType.put(PROPNAME_UIORDER, nOrder);
+ m_aDebug.setDetailedInfo("moved order value "+nOrder+" from filter \""+sFilter+"\" to type \""+sTypeReg+"\"");
+ }
+ else
+ m_aDebug.setDetailedInfo("ignore order value [order="+nOrder+",uiorder="+nUIOrder+"] for filter \""+sFilter+"\" and type \""+sTypeReg+"\"");
+ }
+ }
+
+ // NOW ... remove the preferred flags from every filter, which it has set.
+ java.util.Enumeration aIt2 = null;
+ if (bRemoveFilterFlagPreferred)
+ {
+ aIt2 = lPreferredFilters.elements();
+ while (aIt2.hasMoreElements())
+ {
+ java.util.HashMap aFilter = (java.util.HashMap)aIt2.nextElement();
+ int flags = ((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue();
+ flags &= ~FLAGVAL_PREFERRED;
+ aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags));
+ }
+ }
+
+ // NOW ... remove all "no real filters" like the graphich helper filters of
+ // draw and impress!
+ aIt2 = lNoRealFilters.elements();
+ while (aIt2.hasMoreElements())
+ m_lFilters.remove(aIt2.nextElement());
+
+ // step over all detect services and move this information directly to
+ // the corresponding types
+ // Overwrite possibel default registrations with a real existing one!
+ aIt1 = m_lDetectServices.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ java.lang.String sDetector = (java.lang.String)aIt1.next();
+ java.util.HashMap aDetector = (java.util.HashMap)m_lDetectServices.get(sDetector);
+ java.util.Vector lTypeReg = (java.util.Vector)aDetector.get(PROPNAME_TYPES);
+ aIt2 = lTypeReg.elements();
+ while(aIt2.hasMoreElements())
+ {
+ java.lang.String sTypeReg = (java.lang.String)aIt2.nextElement();
+ java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg);
+
+ if (aType == null)
+ {
+ m_aDebug.setWarning("Detector \""+sDetector+"\" seem to be registered for unknown type \""+sTypeReg+"\"");
+ continue;
+ }
+
+ java.lang.Object aAlreadyRegisteredDetector = aType.get(PROPNAME_DETECTSERVICE);
+ if (aAlreadyRegisteredDetector != null && ((java.lang.String)aAlreadyRegisteredDetector).length() > 0)
+ {
+ java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256);
+ sMsg.append("type \""+sTypeReg+"\" has ambigous registrations of a detect service\n");
+ sMsg.append("\tdetect service[1] = \""+(java.lang.String)aAlreadyRegisteredDetector+"\"\n");
+ sMsg.append("\tdetect service[2] = \""+sDetector+"\"\n");
+ m_aDebug.setWarning(sMsg.toString());
+ }
+ aType.put(PROPNAME_DETECTSERVICE, sDetector);
+ m_aDebug.setGlobalInfo("move detector \""+sDetector+"\" to type \""+sTypeReg+"\"");
+ }
+ }
+
+ // because all detect service was registered as type properties directly ...
+ // remove all detect service objects of this cache!
+ m_lDetectServices.clear();
+
+ // step over all frame loader and move this information directly to
+ // the corresponding types
+ // Overwrite possibel default registrations with a real existing one!
+ aIt1 = m_lFrameLoaders.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ java.lang.String sLoader = (java.lang.String)aIt1.next();
+ java.util.HashMap aLoader = (java.util.HashMap)m_lFrameLoaders.get(sLoader);
+ java.util.Vector lTypeReg = (java.util.Vector)aLoader.get(PROPNAME_TYPES);
+ aIt2 = lTypeReg.elements();
+ while(aIt2.hasMoreElements())
+ {
+ java.lang.String sTypeReg = (java.lang.String)aIt2.nextElement();
+ java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg);
+ java.lang.String sAlreadyRegisteredLoader = (java.lang.String)aType.get(PROPNAME_FRAMELOADER);
+ if (sAlreadyRegisteredLoader != null && sAlreadyRegisteredLoader.length() > 0)
+ {
+ java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256);
+ sMsg.append("type \""+sTypeReg+"\" has ambigous registrations of a frame loader\n");
+ sMsg.append("\tframe loader[1] = \""+sAlreadyRegisteredLoader+"\"\n");
+ sMsg.append("\tframe loader[2] = \""+sLoader+"\"\n");
+ m_aDebug.setWarning(sMsg.toString());
+ }
+ aType.put(PROPNAME_FRAMELOADER, sLoader);
+ System.out.println("move loader \""+sLoader+"\" to type \""+sTypeReg+"\"");
+ }
+ }
+
+ m_lFrameLoaders.clear();
+
+ // step over all content handler and move this information directly to
+ // the corresponding types
+ // Overwrite possibel default registrations with a real existing one!
+ aIt1 = m_lContentHandlers.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ java.lang.String sHandler = (java.lang.String)aIt1.next();
+ java.util.HashMap aHandler = (java.util.HashMap)m_lContentHandlers.get(sHandler);
+ java.util.Vector lTypeReg = (java.util.Vector)aHandler.get(PROPNAME_TYPES);
+ aIt2 = lTypeReg.elements();
+ while(aIt2.hasMoreElements())
+ {
+ java.lang.String sTypeReg = (java.lang.String)aIt2.nextElement();
+ java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg);
+ java.lang.String sAlreadyRegisteredHandler = (java.lang.String)aType.get(PROPNAME_CONTENTHANDLER);
+ if (sAlreadyRegisteredHandler != null && sAlreadyRegisteredHandler.length() > 0)
+ {
+ java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256);
+ sMsg.append("type \""+sTypeReg+"\" has ambigous registrations of a content handler\n");
+ sMsg.append("\tcontent handler[1] = \""+sAlreadyRegisteredHandler+"\"\n");
+ sMsg.append("\tcontent handler[2] = \""+sHandler+"\"\n");
+ m_aDebug.setWarning(sMsg.toString());
+ }
+ aType.put(PROPNAME_CONTENTHANDLER, sHandler);
+ System.out.println("move handler \""+sHandler+"\" to type \""+sTypeReg+"\"");
+ }
+ }
+
+ m_lContentHandlers.clear();
+
+/*
+ int c = m_lTypes.size();
+ java.lang.String[] lT1 = new java.lang.String[c];
+ java.lang.String[] lT2 = new java.lang.String[c];
+ long nUPS = 0;
+
+ int i = 0;
+ aIt1 = m_lTypes.keySet().iterator();
+ while(aIt1.hasNext())
+ {
+ lT1[i] = (java.lang.String)aIt1.next();
+ lT2[i] = lT1[i];
+ ++i;
+ }
+
+ for (int i1=0; i1<c; ++i1)
+ {
+ java.lang.String sT1 = lT1[i1];
+ java.util.HashMap aT1 = (java.util.HashMap)m_lTypes.get(sT1);
+
+ for (int i2=i1; i2<c; ++i2)
+ {
+ java.lang.String sT2 = lT1[i2];
+ java.util.HashMap aT2 = (java.util.HashMap)m_lTypes.get(sT2);
+
+ if (!sT1.equals(sT2))
+ {
+ if (
+ aT1.get(PROPNAME_MEDIATYPE).equals(aT2.get(PROPNAME_MEDIATYPE)) &&
+ aT1.get(PROPNAME_CLIPBOARDFORMAT).equals(aT2.get(PROPNAME_CLIPBOARDFORMAT)) &&
+ aT1.get(PROPNAME_URLPATTERN).equals(aT2.get(PROPNAME_URLPATTERN)) &&
+ aT1.get(PROPNAME_EXTENSIONS).equals(aT2.get(PROPNAME_EXTENSIONS))
+ )
+ {
+ System.err.println("UUPPSS----------------------------------------------------------------------------");
+ System.err.println("[1]\""+sT1+"\" equals [2]\""+sT2+"\"");
+ System.err.println("\tprops 1: "+aT1);
+ System.err.println("\tprops 2: "+aT2);
+ System.err.println("----------------------------------------------------------------------------------\n");
+ ++nUPS;
+// throw new java.lang.Exception("UUPPS :-)");
+ }
+ }
+ }
+ }
+ System.err.println("count of UPS = "+nUPS);
+*/
+ }
+}
diff --git a/transex3/source/filter/utils/ConfigHelper.java b/transex3/source/filter/utils/ConfigHelper.java
new file mode 100644
index 000000000000..78cc71cf65b2
--- /dev/null
+++ b/transex3/source/filter/utils/ConfigHelper.java
@@ -0,0 +1,303 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: ConfigHelper.java,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ **********************************************************************_*/
+
+package com.sun.star.filter.config.tools.utils;
+
+//_______________________________________________
+// imports
+
+import java.lang.*;
+import java.util.*;
+import java.io.*;
+
+//_______________________________________________
+// definition
+
+/** can be used to analyze command line parameters
+ * and merge it together with might existing config
+ * files. That provides the possibility to overwrite
+ * config values via command line parameter.
+ *
+ *
+ */
+public class ConfigHelper extends java.util.Properties
+{
+ //___________________________________________
+ // member
+
+ /** indicates an empty command line. */
+ private boolean m_bEmpty = true;
+
+ //___________________________________________
+ // ctor
+
+ //-------------------------------------------
+ /** initialize a new helper with the list of
+ * command line parameters and bind this new instance
+ * to a property file on disk.
+ *
+ * @param sPropFile
+ * name of the property file.
+ * If its set to null or an empty value
+ * it will be ignored.
+ *
+ * @param lCommandLineArgs
+ * the list of original command line arguments.
+ *
+ * @throws [Exception]
+ * in case the command line contains an unknown
+ * schema for specifiying parameters or the
+ * specified property file does not exists
+ * or seem to be corrupted.
+ */
+ public ConfigHelper(java.lang.String sPropFile ,
+ java.lang.String[] lCommandLineArgs)
+ throws java.lang.Exception
+ {
+ // first load prop file, so its values can be overwritten
+ // by command line args later
+ // Do it only, if a valid file name was given.
+ // But in case this file name is wrong, throw an exception.
+ // So the outside code can react!
+ if (
+ (sPropFile != null) &&
+ (sPropFile.length() > 0 )
+ )
+ {
+ java.lang.ClassLoader aLoader = getClass().getClassLoader();
+ java.io.InputStream aStream = aLoader.getResourceAsStream(sPropFile);
+ if (aStream == null)
+ aStream = new java.io.FileInputStream(sPropFile);
+ load(aStream);
+ }
+
+ int count = 0;
+ if (lCommandLineArgs != null)
+ count = lCommandLineArgs.length;
+ m_bEmpty = (count < 1);
+
+ for (int arg=0; arg<count; ++arg)
+ {
+ // is it a named-value argument?
+ // Note: We ignores double "=" signs! => search from left to right
+ int len = lCommandLineArgs[arg].length();
+ int pos = lCommandLineArgs[arg].indexOf('=');
+ if (pos != -1)
+ {
+ java.lang.String sArg = lCommandLineArgs[arg].substring(0,pos);
+ java.lang.String sValue = lCommandLineArgs[arg].substring(pos+1);
+ setProperty(sArg, sValue);
+ continue;
+ }
+
+ // is it a boolean argument?
+ // Note: Because "--" and "-" will be interpreted as the same
+ // we search from right to left!
+ pos = lCommandLineArgs[arg].lastIndexOf('-');
+ if (pos == -1)
+ pos = lCommandLineArgs[arg].lastIndexOf('/');
+ if (pos != -1)
+ {
+ java.lang.String sArg = lCommandLineArgs[arg].substring(pos+1);
+ setProperty(sArg, java.lang.String.valueOf(true));
+ continue;
+ }
+
+ // There is an unknown format used by this argument ...
+ throw new MalformedCommandLineException("Invalid command line detected. The argument \""+lCommandLineArgs[arg]+"\" use an unsupported format.");
+ }
+ }
+
+ //-------------------------------------------
+ /** indicates if the given command line includes
+ * a help request.
+ *
+ * @return True if there was an explicit help request.
+ */
+ public synchronized boolean isHelp()
+ {
+ return (
+ (containsKey("help")) ||
+ (containsKey("?") ) ||
+ (containsKey("h") )
+ );
+ }
+
+ //-------------------------------------------
+ /** indicates if the gioven command line was empty.
+ *
+ * @return True if there was an empty command line.
+ */
+ public synchronized boolean isEmpty()
+ {
+ return m_bEmpty;
+ }
+
+ //-------------------------------------------
+ /** returns the value of sProp as boolean value.
+ *
+ * @param sProp
+ * the name of the parameter.
+ *
+ * @return The boolean value of the requested property.
+ *
+ * @throw [NoSuchElementException]
+ * if the requested property does not exists.
+ */
+ public synchronized boolean getBoolean(java.lang.String sProp)
+ throws java.util.NoSuchElementException
+ {
+ java.lang.String sValue = getProperty(sProp);
+ if (sValue == null)
+ throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!");
+ return new java.lang.Boolean(sValue).booleanValue();
+ }
+
+ public synchronized boolean getBoolean(java.lang.String sProp ,
+ boolean bDefault)
+ {
+ java.lang.String sDefault = java.lang.String.valueOf(bDefault);
+ java.lang.String sValue = getProperty(sProp, sDefault);
+ return new java.lang.Boolean(sValue).booleanValue();
+ }
+
+ //-------------------------------------------
+ /** returns the value of sProp as int value.
+ *
+ * @param sProp
+ * the name of the parameter.
+ *
+ * @return The int value of the requested property.
+ *
+ * @throw [NoSuchElementException]
+ * if the requested property does not exists.
+ */
+ public synchronized int getInt(java.lang.String sProp)
+ throws java.util.NoSuchElementException
+ {
+ java.lang.String sValue = getProperty(sProp);
+ if (sValue == null)
+ throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!");
+ return new java.lang.Integer(sValue).intValue();
+ }
+
+ public synchronized int getInt(java.lang.String sProp ,
+ int nDefault)
+ {
+ java.lang.String sDefault = java.lang.String.valueOf(nDefault);
+ java.lang.String sValue = getProperty(sProp, sDefault);
+ return new java.lang.Integer(sValue).intValue();
+ }
+
+ //-------------------------------------------
+ /** returns the value of sProp as string value.
+ *
+ * @param sProp
+ * the name of the parameter.
+ *
+ * @return The string value of the requested property.
+ *
+ * @throw [NoSuchElementException]
+ * if the requested property does not exists.
+ */
+ public synchronized java.lang.String getString(java.lang.String sProp)
+ throws java.util.NoSuchElementException
+ {
+ java.lang.String sValue = getProperty(sProp);
+ if (sValue == null)
+ throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!");
+ return sValue;
+ }
+
+ //-------------------------------------------
+ /** returns the value of sProp as string list value!
+ *
+ * @descr The delimiter must be well known and
+ * it must be clear if trailing/leading
+ * whitespaces must be ignored or not.
+ *
+ * @param sProp
+ * the name of the parameter.
+ *
+ * @param sDelim
+ * the delimiter, which must be used to split
+ * the config string value into an array.
+ *
+ * @param bTrim
+ * if its set to true, trailing and leading whitespace
+ * characters will be ommited.
+ *
+ * @param bDecode
+ * if its set to TRUE all liste items will be
+ * interpreted as "<xxx>" and converted to <xxx>!
+ *
+ * @return The string list value of the requested property.
+ *
+ * @throw [NoSuchElementException]
+ * if the requested property does not exists.
+ */
+ public synchronized java.util.Vector getStringList(java.lang.String sProp ,
+ java.lang.String sDelimiter,
+ boolean bTrim ,
+ boolean bDecode )
+ throws java.util.NoSuchElementException
+ {
+ java.lang.String sValue = getProperty(sProp);
+ if (sValue == null)
+ throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!");
+
+ java.util.Vector lValue = new java.util.Vector();
+ try
+ {
+ java.util.StringTokenizer lTokens = new java.util.StringTokenizer(sValue, sDelimiter);
+ while(lTokens.hasMoreTokens())
+ {
+ java.lang.String sToken = lTokens.nextToken();
+ // remove trailing/leading whitespaces
+ if (bTrim)
+ sToken = sToken.trim();
+ // remove ""
+ if (
+ (bDecode ) &&
+ (sToken.indexOf("\"") == 0 ) &&
+ (sToken.lastIndexOf("\"") == sToken.length()-1)
+ )
+ {
+ sToken = sToken.substring(1, sToken.length()-1);
+ }
+ lValue.add(sToken);
+ }
+ }
+ catch(java.lang.Throwable ex)
+ { lValue.clear(); }
+
+ return lValue;
+ }
+}
diff --git a/transex3/source/filter/utils/FileHelper.java b/transex3/source/filter/utils/FileHelper.java
new file mode 100644
index 000000000000..71f51cf36bf6
--- /dev/null
+++ b/transex3/source/filter/utils/FileHelper.java
@@ -0,0 +1,766 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: FileHelper.java,v $
+ * $Revision: 1.13 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.filter.config.tools.utils;
+
+// __________ Imports __________
+
+import java.io.*;
+import java.lang.*;
+import java.net.*;
+import java.util.*;
+
+// __________ Implementation __________
+
+/**
+ * It collects some static helper functons to handle file system specific problems.
+ * Sometimes it's neccessary to convert URL from/to system pathes;
+ * or from string notation to structural versions (e.g. com.sun.star.util.URL).
+ * And sometimes java had another notation then the office it has.
+ * Further it provides functionality to work easiear with the java.io.File class of java.
+ *
+ *
+ */
+public class FileHelper
+{
+ // ____________________
+
+ /**
+ * Because the office need URLs for loading/saving documents
+ * we must convert used system pathes.
+ * And java use another notation for file URLs ... correct it.
+ *
+ * @param aSystemPath
+ * represent the file in system notation
+ *
+ * @return [String]
+ * a file url which represent the given system path
+ */
+ public static java.lang.String getFileURLFromSystemPath(java.io.File aSystemPath)
+ {
+ System.out.println("TODO: must be adapted to java 1.3 :-(");
+ System.exit(-1);
+/*TODO_JAVA
+ try
+ {
+ sFileURL = aSystemPath.toURI().toURL().toString();
+ }
+ catch( MalformedURLException exWrong )
+ {
+ sFileURL = null;
+ }
+*/
+ java.lang.String sFileURL = null;
+
+ // problem of java: file URL's are coded with 1 slash instead of 2 or 3 ones!
+ // => correct this problem first, otherwise office can't use these URL's
+ if(
+ (sFileURL != null ) &&
+ (sFileURL.startsWith("file:/") == true ) &&
+ (sFileURL.startsWith("file://") == false)
+ )
+ {
+ java.lang.StringBuffer sWorkBuffer = new java.lang.StringBuffer(sFileURL);
+ sWorkBuffer.insert(6,"//");
+ sFileURL = sWorkBuffer.toString();
+ }
+
+ return sFileURL;
+ }
+
+ // ____________________
+
+ /**
+ * The same as getFileURLFromSystemPath() before but uses string parameter instead
+ * of a java.io.File type. It exist to supress converting of neccessary parameters in the
+ * outside code. But of course getFileURLFromSystemPath(File) will be a little bit faster
+ * then this method ...
+ *
+ * @param sSystemPath
+ * represent the file in system notation
+ *
+ * @return [String]
+ * a file url which represent the given system path
+ */
+ public static java.lang.String getFileURLFromSystemPath(java.lang.String sSystemPath)
+ {
+ return getFileURLFromSystemPath(new java.io.File(sSystemPath));
+ }
+
+ // ____________________
+
+ /**
+ * Does the same as getFileURLFromSystemPath() before ... but uses
+ * the given protocol string (e.g."http://") insted of "file:///".
+ *
+ * @param aSystemPath
+ * represent the file in system notation
+ *
+ * @param aBasePath
+ * define the base path of the aSystemPath value,
+ * which must be replaced with the value of "sServerPath".
+ *
+ * @param sServerURL
+ * Will be used to replace sBasePath.
+ *
+ * @example
+ * System Path = "d:\test\file.txt"
+ * Base Path = "d:\test"
+ * Server Path = "http://alaska:8000"
+ * => "http://alaska:8000/file.txt"
+ *
+ * @return [String]
+ * an url which represent the given system path
+ * and uses the given protocol
+ */
+ public static java.lang.String getURLWithProtocolFromSystemPath(java.io.File aSystemPath,
+ java.io.File aBasePath ,
+ java.lang.String sServerURL )
+ {
+ System.out.println("TODO: must be adapted to java 1.3 :-(");
+ System.exit(-1);
+
+ java.lang.String sFileURL = FileHelper.getFileURLFromSystemPath(aSystemPath);
+ java.lang.String sBaseURL = FileHelper.getFileURLFromSystemPath(aBasePath );
+
+ // cut last '/'!
+ if (sBaseURL.lastIndexOf('/')==(sBaseURL.length()-1))
+ sBaseURL = sBaseURL.substring(0,sBaseURL.length()-1);
+
+ // cut last '/'!
+ if (sServerURL.lastIndexOf('/')==(sServerURL.length()-1))
+ sServerURL = sServerURL.substring(0,sServerURL.length()-1);
+
+//TODO_JAVA java.lang.String sURL = sFileURL.replaceFirst(sBaseURL,sServerURL);
+ java.lang.String sURL = null;
+ return sURL;
+ }
+
+ // ____________________
+
+ /**
+ * The same as getURLWithProtocolFromSystemPath() before but uses string parameter instead
+ * of a java.io.File types. It exist to supress converting of neccessary parameters in the
+ * outside code. But of course getURLWithProtocolFromSystemPath(File,File,String) will be
+ * a little bit faster then this method ...
+ *
+ * @param sSystemPath
+ * represent the file in system notation
+ *
+ * @param sBasePath
+ * define the base path of the aSystemPath value,
+ * which must be replaced with the value of "sServerPath".
+ *
+ * @param sServerPath
+ * Will be used to replace sBasePath.
+ *
+ * @example
+ * System Path = "d:\test\file.txt"
+ * Base Path = "d:\test"
+ * Server Path = "http://alaska:8000"
+ * => "http://alaska:8000/file.txt"
+ *
+ * @return [String]
+ * an url which represent the given system path
+ * and uses the given protocol
+ */
+ public static java.lang.String getURLWithProtocolFromSystemPath(java.lang.String sSystemPath,
+ java.lang.String sBasePath ,
+ java.lang.String sServerPath)
+ {
+ return getURLWithProtocolFromSystemPath(new java.io.File(sSystemPath), new java.io.File(sBasePath), sServerPath);
+ }
+
+ //_________________________________
+
+ /**
+ * Return a list of all available files of a directory.
+ * We filter sub directories. All other files
+ * are returned. So they can be used for further purposes.
+ * One parameter define the start directory,
+ * another one enable/disable recursive search into sub directories.
+ *
+ * @param aRoot
+ * the start directory, which should be analyzed.
+ *
+ * @param bRecursive
+ * enable/disable search in sub directories.
+ *
+ * @return [Vector]
+ * a filtered list of java java.io.File objects of all available files
+ * of the start dir (and may of its sub directories).
+ */
+ public static java.util.Vector getSystemFilesFromDir(java.io.File aRoot ,
+ boolean bRecursive)
+ {
+ java.io.File[] lAllFiles = aRoot.listFiles();
+ if (lAllFiles == null)
+ return null;
+
+ int c = lAllFiles.length;
+ java.util.Vector lFilteredFiles = new java.util.Vector(c);
+ for (int i=0; i<c; ++i)
+ {
+ // simple files!
+ if (lAllFiles[i].isFile())
+ lFilteredFiles.add(lAllFiles[i]);
+ else
+ // recursion?
+ if (bRecursive && lAllFiles[i].isDirectory())
+ {
+ java.util.Vector lSubFiles = FileHelper.getSystemFilesFromDir(lAllFiles[i],bRecursive);
+ if (lSubFiles != null)
+ {
+ java.util.Enumeration aSnapshot = lSubFiles.elements();
+ while (aSnapshot.hasMoreElements())
+ lFilteredFiles.add(aSnapshot.nextElement());
+ }
+ }
+ }
+
+ return lFilteredFiles;
+ }
+
+ //_________________________________
+ /** it converts the given name (e.g. an internal type name) to
+ * an usable system file name.
+ *
+ * Do so some special characters (e.g. "/") must be replaced with other ones.
+ *
+ * @param sName
+ * the name, which should be analyzed and converted.
+ *
+ * @return A valid system file name, which should be similar to the
+ * given name, but does not contain special characters any longer.
+ */
+ public static java.lang.String convertName2FileName(String sName)
+ {
+ int i = 0;
+ int nLength = sName.length();
+ char[] lBuffer = sName.toCharArray();
+
+ java.lang.StringBuffer sNewName = new java.lang.StringBuffer(nLength);
+ for (i=0; i<nLength; ++i)
+ {
+ char c = lBuffer[i];
+ if (
+ c>=48 && c<=57 // 0-9
+ &&
+ c>=97 && c<=122 // a-z
+ &&
+ c>=65 && c<=90 // A-Z
+ )
+ {
+ sNewName.append(c);
+ }
+ else
+ {
+ sNewName.append("_");
+ }
+ }
+
+ return sNewName.toString();
+ }
+
+ //___________________________________________
+
+ /** it removes all child nodes of a file system directory.
+ *
+ * @param aDirectory
+ * points to the directory, which should be made empty.
+ *
+ * @param bFilesOnly
+ * force deletion of files only. If its set to TRUE,
+ * no subdirectory will be removed.
+ *
+ * @throw [java.io.IOException]
+ * if some of the child nodes couldn't be removed.
+ */
+ public static void makeDirectoryEmpty(java.io.File aDirectory,
+ boolean bFilesOnly)
+ throws java.io.IOException
+ {
+ if (!aDirectory.isDirectory())
+ throw new java.io.FileNotFoundException("\""+aDirectory.toString()+"\" is not a directory.");
+
+ java.io.File[] lChilds = aDirectory.listFiles();
+ for (int f=0; f<lChilds.length; ++f)
+ {
+ if (lChilds[f].isDirectory())
+ {
+ FileHelper.makeDirectoryEmpty(lChilds[f], bFilesOnly);
+ if (!bFilesOnly)
+ {
+ if (!lChilds[f].delete())
+ throw new java.io.IOException("\""+lChilds[f].toString()+"\" could not be deleted.");
+ }
+ }
+ else
+ {
+ if (!lChilds[f].delete())
+ throw new java.io.IOException("\""+lChilds[f].toString()+"\" could not be deleted.");
+ }
+ }
+ }
+
+ //___________________________________________
+
+ /** it try to generate a new file with a unique ID
+ * inside given directory.
+ *
+ * Call this method with a directory and a base name for
+ * a file. It will be used to generate a new files inside
+ * the directory. Existing files will be checked and new file
+ * name will be tested till a non existing file name would be found.
+ *
+ * @param aBaseDir
+ * must be a system path
+ * e.g.: "c:\temp"
+ *
+ * @param sBaseName
+ * must be a system file name without extensions.
+ * e.g.: "myfile_"
+ *
+ * @param sExtension
+ * the whished extension.
+ * e.g.: "dat"
+ *
+ * @return A valid file object, if an unique file could be created -
+ * Null otherwhise.
+ * e.g.: "c:\temp\myfile_1.dat"
+ */
+ public static java.io.File createUniqueFile(java.io.File aBaseDir ,
+ java.lang.String sBaseName ,
+ java.lang.String sExtension)
+ {
+ java.io.File aBaseFile = new java.io.File(aBaseDir, sBaseName);
+ java.io.File aFile = null;
+ long nr = 0;
+ while (aFile == null && nr < java.lang.Long.MAX_VALUE)
+ {
+ java.lang.String sFileName = aBaseFile.getPath() + java.lang.String.valueOf(nr) + "." + sExtension;
+ aFile = new java.io.File(sFileName);
+ if (aFile.exists())
+ aFile=null;
+ ++nr;
+ }
+ return aFile;
+ }
+
+ //___________________________________________
+
+ /** reads the complete file, using the right encoding,
+ * into the given string buffer.
+ *
+ * @param aFile
+ * must point to a system file, which must exist.
+ * e.g.: "c:\temp\test.txt"
+ * "/tmp/test.txt"
+ *
+ * @param sEncoding
+ * will be used to encode the string content
+ * inside the file.
+ * e.g.: "UTF8"
+ *
+ * @param sBuffer
+ * used to return the file content.
+ *
+ * @throw [IOException]
+ * - if the file couldnt be opened
+ * - if the file does not use the right encoding
+ */
+ public static void readEncodedBufferFromFile(java.io.File aFile ,
+ java.lang.String sEncoding,
+ java.lang.StringBuffer sBuffer )
+ throws java.io.IOException
+ {
+ if (sEncoding.equals("UTF-8Special"))
+ {
+ FileHelper.readAndCheckUTF8File(aFile,sBuffer);
+ return;
+ }
+
+ java.io.FileInputStream aByteStream = new java.io.FileInputStream(aFile.getAbsolutePath());
+ java.io.InputStreamReader aEncodedReader = new java.io.InputStreamReader(aByteStream, sEncoding);
+ char[] aEncodedBuffer = new char[4096];
+ int nReadCount = 0;
+
+ while((nReadCount=aEncodedReader.read(aEncodedBuffer))>0)
+ sBuffer.append(aEncodedBuffer, 0, nReadCount);
+
+ aEncodedReader.close();
+ }
+
+ //___________________________________________
+ private static void logEncodingData(java.lang.StringBuffer sLog ,
+ int nUTF8 ,
+ int nByteOrg1 ,
+ int nByteOrg2 ,
+ int nByteOrg3 ,
+ int nByteOrg4 ,
+ int nByte1 ,
+ int nByte2 ,
+ int nByte3 ,
+ int nByte4 ,
+ int nEncodingType)
+ {
+ sLog.append("["+nEncodingType+"]\t");
+ sLog.append((int)nUTF8+"\t=");
+ sLog.append("\t"+nByteOrg1+"/"+nByte1);
+ sLog.append("\t"+nByteOrg2+"/"+nByte2);
+ sLog.append("\t"+nByteOrg3+"/"+nByte3);
+ sLog.append("\t"+nByteOrg4+"/"+nByte4);
+ sLog.append("\n");
+ }
+
+ //___________________________________________
+ private static char impl_convertBytesToChar(int nByte1, int nByte2, int nByte3, int nByte4)
+ {
+ return (char)((nByte1*0x40000)+(nByte2*0x1000)+(nByte3*0x40)+nByte4);
+ }
+
+ //___________________________________________
+ private static int impl_readAndCheckNextByte(byte[] aBuffer ,
+ int nBufPos ,
+ int nBufLength ,
+ int nMinRange ,
+ int nMaxRange )
+ throws java.lang.Exception
+ {
+ if (nBufPos>=nBufLength)
+ throw new java.lang.Exception("impl_readAndCheckNextByte()\nEnd of buffer reached.");
+
+ int nByte = aBuffer[nBufPos] & 0xFF;
+ if (
+ (nByte < nMinRange) ||
+ (nByte > nMaxRange)
+ )
+ {
+ throw new java.lang.Exception("impl_readAndCheckNextByte()\nByte does not fit the specified range.");
+ }
+
+ return nByte;
+ }
+
+ //___________________________________________
+ public static void readAndCheckUTF8File(java.io.File aFile ,
+ java.lang.StringBuffer sBuffer)
+ throws java.io.IOException
+ {
+ java.io.FileInputStream aByteStream = new java.io.FileInputStream(aFile.getAbsolutePath());
+ byte[] aBuffer = new byte[4096];
+ int nReadCount = 0;
+ int nByteOrg_1 = 0;
+ int nByteOrg_2 = 0;
+ int nByteOrg_3 = 0;
+ int nByteOrg_4 = 0;
+ int nByte_1 = 0;
+ int nByte_2 = 0;
+ int nByte_3 = 0;
+ int nByte_4 = 0;
+ char nUTF8 = 0;
+ int i = 0;
+ int nEncodingType = 0;
+ java.lang.StringBuffer sLog = new java.lang.StringBuffer();
+
+ try
+ {
+
+ while((nReadCount=aByteStream.read(aBuffer))>0)
+ {
+ i=0;
+ while (i<nReadCount)
+ {
+ nByteOrg_1 = 0;
+ nByteOrg_2 = 0;
+ nByteOrg_3 = 0;
+ nByteOrg_4 = 0;
+ nByte_1 = 0;
+ nByte_2 = 0;
+ nByte_3 = 0;
+ nByte_4 = 0;
+ nUTF8 = 0;
+ nEncodingType = 0;
+
+ nByteOrg_1 = aBuffer[i++] & 0xFF;
+ nByte_1 = nByteOrg_1;
+ /*
+ Table 3-6. Well-Formed UTF-8 Byte Sequences
+
+ ============================================================================
+ Nr. Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
+ ============================================================================
+ 01 U+ 0..U+ 7F 00..7F
+ 02 U+ 80..U+ 7FF C2..DF 80..BF
+ 03 U+ 800..U+ FFF E0 A0..BF 80..BF
+ 04 U+ 1000..U+ CFFF E1..EC 80..BF 80..BF
+ 05 U+ D000..U+ D7FF ED 80..9F 80..BF
+ 06 U+ E000..U+ FFFF EE..EF 80..BF 80..BF
+ 07 U+ 10000..U+ 3FFFF F0 90..BF 80..BF 80..BF
+ 08 U+ 40000..U+ FFFFF F1..F3 80..BF 80..BF 80..BF
+ 09 U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
+ */
+ // ------------------------------------------------------------
+ // 01
+ // 1 byte: 0xxxxxxx
+ // ------------------------------------------------------------
+ if (
+ (nByteOrg_1 >= 0x00) &&
+ (nByteOrg_1 <= 0x7F)
+ )
+ {
+ nEncodingType = 1;
+ nUTF8 = (char)nByte_1;
+ }
+ // ------------------------------------------------------------
+ // 02
+ // 1 byte: 110xxxxx
+ // 2 byte: 101xxxxx
+ // ------------------------------------------------------------
+ else
+ if (
+ (nByteOrg_1 >= 0xC2) &&
+ (nByteOrg_1 <= 0xDF)
+ )
+ {
+ nEncodingType = 2;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_1 = nByteOrg_1-0xC2;
+ nByte_2 = nByteOrg_2-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0,0,nByte_1, nByte_2);
+ }
+ // ------------------------------------------------------------
+ // 03
+ // 1 byte: 11100000
+ // 2 byte: 101xxxxx
+ // 3 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (nByteOrg_1 == 0xE0)
+ {
+ nEncodingType = 3;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0xA0, 0xBF);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_2 = nByteOrg_2-0xA0;
+ nByte_3 = nByteOrg_3-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0,0,nByte_2, nByte_3);
+ }
+ // ------------------------------------------------------------
+ // 04
+ // 1 byte: 111xxxxx
+ // 2 byte: 10xxxxxx
+ // 3 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (
+ (nByteOrg_1 >= 0xE1) &&
+ (nByteOrg_1 <= 0xEC)
+ )
+ {
+ nEncodingType = 4;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_1 = nByteOrg_1-0xE1;
+ nByte_2 = nByteOrg_2-0x80;
+ nByte_3 = nByteOrg_3-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0,nByte_1, nByte_2, nByte_3);
+ }
+ // ------------------------------------------------------------
+ // 05
+ // 1 byte: 11101101
+ // 2 byte: 10xxxxxx
+ // 3 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (nByteOrg_1 == 0xED)
+ {
+ nEncodingType = 5;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0x9F);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_2 = nByteOrg_2-0x80;
+ nByte_3 = nByteOrg_3-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0,0, nByte_2, nByte_3);
+ }
+ // ------------------------------------------------------------
+ // 06
+ // 1 byte: 1110111x
+ // 2 byte: 10xxxxxx
+ // 3 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (
+ (nByteOrg_1 >= 0xEE) &&
+ (nByteOrg_1 <= 0xEF)
+ )
+ {
+ nEncodingType = 6;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_1 = nByteOrg_1-0xEE;
+ nByte_2 = nByteOrg_2-0x80;
+ nByte_3 = nByteOrg_3-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0,nByte_1, nByte_2, nByte_3);
+ }
+ // ------------------------------------------------------------
+ // 07
+ // 1 byte: 11110000
+ // 2 byte: 1001xxxx
+ // 3 byte: 10xxxxxx
+ // 4 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (nByteOrg_1 == 0xF0)
+ {
+ nEncodingType = 7;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x90, 0xBF);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_4 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_2 = nByteOrg_2-0x90;
+ nByte_3 = nByteOrg_3-0x80;
+ nByte_4 = nByteOrg_4-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0, nByte_2, nByte_3, nByte_4);
+ }
+ // ------------------------------------------------------------
+ // 08
+ // 1 byte: 111100xx
+ // 2 byte: 10xxxxxx
+ // 3 byte: 10xxxxxx
+ // 3 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (
+ (nByteOrg_1 >= 0xF1) &&
+ (nByteOrg_1 <= 0xF3)
+ )
+ {
+ nEncodingType = 8;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_4 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_1 = nByteOrg_1-0xF1;
+ nByte_2 = nByteOrg_2-0x80;
+ nByte_3 = nByteOrg_3-0x80;
+ nByte_4 = nByteOrg_4-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(nByte_1, nByte_2, nByte_3, nByte_4);
+ }
+ // ------------------------------------------------------------
+ // 09
+ // 1 byte: 11110100
+ // 2 byte: 10xxxxxx
+ // 3 byte: 10xxxxxx
+ // 4 byte: 10xxxxxx
+ // ------------------------------------------------------------
+ else
+ if (nByteOrg_1 == 0xF0)
+ {
+ nEncodingType = 9;
+ nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByteOrg_4 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF);
+ nByte_2 = nByteOrg_2-0x80;
+ nByte_3 = nByteOrg_3-0x80;
+ nByte_4 = nByteOrg_4-0x80;
+ nUTF8 = FileHelper.impl_convertBytesToChar(0, nByte_2, nByte_3, nByte_4);
+ }
+ // wrong encoding ?
+ else
+ {
+ throw new java.lang.Exception("Non well formed UTF-8 encoding.");
+ }
+
+ sBuffer.append(nUTF8);
+ // -> DEBUG !
+ FileHelper.logEncodingData(sLog, nUTF8, nByteOrg_1, nByteOrg_2, nByteOrg_3, nByteOrg_4, nByte_1, nByte_2, nByte_3, nByte_4, nEncodingType);
+ // <- DEBUG !
+ }
+ }
+
+ }
+ catch(java.lang.Throwable ex)
+ {
+ // -> DEBUG !
+ FileHelper.logEncodingData(sLog, nUTF8, nByteOrg_1, nByteOrg_2, nByteOrg_3, nByteOrg_4, nByte_1, nByte_2, nByte_3, nByte_4, nEncodingType);
+
+ java.io.File aDir = new java.io.File(aFile.getParent());
+ java.lang.String sDump = aFile.getName();
+ java.io.File aDump = FileHelper.createUniqueFile(aDir, sDump, "dump");
+ FileHelper.writeEncodedBufferToFile(aDump, "UTF-8", false, sLog);
+ // <- DEBUG !
+
+ java.lang.String sMsg = "File '"+aFile.getPath()+"' is not encoded right as UTF-8.";
+ throw new java.io.IOException(sMsg);
+ }
+
+ aByteStream.close();
+ }
+
+ //___________________________________________
+
+ /** writes the given string buffer into the specified file
+ * using the specified encoding.
+ *
+ * Further it can be set, if the file should be expanded
+ * or replaced by this new string buffer.
+ *
+ * @param aFile
+ * must point to a system file. It can already exist!
+ * e.g.: "c:\temp\test.txt"
+ * "/tmp/test.txt"
+ *
+ * @param sEncoding
+ * will be used to encode the string content inside the file.
+ * e.g.: "UTF8"
+ *
+ * @param bAppend
+ * specify if an already existing file will be
+ * expanded or replaced.
+ *
+ * @param sBuffer
+ * the new string content for this file.
+ */
+ public static void writeEncodedBufferToFile(java.io.File aFile ,
+ java.lang.String sEncoding,
+ boolean bAppend ,
+ java.lang.StringBuffer sBuffer )
+ throws java.io.IOException
+ {
+ java.io.FileOutputStream aByteStream = new java.io.FileOutputStream(aFile.getAbsolutePath(), bAppend);
+ java.io.OutputStreamWriter aEncodedWriter = new java.io.OutputStreamWriter(aByteStream, sEncoding);
+
+ java.lang.String sTemp = sBuffer.toString();
+ aEncodedWriter.write(sTemp, 0, sTemp.length());
+
+ aEncodedWriter.flush();
+ aEncodedWriter.close();
+
+ if (!aFile.exists())
+ throw new java.io.IOException("File \""+aFile.getAbsolutePath()+"\" not written correctly.");
+ }
+}
diff --git a/transex3/source/filter/utils/Logger.java b/transex3/source/filter/utils/Logger.java
new file mode 100644
index 000000000000..7657eba5f426
--- /dev/null
+++ b/transex3/source/filter/utils/Logger.java
@@ -0,0 +1,177 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: Logger.java,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.filter.config.tools.utils;
+
+//_______________________________________________
+// imports
+
+import java.lang.*;
+import java.util.*;
+
+//_______________________________________________
+// definition
+
+/** can be used to print out some debug messages
+ * and group it into warnings/errors or info statements.
+ *
+ *
+ */
+public class Logger
+{
+ //___________________________________________
+ // const
+
+ /** only error message will be shown. */
+ public static final int LEVEL_ERRORS = 1;
+
+ /** only errors and warnings will be shown. */
+ public static final int LEVEL_WARNINGS = 2;
+
+ /** enable errors/warnings and some global info
+ * message. */
+ public static final int LEVEL_GLOBALINFOS = 3;
+
+ /** enable anything! */
+ public static final int LEVEL_DETAILEDINFOS = 4;
+
+ //___________________________________________
+ // member
+
+ /** enable/disable different output level.
+ * e.g. warnings/errors/infos */
+ private int m_nLevel;
+
+ //___________________________________________
+ // ctor
+
+ /** initialize new debug object with the specified
+ * debug level.
+ *
+ * @param nLevel
+ * the new debug level.
+ * See const values LEVEL_xxx too.
+ */
+ public Logger(int nLevel)
+ {
+ m_nLevel = nLevel;
+ }
+
+ //___________________________________________
+ // interface
+
+ /** initialize new debug object with a default
+ * debug level.
+ */
+ public Logger()
+ {
+ m_nLevel = LEVEL_DETAILEDINFOS;
+ }
+
+ //___________________________________________
+ // interface
+
+ /** prints out an exception ... if the right level is set.
+ *
+ * @param ex
+ * the exception object
+ */
+ public synchronized void setException(java.lang.Throwable ex)
+ {
+ if (m_nLevel >= LEVEL_ERRORS)
+ {
+ System.err.println("Exception:\n");
+ ex.printStackTrace();
+ }
+ }
+
+ //___________________________________________
+ // interface
+
+ /** prints out an error ... if the right level is set.
+ *
+ * @param sError
+ * the error message.
+ */
+ public synchronized void setError(java.lang.String sError)
+ {
+ if (m_nLevel >= LEVEL_ERRORS)
+ System.err.println("Error :\t\""+sError+"\"");
+ }
+
+ //___________________________________________
+ // interface
+
+ /** prints out a warning ... if the right level is set.
+ *
+ * @param sWarning
+ * the warning message.
+ */
+ public synchronized void setWarning(java.lang.String sWarning)
+ {
+ if (m_nLevel >= LEVEL_WARNINGS)
+ System.err.println("Warning :\t\""+sWarning+"\"");
+ }
+
+ //___________________________________________
+ // interface
+
+ /** prints out a global info message ... if the right level is set.
+ *
+ * Global infos should be used to describe a complex operation.
+ * E.g.: loading of a document.
+ * But not for every sub operation like e.g. analyzing lines
+ * during loading the document!
+ *
+ * @param sInfo
+ * the info message.
+ */
+ public synchronized void setGlobalInfo(java.lang.String sInfo)
+ {
+ if (m_nLevel >= LEVEL_GLOBALINFOS)
+ System.out.println("Info :\t\""+sInfo+"\"");
+ }
+
+ //___________________________________________
+ // interface
+
+ /** prints out a mode detailed info message ... if the right level is set.
+ *
+ * Such detailed message are e.g. "analyze line [n] of file ...".
+ *
+ * @param sInfo
+ * the info message.
+ */
+ public synchronized void setDetailedInfo(java.lang.String sInfo)
+ {
+ if (m_nLevel >= LEVEL_DETAILEDINFOS)
+ System.out.println("Detail :\t\""+sInfo+"\"");
+ }
+}
diff --git a/svtools/source/misc1/loginerr.cxx b/transex3/source/filter/utils/MalformedCommandLineException.java
index b9802a8be535..e073dcb9adcc 100644
--- a/svtools/source/misc1/loginerr.cxx
+++ b/transex3/source/filter/utils/MalformedCommandLineException.java
@@ -1,4 +1,4 @@
-/*************************************************************************
+/*_***********************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -6,8 +6,8 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: loginerr.cxx,v $
- * $Revision: 1.6 $
+ * $RCSfile: MalformedCommandLineException.java,v $
+ * $Revision: 1.4 $
*
* This file is part of OpenOffice.org.
*
@@ -26,20 +26,25 @@
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
- ************************************************************************/
+ **********************************************************************_*/
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svtools.hxx"
-#ifndef GCC
-#endif
+package com.sun.star.filter.config.tools.utils;
-#include <svtools/loginerr.hxx>
+//_______________________________________________
+// imports
-//============================================================================
-//
-// CntLoginErrorHint Implementation.
-//
-//============================================================================
+import java.lang.*;
-TYPEINIT1( CntLoginErrorHint, SfxHint );
+//___________________________________________
+// types
+/** indicates a malformed command line.
+ *
+ * E.g. it must be thrown if the command line contains one item more then once,
+ * or use unsupported format.
+ */
+public class MalformedCommandLineException extends java.lang.Exception
+{
+ public MalformedCommandLineException() {}
+ public MalformedCommandLineException(java.lang.String sMsg) { super(sMsg); }
+}
diff --git a/transex3/source/filter/utils/XMLHelper.java b/transex3/source/filter/utils/XMLHelper.java
new file mode 100644
index 000000000000..0f912cac8e25
--- /dev/null
+++ b/transex3/source/filter/utils/XMLHelper.java
@@ -0,0 +1,825 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: XMLHelper.java,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.filter.config.tools.utils;
+
+//_______________________________________________
+
+import java.lang.*;
+import java.util.*;
+import java.io.*;
+
+//_______________________________________________
+
+/**
+ * It provides some constant values and some static helper routines
+ * which are neccessary to work with a xml file - especialy
+ * the filter configuration.
+ *
+ *
+ */
+public class XMLHelper
+{
+ //___________________________________________
+ // public const
+
+ /** its a possible value of the xml attribute "oor:type" and identify an integer type. */
+ public static final java.lang.String XMLTYPE_INTEGER = "xs:int";
+
+ /** its a possible value of the xml attribute "oor:type" and identify an boolean type. */
+ public static final java.lang.String XMLTYPE_BOOLEAN = "xs:boolean";
+
+ /** its a possible value of the xml attribute "oor:type" and identify an string type. */
+ public static final java.lang.String XMLTYPE_STRING = "xs:string";
+
+ /** its a possible value of the xml attribute "oor:type" and identify an string list type. */
+ public static final java.lang.String XMLTYPE_STRINGLIST = "oor:string-list";
+
+ /** its a xml attribute, which specify a property name. */
+ public static final java.lang.String XMLATTRIB_OOR_NAME = "oor:name";
+
+ /** its a xml attribute, which specify a property type. */
+ public static final java.lang.String XMLATTRIB_OOR_TYPE = "oor:type";
+
+ /** its a xml attribute, which specify a list separator. */
+ public static final java.lang.String XMLATTRIB_OOR_SEPARATOR = "oor:separator";
+
+ /** its a xml attribute, which specify a localized value. */
+ public static final java.lang.String XMLATTRIB_OOR_LOCALIZED = "oor:localized";
+
+ /** its a xml attribute, which specify a merge operation for cfg layering. */
+ public static final java.lang.String XMLATTRIB_OOR_OP = "oor:op";
+
+ /** can be used as value for XMLATTRIB_OOR_OP. */
+ public static final java.lang.String XMLATTRIB_OP_REPLACE = "replace";
+
+ /** its a xml attribute, which specify a locale value. */
+ public static final java.lang.String XMLATTRIB_XML_LANG = "xml:lang";
+
+ /** its the tag name of a <value ...> entry. */
+ public static final java.lang.String XMLTAG_VALUE = "value";
+
+ /** its the tag name of a <prop ...> entry. */
+ public static final java.lang.String XMLTAG_PROP = "prop";
+
+ /** its the tag name of a <node ...> entry. */
+ public static final java.lang.String XMLTAG_NODE = "node";
+
+ //___________________________________________
+ // private const
+
+ /** a static list of all possible separators, which can be used for configuration type string-list. */
+ private static final java.lang.String[] DELIMS = {" ", ",", ";", ".", ":", "-", "_", "#", "'", "+", "*", "~", "=", "?"};
+
+ /** index of the default separator inside list DELIMS.
+ * Its neccessary to know such default separator; because it can
+ * be supressed as xml attribute of the corresponding value tag. */
+ private static final int DEFAULT_SEPARATOR = 0;
+
+ //___________________________________________
+
+ /** analyze the structures of the given XML node and
+ * return a property set of all found sub nodes.
+ *
+ * Such properties are organized as [name, value] pairs.
+ * The type of a xml node will be detected automaticly.
+ * Following types are supported:
+ * xs:int => java.lang.Integer
+ * xs:bool => java.lang.Boolean
+ * xs:string => java.lang.String
+ * oor:string-list => java.util.LinkedList[java.lang.String]
+ * oor:set => java.util.Vector[java.lang.Object]
+ * oor:localized => java.util.HashMap[java.lang.Object]
+ *
+ * @param aNode
+ * points directly to the xml node, where we should analyze
+ * the children nodes.
+ *
+ * @return [java.util.HashMap]
+ * contains every node name as key and its string(!) as value.
+ */
+ public static java.util.HashMap convertNodeToPropSet(org.w3c.dom.Node aNode)
+ throws java.lang.Exception
+ {
+ java.util.HashMap aPropSet = new java.util.HashMap();
+
+ // get all child nodes, which seems to be properties
+ java.util.Vector lChildNodes = XMLHelper.extractChildNodesByTagName(aNode, XMLTAG_PROP);
+ java.util.Enumeration en1 = lChildNodes.elements();
+ while(en1.hasMoreElements())
+ {
+ org.w3c.dom.Node aChildNode = (org.w3c.dom.Node)en1.nextElement();
+
+ // read its name
+ java.lang.String sChildName = XMLHelper.extractNodeAttribByName(aChildNode, XMLATTRIB_OOR_NAME);
+ if (sChildName == null)
+ throw new java.io.IOException("unsupported format: could not extract child node name");
+
+ // read its type info
+ java.lang.String sChildType = XMLHelper.extractNodeAttribByName(aChildNode, XMLATTRIB_OOR_TYPE);
+ if (sChildType == null)
+ {
+ /** Special patch:
+ * If an xml tag has no type information set ... we can restore it
+ * by analyzing the already readed tag name :-)
+ * Not very nice - but it can help to read stripped xml files too. */
+ sChildType = XMLHelper.getTypeForTag(sChildName);
+ if (sChildType == null)
+ throw new java.io.IOException("unsupported format: could not extract child node type");
+ }
+
+ // read its value(s?)
+ java.util.Vector lChildValues = XMLHelper.extractChildNodesByTagName(aChildNode, XMLTAG_VALUE);
+ java.util.Enumeration en2 = lChildValues.elements();
+ int nValue = 0;
+ java.lang.Object aValue = null;
+ while(en2.hasMoreElements())
+ {
+ org.w3c.dom.Node aValueNode = (org.w3c.dom.Node)en2.nextElement();
+ java.lang.String sChildLocale = XMLHelper.extractNodeAttribByName(aValueNode, XMLATTRIB_XML_LANG);
+ boolean bLocalized = (sChildLocale != null);
+
+ ++nValue;
+
+ if (sChildType.equals(XMLTYPE_INTEGER))
+ {
+ if (!bLocalized && nValue > 1)
+ throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected");
+ java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData();
+ aValue = new java.lang.Integer(sData);
+ }
+ else
+ if (sChildType.equals(XMLTYPE_BOOLEAN))
+ {
+ if (!bLocalized && nValue > 1)
+ throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected");
+ java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData();
+ aValue = new java.lang.Boolean(sData);
+ }
+ else
+ if (sChildType.equals(XMLTYPE_STRING))
+ {
+ if (!bLocalized && nValue > 1)
+ throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected");
+
+ java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData();
+
+ java.util.HashMap lLocalized = null;
+ if (bLocalized)
+ {
+ if (aValue == null)
+ aValue = new java.util.HashMap();
+ lLocalized = (java.util.HashMap)aValue;
+ lLocalized.put(sChildLocale, sData);
+ }
+ else
+ aValue = sData;
+ }
+ else
+ if (sChildType.equals(XMLTYPE_STRINGLIST))
+ {
+ if (!bLocalized && nValue > 1)
+ throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected");
+
+ java.lang.String sSeparator = XMLHelper.extractNodeAttribByName(aChildNode, XMLATTRIB_OOR_SEPARATOR);
+ if (sSeparator == null)
+ sSeparator = " ";
+
+ java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData();
+ sData = sData.replace('\t', ' ');
+ sData = sData.replace('\n', ' ');
+ java.util.StringTokenizer aTokenizer = new java.util.StringTokenizer(sData, sSeparator);
+ java.util.Vector lList = new java.util.Vector();
+ while(aTokenizer.hasMoreTokens())
+ {
+ java.lang.String sToken = (java.lang.String)aTokenizer.nextToken();
+ sToken.trim();
+ if (sToken.length() < 1)
+ continue;
+ lList.add(sToken);
+ }
+ aValue = lList;
+ }
+
+ aPropSet.put(sChildName, aValue);
+ }
+ }
+
+ return aPropSet;
+ }
+
+ //___________________________________________
+
+ private static java.lang.String getTypeForTag(java.lang.String sTag)
+ {
+ java.lang.String sType = null;
+
+ if (
+ (sTag.equals(Cache.PROPNAME_DATA )) ||
+ (sTag.equals(Cache.PROPNAME_NAME )) ||
+ (sTag.equals(Cache.PROPNAME_UINAME )) ||
+ (sTag.equals(Cache.PROPNAME_MEDIATYPE )) ||
+ (sTag.equals(Cache.PROPNAME_CLIPBOARDFORMAT )) ||
+ (sTag.equals(Cache.PROPNAME_PREFERREDFILTER )) ||
+ (sTag.equals(Cache.PROPNAME_DETECTSERVICE )) ||
+ (sTag.equals(Cache.PROPNAME_FRAMELOADER )) ||
+ (sTag.equals(Cache.PROPNAME_CONTENTHANDLER )) ||
+ (sTag.equals(Cache.PROPNAME_DOCUMENTSERVICE )) ||
+ (sTag.equals(Cache.PROPNAME_FILTERSERVICE )) ||
+ (sTag.equals(Cache.PROPNAME_TEMPLATENAME )) ||
+ (sTag.equals(Cache.PROPNAME_TYPE )) ||
+ (sTag.equals(Cache.PROPNAME_UICOMPONENT ))
+ )
+ sType = XMLTYPE_STRING;
+ else
+ if (
+ (sTag.equals(Cache.PROPNAME_PREFERRED )) ||
+ (sTag.equals("Installed" ))
+ )
+ sType = XMLTYPE_BOOLEAN;
+ else
+ if (
+ (sTag.equals(Cache.PROPNAME_UIORDER )) ||
+ (sTag.equals(Cache.PROPNAME_DOCUMENTICONID )) ||
+ (sTag.equals(Cache.PROPNAME_FILEFORMATVERSION))
+ )
+ sType = XMLTYPE_INTEGER;
+ else
+ if (
+ (sTag.equals(Cache.PROPNAME_URLPATTERN )) ||
+ (sTag.equals(Cache.PROPNAME_EXTENSIONS )) ||
+ (sTag.equals(Cache.PROPNAME_USERDATA )) ||
+ (sTag.equals(Cache.PROPNAME_FLAGS )) ||
+ (sTag.equals(Cache.PROPNAME_TYPES ))
+ )
+ sType = XMLTYPE_STRINGLIST;
+
+ if (sType == null)
+ System.err.println("getTypeForTag("+sTag+") = "+sType);
+
+ return sType;
+ }
+
+ //___________________________________________
+
+ /** return a xml representation of the given property set.
+ *
+ * @param aPropSet
+ * a set of <name,value> pairs, which should be translated to xml
+ *
+ * @return [java.lang.String]
+ * the xml string representation.
+ *
+ * @throws [java.lang.Exception]
+ * if anything during convertion fill fail.
+ */
+ public static java.lang.String convertPropSetToXML(java.util.HashMap aPropSet ,
+ int nPrettyTabs)
+ throws java.lang.Exception
+ {
+ java.lang.StringBuffer sXML = new java.lang.StringBuffer(256);
+
+ java.util.Iterator it1 = aPropSet.keySet().iterator();
+ while(it1.hasNext())
+ {
+ java.lang.String sProp = (java.lang.String)it1.next();
+ java.lang.Object aVal = aPropSet.get(sProp);
+
+ sProp = encodeHTMLSigns(sProp);
+
+ // is it a simple type?
+ if (
+ (aVal instanceof java.lang.Integer) ||
+ (aVal instanceof java.lang.Boolean) ||
+ (aVal instanceof java.lang.String )
+ )
+ {
+ sXML.append(XMLHelper.convertSimpleObjectToXML(sProp, aVal, nPrettyTabs));
+ continue;
+ }
+
+ // no!
+ // is it a list value?
+ if (aVal instanceof java.util.Vector)
+ {
+ java.util.Vector lVal = (java.util.Vector)aVal;
+ sXML.append(XMLHelper.convertListToXML(sProp, lVal, nPrettyTabs));
+ continue;
+ }
+
+ // its a localized value?
+ if (aVal instanceof java.util.HashMap)
+ {
+ java.util.HashMap lVal = (java.util.HashMap)aVal;
+ sXML.append(XMLHelper.convertLocalizedValueToXML(sProp, lVal, nPrettyTabs));
+ continue;
+ }
+
+ // unknown type!
+ java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256);
+ sMsg.append("unsupported object type detected.");
+ sMsg.append("\ttype ? : \""+sProp+"\" = "+aVal);
+ sMsg.append("\tprop set: \""+aPropSet );
+ throw new java.lang.Exception(sMsg.toString());
+ }
+
+ return sXML.toString();
+ }
+
+ public static java.lang.String encodeHTMLSigns(java.lang.String sValue)
+ {
+ java.lang.StringBuffer sSource = new java.lang.StringBuffer(sValue);
+ java.lang.StringBuffer sDestination = new java.lang.StringBuffer(1000 );
+
+ for (int i=0; i<sSource.length(); ++i)
+ {
+ char c = sSource.charAt(i);
+ if (c == '&')
+ sDestination.append("&amp;");
+ else
+ sDestination.append(c);
+ }
+
+ java.lang.String sReturn = sDestination.toString();
+ if (!sReturn.equals(sValue))
+ System.out.println("encode \""+sValue+"\" => \""+sReturn+"\"");
+
+ return sReturn;
+ }
+
+ //___________________________________________
+
+ /** return a xml representation of an atomic property.
+ *
+ * Atomic property types are e.g. Integer, Boolean, String.
+ *
+ * @param sName
+ * the name of the property.
+
+ * @param aValue
+ * the value of the property.
+ *
+ * @param nPrettyTabs
+ * count of tab signs for pretty format the xml code :-)
+ *
+ * @return [java.lang.String]
+ * the xml string representation.
+ *
+ * @throws [java.lang.Exception]
+ * if anything during convertion fill fail.
+ */
+ private static java.lang.String convertSimpleObjectToXML(java.lang.String sName ,
+ java.lang.Object aValue ,
+ int nPrettyTabs)
+ throws java.lang.Exception
+ {
+ java.lang.StringBuffer sXML = new java.lang.StringBuffer(256);
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+
+ if (aValue instanceof java.lang.Integer)
+ {
+ sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">");
+ sXML.append("<value>"+aValue.toString()+"</value>");
+ sXML.append("</prop>\n");
+ }
+ else
+ if (aValue instanceof java.lang.Boolean)
+ {
+ sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">");
+ sXML.append("<value>"+aValue.toString()+"</value>");
+ sXML.append("</prop>\n");
+ }
+ else
+ if (aValue instanceof java.lang.String)
+ {
+ sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\"");
+ java.lang.String sValue = (java.lang.String)aValue;
+
+ sValue = encodeHTMLSigns(sValue);
+
+ if (sValue.length() < 1)
+ sXML.append("/>\n");
+ else
+ {
+ sXML.append("><value>"+sValue+"</value>");
+ sXML.append("</prop>\n");
+ }
+ }
+ else
+ {
+ System.err.println("name = "+sName);
+ System.err.println("value = "+aValue);
+ // ! can be used outside to detect - that it was not a simple type :-)
+ throw new java.lang.Exception("not an atomic type.");
+ }
+
+ return sXML.toString();
+ }
+
+ //___________________________________________
+
+ /** return a xml representation of a string-list property.
+ *
+ * @param sName
+ * the name of the property.
+
+ * @param aValue
+ * the value of the property.
+ *
+ * @param nPrettyTabs
+ * count of tab signs for pretty format the xml code :-)
+ *
+ * @return [java.lang.String]
+ * the xml string representation.
+ *
+ * @throws [java.lang.Exception]
+ * if anything during convertion fill fail.
+ */
+ private static java.lang.String convertListToXML(java.lang.String sName ,
+ java.util.Vector aValue ,
+ int nPrettyTabs)
+ throws java.lang.Exception
+ {
+ java.lang.StringBuffer sXML = new java.lang.StringBuffer(256);
+
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+
+ int c = aValue.size();
+ if (c < 1)
+ {
+ sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\"/>\n");
+ return sXML.toString();
+ }
+
+ // step over all list items and add it to a string buffer
+ // Every item will be separated by a default separator "\n" first.
+ // Because "\n" is not a valid separator at all and can`t occure inside
+ // our list items. During we step over all items, we check if our current separator
+ // (we use a list of possible ones!) clash with an item.
+ // If it clash - we step to the next possible separator.
+ // If our list of possible separator values runs out of range we throw
+ // an exception :-) Its better then generating of wrong values
+ // If we found a valid seperator - we use it to replace our "\n" place holder
+ // at the end of the following loop ...
+
+ int d = 0;
+ java.lang.StringBuffer sValBuff = new java.lang.StringBuffer(256);
+ for (int i=0; i<c; ++i)
+ {
+ // get the next list item
+ java.lang.Object aItem = aValue.get(i);
+ if (!(aItem instanceof java.lang.String))
+ throw new java.lang.Exception("Current implementation supports string-list only!");
+
+ java.lang.String sValue = (java.lang.String)aItem;
+
+ sValue = encodeHTMLSigns(sValue);
+
+ // append item with default separator, which isn a valid separator at all
+ // But supress adding of the separator if last element is reached.
+ sValBuff.append(sValue);
+ if (i<(c-1))
+ sValBuff.append("\n");
+
+ // check for delim clash
+ // Attention: An empty (means default) element forbid using
+ // of a whitespace character as separator!
+ while(true)
+ {
+ if (d >= DELIMS.length)
+ throw new java.lang.Exception("No valid separator found for a string list item.");
+ if (sValue.length() < 1 && DELIMS[d].equals(" "))
+ {
+ ++d;
+ continue;
+ }
+ if (sValue.indexOf(DELIMS[d]) != -1)
+ {
+ ++d;
+ continue;
+ }
+ break;
+ }
+ }
+
+ // replace default separator with right one
+ System.out.println("TODO: must be adapted to java 1.3 :-(");
+ System.exit(-1);
+//TODO_JAVA java.lang.String sListVal = sValBuff.toString().replaceAll("\n", DELIMS[d]);
+ java.lang.String sListVal = null;
+
+ sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">");
+ if (d == DEFAULT_SEPARATOR)
+ sXML.append("<value>");
+ else
+ sXML.append("<value "+XMLATTRIB_OOR_SEPARATOR+"=\""+DELIMS[d]+"\">");
+ sXML.append(sListVal);
+ sXML.append("</value>");
+ sXML.append("</prop>\n");
+
+ return sXML.toString();
+ }
+
+ //___________________________________________
+
+ /** return a xml representation of a localized property.
+ *
+ * @param sName
+ * the name of the property.
+
+ * @param aValue
+ * the value of the property.
+ *
+ * @param nPrettyTabs
+ * count of tab signs for pretty format the xml code :-)
+ *
+ * @return [java.lang.String]
+ * the xml string representation.
+ *
+ * @throws [java.lang.Exception]
+ * if anything during convertion fill fail.
+ */
+ private static java.lang.String convertLocalizedValueToXML(java.lang.String sName ,
+ java.util.HashMap aValue ,
+ int nPrettyTabs)
+ throws java.lang.Exception
+ {
+ java.lang.StringBuffer sXML = new java.lang.StringBuffer(256);
+
+ int c = aValue.size();
+ if (c < 1)
+ throw new java.lang.Exception("Cant detect type of localized values. Because the given list is empty.");
+
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+ // !Our localized values must be formated at a deeper coloum
+ // then its property name!
+ ++nPrettyTabs;
+
+ sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">\n");
+ java.util.Iterator it = aValue.keySet().iterator();
+// boolean bTypeKnown = false;
+ while(it.hasNext())
+ {
+ java.lang.String sLocale = (java.lang.String)it.next();
+ java.lang.Object aLocalizedValue = aValue.get(sLocale);
+/*
+ if (!bTypeKnown)
+ {
+ bTypeKnown = true;
+ if (aLocalizedValue instanceof java.lang.Integer)
+ sXML.append(" "+XMLATTRIB_OOR_TYPE+"=\""+XMLTYPE_INTEGER+"\">\n");
+ else
+ if (aLocalizedValue instanceof java.lang.Boolean)
+ sXML.append(" "+XMLATTRIB_OOR_TYPE+"=\""+XMLTYPE_BOOLEAN+"\">\n");
+ else
+ if (aLocalizedValue instanceof java.lang.String)
+ sXML.append(" "+XMLATTRIB_OOR_TYPE+"=\""+XMLTYPE_STRING+"\">\n");
+ else
+ throw new java.lang.Exception("Unsupported type for localized value detected.");
+ }
+*/
+ java.lang.String sLocValue = aLocalizedValue.toString();
+ java.lang.String sValue = encodeHTMLSigns(sLocValue);
+
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+ sXML.append("<value "+XMLATTRIB_XML_LANG+"=\""+sLocale+"\">"+sValue+"</value>\n");
+ }
+ --nPrettyTabs;
+ for (int t=0; t<nPrettyTabs; ++t)
+ sXML.append("\t");
+ sXML.append("</prop>\n");
+
+ return sXML.toString();
+ }
+
+ //___________________________________________
+
+ /** returns the value of an attribute of the given node.
+ *
+ * If the given node represent an lement node, may it supports some attributes.
+ * Then this method search for an attribute with the specified name and return it's value.
+ * If nothing could be found ... or the given node isn't a suitable node ... it returns null.
+ *
+ * @param aNode
+ * the node, which should be analyzed.
+ *
+ * @param sAttrib
+ * name of the attribute, which should be searched.
+ *
+ * @return The value of the specified attribute if it could be found at the given node.
+ * Can be null if node doesn't support attributes or the searched one does not exist there.
+ */
+ public static java.lang.String extractNodeAttribByName(org.w3c.dom.Node aNode ,
+ java.lang.String sAttrib)
+ throws java.lang.Exception
+ {
+ // We can get valid attributes for element nodes only!
+ if (aNode.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE)
+ {
+// System.err.println("not an element node");
+ return null;
+ }
+
+ // may it supports attributes in general ... but doesn't have anyone realy.
+ org.w3c.dom.NamedNodeMap lAttribs = aNode.getAttributes();
+ if (lAttribs==null)
+ {
+// System.err.println("no attributes at all");
+ return null;
+ }
+
+ // step over the attribute list and search for the requested one
+ for (int i=0; i<lAttribs.getLength(); ++i)
+ {
+ org.w3c.dom.Attr aAttrib = (org.w3c.dom.Attr)lAttribs.item(i);
+ if (aAttrib.getName().equals(sAttrib))
+ {
+ java.lang.String sValue = aAttrib.getValue();
+ return sValue;
+ }
+ }
+
+ // the searched attribute was not found!
+// System.err.println("required attribute \""+sAttrib+"\" does not exist for node ["+aNode.toString()+"]");
+ return null;
+ }
+
+ //___________________________________________
+
+ /** returns a list of childs, which are ELEMENT_NODES and have the right tag name.
+ *
+ * It analyze the list of all possible child nodes. Only ELEMENT_NODES are candidates.
+ * All other ones will be ignored. Further these element nodes are compared by it's tag
+ * names. If it match with the specified value it's added to the return list.
+ * So the return list includes references to the DOM tree nodes only, which are child
+ * element nodes with the right tag name.
+ *
+ * @param aNode
+ * provides access to the child nodes, which should be analyzed
+ *
+ * @param sTag
+ * the searched tag name.
+ *
+ * @return A list of child nodes, which are element nodes and have the right tag name.
+ */
+ public static java.util.Vector extractChildNodesByTagName(org.w3c.dom.Node aNode,
+ java.lang.String sTag )
+ {
+ // extract first all ELEMENT_NODES of he given parent
+ // Such nodes only provide tag names.
+ java.util.Vector lChilds = XMLHelper.extractChildNodesByType(aNode,org.w3c.dom.Node.ELEMENT_NODE);
+ java.util.Vector lExtractedChilds = new java.util.Vector(lChilds.size());
+
+ // step over the list and search for the right tags using the specified name
+ java.util.Enumeration en = lChilds.elements();
+ while (en.hasMoreElements())
+ {
+ org.w3c.dom.Node aChild = (org.w3c.dom.Node)en.nextElement();
+ if (aChild.getNodeName().equals(sTag))
+ lExtractedChilds.add(aChild);
+ }
+
+ // pack(!) and return the list
+ lExtractedChilds.trimToSize();
+ return lExtractedChilds;
+ }
+
+ //___________________________________________
+
+ /** returns a list of childs, which supports the right node type.
+ *
+ * It analyze the list of all possible child nodes. If a node represent the right node type
+ * it is added to the return list. Otherwhise it will be ignored.
+ *
+ * @param aNode
+ * provides access to the list of possible children nodes.
+ *
+ * @param nType
+ * represent the searched node type.
+ * Possible values are constant fields of a org.w3c.dom.Node - e.g. org.w3c.dom.Node.ELEMENT_NODE.
+ *
+ * @return A list of child nodes, which provides the right node type.
+ */
+ public static java.util.Vector extractChildNodesByType(org.w3c.dom.Node aNode,
+ short nType)
+ {
+ // get list of all possibe childs and reserve enough space for our return list
+ // Attention: A null pointer is not allowed for return! (means lExtractedChilds)
+ org.w3c.dom.NodeList lChilds = aNode.getChildNodes();
+ int c = lChilds.getLength();
+ java.util.Vector lExtractedChilds = new java.util.Vector(c);
+
+ // step of these childs and select only needed ones
+ for (int i=0; i<c; ++i)
+ {
+ org.w3c.dom.Node aChild = lChilds.item(i);
+ if (aChild.getNodeType() == nType)
+ lExtractedChilds.add(aChild);
+ }
+
+ // pack(!) and return the list
+ lExtractedChilds.trimToSize();
+ return lExtractedChilds;
+ }
+
+ //___________________________________________
+
+ /** generates an xml header, using parameters.
+ *
+ * @param sVersion
+ * number of the xml version.
+ *
+ * @param sEncoding
+ * used file encoding.
+ *
+ * @param sPath
+ * name of the configuration root.
+ *
+ * @param sPackage
+ * name of the configuration package.
+ *
+ * @param bLanguagepack
+ * force creation of a special header,
+ * which is needed for language packs only.
+ *
+ * @return [java.lang.String]
+ * the generated xml header.
+
+*/
+ public static java.lang.String generateHeader(java.lang.String sVersion ,
+ java.lang.String sEncoding ,
+ java.lang.String sPath ,
+ java.lang.String sPackage ,
+ boolean bLanguagePack)
+ {
+ java.lang.StringBuffer sHeader = new java.lang.StringBuffer(256);
+
+ if (bLanguagePack)
+ {
+ sHeader.append("<?xml version=\"");
+ sHeader.append(sVersion);
+ sHeader.append("\" encoding=\"");
+ sHeader.append(sEncoding);
+ sHeader.append("\"?>\n");
+ sHeader.append("<oor:component-data oor:package=\"");
+ sHeader.append(sPath);
+ sHeader.append("\" oor:name=\"");
+ sHeader.append(sPackage);
+ sHeader.append("\" xmlns:install=\"http://openoffice.org/2004/installation\"");
+ sHeader.append(" xmlns:oor=\"http://openoffice.org/2001/registry\"");
+ sHeader.append(" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"");
+ sHeader.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n");
+ }
+ else
+ {
+ sHeader.append("<?xml version=\"");
+ sHeader.append(sVersion);
+ sHeader.append("\" encoding=\"");
+ sHeader.append(sEncoding);
+ sHeader.append("\"?>\n<!DOCTYPE oor:component-data SYSTEM \"../../../../component-update.dtd\">\n");
+ sHeader.append("<oor:component-data xmlns:oor=\"http://openoffice.org/2001/registry\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" oor:package=\"");
+ sHeader.append(sPath);
+ sHeader.append("\" oor:name=\"");
+ sHeader.append(sPackage);
+ sHeader.append("\">\n");
+ }
+
+ return sHeader.toString();
+ }
+
+ public static java.lang.String generateFooter()
+ {
+ return "</oor:component-data>\n";
+ }
+}
diff --git a/transex3/source/filter/utils/makefile.mk b/transex3/source/filter/utils/makefile.mk
new file mode 100644
index 000000000000..d41d8ba9a825
--- /dev/null
+++ b/transex3/source/filter/utils/makefile.mk
@@ -0,0 +1,57 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.9.98.2 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ = ..$/..$/..
+TARGET = FCFGUtils
+PRJNAME = filter
+PACKAGE = com$/sun$/star$/filter$/config$/tools$/utils
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE: settings.mk
+
+#----- compile .java files -----------------------------------------
+
+
+JAVACLASSFILES = \
+ $(CLASSDIR)$/$(PACKAGE)$/AnalyzeStartupLog.class \
+ $(CLASSDIR)$/$(PACKAGE)$/ConfigHelper.class \
+ $(CLASSDIR)$/$(PACKAGE)$/Logger.class \
+ $(CLASSDIR)$/$(PACKAGE)$/FileHelper.class \
+ $(CLASSDIR)$/$(PACKAGE)$/MalformedCommandLineException.class \
+ $(CLASSDIR)$/$(PACKAGE)$/Cache.class \
+ $(CLASSDIR)$/$(PACKAGE)$/XMLHelper.class
+
+MAXLINELENGTH = 100000
+
+# --- targets -----------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/transex3/source/help/HelpCompiler.cxx b/transex3/source/help/HelpCompiler.cxx
new file mode 100644
index 000000000000..5001d0907972
--- /dev/null
+++ b/transex3/source/help/HelpCompiler.cxx
@@ -0,0 +1,593 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: HelpCompiler.cxx,v $
+ * $Revision: 1.9 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#include "HelpCompiler.hxx"
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libxslt/xslt.h>
+#include <libxslt/xsltInternals.h>
+#include <libxslt/transform.h>
+#include <libxslt/xsltutils.h>
+#ifdef __MINGW32__
+#include <tools/prewin.h>
+#include <tools/postwin.h>
+#endif
+#include <osl/thread.hxx>
+
+static void impl_sleep( sal_uInt32 nSec )
+{
+ TimeValue aTime;
+ aTime.Seconds = nSec;
+ aTime.Nanosec = 0;
+
+ osl::Thread::wait( aTime );
+}
+
+HelpCompiler::HelpCompiler(StreamTable &in_streamTable, const fs::path &in_inputFile,
+ const fs::path &in_src, const fs::path &in_resEmbStylesheet,
+ const std::string &in_module, const std::string &in_lang, bool in_bExtensionMode)
+ : streamTable(in_streamTable), inputFile(in_inputFile),
+ src(in_src), module(in_module), lang(in_lang), resEmbStylesheet(in_resEmbStylesheet),
+ bExtensionMode( in_bExtensionMode )
+{
+ xmlKeepBlanksDefaultValue = 0;
+}
+
+xmlDocPtr HelpCompiler::getSourceDocument(const fs::path &filePath)
+{
+ static const char *params[4 + 1];
+ static xsltStylesheetPtr cur = NULL;
+
+ xmlDocPtr res;
+ if( bExtensionMode )
+ {
+ res = xmlParseFile(filePath.native_file_string().c_str());
+ if( !res ){
+ impl_sleep( 3 );
+ res = xmlParseFile(filePath.native_file_string().c_str());
+ }
+ }
+ else
+ {
+ if (!cur)
+ {
+ static std::string fsroot('\'' + src.toUTF8() + '\'');
+ static std::string esclang('\'' + lang + '\'');
+
+ xmlSubstituteEntitiesDefault(1);
+ xmlLoadExtDtdDefaultValue = 1;
+ cur = xsltParseStylesheetFile((const xmlChar *)resEmbStylesheet.native_file_string().c_str());
+
+ int nbparams = 0;
+ params[nbparams++] = "Language";
+ params[nbparams++] = esclang.c_str();
+ params[nbparams++] = "fsroot";
+ params[nbparams++] = fsroot.c_str();
+ params[nbparams] = NULL;
+ }
+ xmlDocPtr doc = xmlParseFile(filePath.native_file_string().c_str());
+ if( !doc )
+ {
+ impl_sleep( 3 );
+ doc = xmlParseFile(filePath.native_file_string().c_str());
+ }
+
+ //???res = xmlParseFile(filePath.native_file_string().c_str());
+
+ res = xsltApplyStylesheet(cur, doc, params);
+ xmlFreeDoc(doc);
+ }
+ return res;
+}
+
+HashSet HelpCompiler::switchFind(xmlDocPtr doc)
+{
+ HashSet hs;
+ xmlChar *xpath = (xmlChar*)"//switchinline";
+
+ xmlXPathContextPtr context = xmlXPathNewContext(doc);
+ xmlXPathObjectPtr result = xmlXPathEvalExpression(xpath, context);
+ xmlXPathFreeContext(context);
+ if (result)
+ {
+ xmlNodeSetPtr nodeset = result->nodesetval;
+ for (int i = 0; i < nodeset->nodeNr; i++)
+ {
+ xmlNodePtr el = nodeset->nodeTab[i];
+ xmlChar *select = xmlGetProp(el, (xmlChar*)"select");
+ if (select)
+ {
+ if (!strcmp((const char*)select, "appl"))
+ {
+ xmlNodePtr n1 = el->xmlChildrenNode;
+ while (n1)
+ {
+ if ((!xmlStrcmp(n1->name, (const xmlChar*)"caseinline")))
+ {
+ xmlChar *appl = xmlGetProp(n1, (xmlChar*)"select");
+ hs.push_back(std::string((const char*)appl));
+ xmlFree(appl);
+ }
+ else if ((!xmlStrcmp(n1->name, (const xmlChar*)"defaultinline")))
+ hs.push_back(std::string("DEFAULT"));
+ n1 = n1->next;
+ }
+ }
+ xmlFree(select);
+ }
+ }
+ xmlXPathFreeObject(result);
+ }
+ hs.push_back(std::string("DEFAULT"));
+ return hs;
+}
+
+// returns a node representing the whole stuff compiled for the current
+// application.
+xmlNodePtr HelpCompiler::clone(xmlNodePtr node, const std::string& appl)
+{
+ xmlNodePtr parent = xmlCopyNode(node, 2);
+ xmlNodePtr n = node->xmlChildrenNode;
+ while (n != NULL)
+ {
+ bool isappl = false;
+ if ( (!strcmp((const char*)n->name, "switchinline")) ||
+ (!strcmp((const char*)n->name, "switch")) )
+ {
+ xmlChar *select = xmlGetProp(n, (xmlChar*)"select");
+ if (select)
+ {
+ if (!strcmp((const char*)select, "appl"))
+ isappl = true;
+ xmlFree(select);
+ }
+ }
+ if (isappl)
+ {
+ xmlNodePtr caseNode = n->xmlChildrenNode;
+ if (appl == "DEFAULT")
+ {
+ while (caseNode)
+ {
+ if (!strcmp((const char*)caseNode->name, "defaultinline"))
+ {
+ xmlNodePtr cnl = caseNode->xmlChildrenNode;
+ while (cnl)
+ {
+ xmlAddChild(parent, clone(cnl, appl));
+ cnl = cnl->next;
+ }
+ break;
+ }
+ caseNode = caseNode->next;
+ }
+ }
+ else
+ {
+ while (caseNode)
+ {
+ isappl=false;
+ if (!strcmp((const char*)caseNode->name, "caseinline"))
+ {
+ xmlChar *select = xmlGetProp(n, (xmlChar*)"select");
+ if (select)
+ {
+ if (!strcmp((const char*)select, appl.c_str()))
+ isappl = true;
+ xmlFree(select);
+ }
+ if (isappl)
+ {
+ xmlNodePtr cnl = caseNode->xmlChildrenNode;
+ while (cnl)
+ {
+ xmlAddChild(parent, clone(cnl, appl));
+ cnl = cnl->next;
+ }
+ break;
+ }
+
+ }
+ caseNode = caseNode->next;
+ }
+ }
+
+ }
+ else
+ xmlAddChild(parent, clone(n, appl));
+
+ n = n->next;
+ }
+ return parent;
+}
+
+class myparser
+{
+public:
+ std::string documentId;
+ std::string fileName;
+ std::string title;
+ HashSet *hidlist;
+ Hashtable *keywords;
+ Stringtable *helptexts;
+private:
+ HashSet extendedHelpText;
+public:
+ myparser(const std::string &indocumentId, const std::string &infileName,
+ const std::string &intitle) : documentId(indocumentId), fileName(infileName),
+ title(intitle)
+ {
+ hidlist = new HashSet;
+ keywords = new Hashtable;
+ helptexts = new Stringtable;
+ }
+ void traverse( xmlNodePtr parentNode );
+private:
+ std::string dump(xmlNodePtr node);
+};
+
+std::string myparser::dump(xmlNodePtr node)
+{
+ std::string app;
+ if (node->xmlChildrenNode)
+ {
+ xmlNodePtr list = node->xmlChildrenNode;
+ while (list)
+ {
+ app += dump(list);
+ list = list->next;
+ }
+ }
+ if (xmlNodeIsText(node))
+ {
+ xmlChar *pContent = xmlNodeGetContent(node);
+ app += std::string((const char*)pContent);
+ xmlFree(pContent);
+ // std::cout << app << std::endl;
+ }
+ return app;
+}
+
+void trim(std::string& str)
+{
+ std::string::size_type pos = str.find_last_not_of(' ');
+ if(pos != std::string::npos)
+ {
+ str.erase(pos + 1);
+ pos = str.find_first_not_of(' ');
+ if(pos != std::string::npos)
+ str.erase(0, pos);
+ }
+ else
+ str.erase(str.begin(), str.end());
+}
+
+void myparser::traverse( xmlNodePtr parentNode )
+{
+ // traverse all nodes that belong to the parent
+ xmlNodePtr test ;
+ for (test = parentNode->xmlChildrenNode; test; test = test->next)
+ {
+ if (fileName.empty() && !strcmp((const char*)test->name, "filename"))
+ {
+ xmlNodePtr node = test->xmlChildrenNode;
+ if (xmlNodeIsText(node))
+ {
+ xmlChar *pContent = xmlNodeGetContent(node);
+ fileName = std::string((const char*)pContent);
+ xmlFree(pContent);
+ }
+ }
+ else if (title.empty() && !strcmp((const char*)test->name, "title"))
+ {
+ title = dump(test);
+ if (title.empty())
+ title = "<notitle>";
+ }
+ else if (!strcmp((const char*)test->name, "bookmark"))
+ {
+ xmlChar *branchxml = xmlGetProp(test, (const xmlChar*)"branch");
+ xmlChar *idxml = xmlGetProp(test, (const xmlChar*)"id");
+ std::string branch((const char*)branchxml);
+ std::string anchor((const char*)idxml);
+ xmlFree (branchxml);
+ xmlFree (idxml);
+
+ std::string hid;
+
+ if (branch.find("hid") == 0)
+ {
+ size_t index = branch.find('/');
+ if (index != std::string::npos)
+ {
+ hid = branch.substr(1 + index);
+ // one shall serve as a documentId
+ if (documentId.empty())
+ documentId = hid;
+ extendedHelpText.push_back(hid);
+ std::string foo = anchor.empty() ? hid : hid + "#" + anchor;
+ HCDBG(std::cerr << "hid pushback" << foo << std::endl);
+ hidlist->push_back( anchor.empty() ? hid : hid + "#" + anchor);
+ }
+ else
+ continue;
+ }
+ else if (branch.compare("index") == 0)
+ {
+ LinkedList ll;
+
+ for (xmlNodePtr nd = test->xmlChildrenNode; nd; nd = nd->next)
+ {
+ if (strcmp((const char*)nd->name, "bookmark_value"))
+ continue;
+
+ std::string embedded;
+ xmlChar *embeddedxml = xmlGetProp(nd, (const xmlChar*)"embedded");
+ if (embeddedxml)
+ {
+ embedded = std::string((const char*)embeddedxml);
+ xmlFree (embeddedxml);
+ std::transform (embedded.begin(), embedded.end(),
+ embedded.begin(), tolower);
+ }
+
+ bool isEmbedded = !embedded.empty() && embedded.compare("true") == 0;
+ if (isEmbedded)
+ continue;
+
+ std::string keyword = dump(nd);
+ size_t keywordSem = keyword.find(';');
+ if (keywordSem != std::string::npos)
+ {
+ std::string tmppre =
+ keyword.substr(0,keywordSem);
+ trim(tmppre);
+ std::string tmppos =
+ keyword.substr(1+keywordSem);
+ trim(tmppos);
+ keyword = tmppre + ";" + tmppos;
+ }
+ ll.push_back(keyword);
+ }
+ if (!ll.empty())
+ (*keywords)[anchor] = ll;
+ }
+ else if (branch.compare("contents") == 0)
+ {
+ // currently not used
+ }
+ }
+ else if (!strcmp((const char*)test->name, "ahelp"))
+ {
+ std::string text = dump(test);
+ trim(text);
+ std::string name;
+
+ HashSet::const_iterator aEnd = extendedHelpText.end();
+ for (HashSet::const_iterator iter = extendedHelpText.begin(); iter != aEnd;
+ ++iter)
+ {
+ name = *iter;
+ (*helptexts)[name] = text;
+ }
+ extendedHelpText.clear();
+ }
+
+ // traverse children
+ traverse(test);
+ }
+}
+
+bool HelpCompiler::compile( void ) throw( HelpProcessingException )
+{
+ // we now have the jaroutputstream, which will contain the document.
+ // now determine the document as a dom tree in variable docResolved
+
+ xmlDocPtr docResolvedOrg = getSourceDocument(inputFile);
+
+ // now add path to the document
+ // resolve the dom
+ if (!docResolvedOrg)
+ {
+ impl_sleep( 3 );
+ docResolvedOrg = getSourceDocument(inputFile);
+ if( !docResolvedOrg )
+ {
+ std::stringstream aStrStream;
+ aStrStream << "ERROR: file not existing: " << inputFile.native_file_string().c_str() << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ }
+
+ // now find all applications for which one has to compile
+ std::string documentId;
+ std::string fileName;
+ std::string title;
+ // returns all applications for which one has to compile
+ HashSet applications = switchFind(docResolvedOrg);
+
+ HashSet::const_iterator aEnd = applications.end();
+ for (HashSet::const_iterator aI = applications.begin(); aI != aEnd; ++aI)
+ {
+ std::string appl = *aI;
+ std::string modulename = appl;
+ if (modulename[0] == 'S')
+ {
+ modulename = modulename.substr(1);
+ std::transform(modulename.begin(), modulename.end(), modulename.begin(), tolower);
+ }
+ if (modulename != "DEFAULT" && modulename != module)
+ continue;
+
+ // returns a clone of the document with swich-cases resolved
+ xmlNodePtr docResolved = clone(xmlDocGetRootElement(docResolvedOrg), appl);
+ myparser aparser(documentId, fileName, title);
+ aparser.traverse(docResolved);
+
+ documentId = aparser.documentId;
+ fileName = aparser.fileName;
+ title = aparser.title;
+
+ HCDBG(std::cerr << documentId << " : " << fileName << " : " << title << std::endl);
+
+ xmlDocPtr docResolvedDoc = xmlCopyDoc(docResolvedOrg, false);
+ xmlDocSetRootElement(docResolvedDoc, docResolved);
+
+ if (modulename == "DEFAULT")
+ {
+ streamTable.dropdefault();
+ streamTable.default_doc = docResolvedDoc;
+ streamTable.default_hidlist = aparser.hidlist;
+ streamTable.default_helptexts = aparser.helptexts;
+ streamTable.default_keywords = aparser.keywords;
+ }
+ else if (modulename == module)
+ {
+ streamTable.dropappl();
+ streamTable.appl_doc = docResolvedDoc;
+ streamTable.appl_hidlist = aparser.hidlist;
+ streamTable.appl_helptexts = aparser.helptexts;
+ streamTable.appl_keywords = aparser.keywords;
+ }
+ else
+ {
+ std::stringstream aStrStream;
+ aStrStream << "ERROR: Found unexpected module name \"" << modulename
+ << "\" in file" << src.native_file_string().c_str() << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ } // end iteration over all applications
+
+ streamTable.document_id = documentId;
+ streamTable.document_path = fileName;
+ streamTable.document_title = title;
+ std::string actMod = module;
+ if ( !bExtensionMode && !fileName.empty())
+ {
+ if (fileName.find("/text/") == 0)
+ {
+ int len = strlen("/text/");
+ actMod = fileName.substr(len);
+ actMod = actMod.substr(0, actMod.find('/'));
+ }
+ }
+ streamTable.document_module = actMod;
+
+ xmlFreeDoc(docResolvedOrg);
+ return true;
+}
+
+namespace fs
+{
+ rtl_TextEncoding getThreadTextEncoding( void )
+ {
+ static bool bNeedsInit = true;
+ static rtl_TextEncoding nThreadTextEncoding;
+ if( bNeedsInit )
+ {
+ bNeedsInit = false;
+ nThreadTextEncoding = osl_getThreadTextEncoding();
+ }
+ return nThreadTextEncoding;
+ }
+
+ void create_directory(const fs::path indexDirName)
+ {
+ HCDBG(
+ std::cerr << "creating " <<
+ rtl::OUStringToOString(indexDirName.data, RTL_TEXTENCODING_UTF8).getStr()
+ << std::endl
+ );
+ osl::Directory::createPath(indexDirName.data);
+ }
+
+ void rename(const fs::path &src, const fs::path &dest)
+ {
+ osl::File::move(src.data, dest.data);
+ }
+
+ void copy(const fs::path &src, const fs::path &dest)
+ {
+ osl::File::copy(src.data, dest.data);
+ }
+
+ bool exists(const fs::path &in)
+ {
+ osl::File tmp(in.data);
+ return (tmp.open(osl_File_OpenFlag_Read) == osl::FileBase::E_None);
+ }
+
+ void remove(const fs::path &in)
+ {
+ osl::File::remove(in.data);
+ }
+
+ void removeRecursive(rtl::OUString const& _suDirURL)
+ {
+ {
+ osl::Directory aDir(_suDirURL);
+ aDir.open();
+ if (aDir.isOpen())
+ {
+ osl::DirectoryItem aItem;
+ osl::FileStatus aStatus(osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Attributes);
+ while (aDir.getNextItem(aItem) == ::osl::FileBase::E_None)
+ {
+ if (osl::FileBase::E_None == aItem.getFileStatus(aStatus) &&
+ aStatus.isValid(osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Attributes))
+ {
+ rtl::OUString suFilename = aStatus.getFileName();
+ rtl::OUString suFullFileURL;
+ suFullFileURL += _suDirURL;
+ suFullFileURL += rtl::OUString::createFromAscii("/");
+ suFullFileURL += suFilename;
+
+ if (aStatus.getFileType() == osl::FileStatus::Directory)
+ removeRecursive(suFullFileURL);
+ else
+ osl::File::remove(suFullFileURL);
+ }
+ }
+ aDir.close();
+ }
+ }
+ osl::Directory::remove(_suDirURL);
+ }
+
+ void remove_all(const fs::path &in)
+ {
+ removeRecursive(in.data);
+ }
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/transex3/source/help/HelpCompiler.hxx b/transex3/source/help/HelpCompiler.hxx
new file mode 100644
index 000000000000..7ffb096bd635
--- /dev/null
+++ b/transex3/source/help/HelpCompiler.hxx
@@ -0,0 +1,320 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: HelpCompiler.hxx,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef HELPCOMPILER_HXX
+#define HELPCOMPILER_HXX
+
+#include <string>
+#include <hash_map>
+#include <vector>
+#include <list>
+#include <fstream>
+#include <iostream>
+#include <sstream>
+#include <algorithm>
+#include <ctype.h>
+#ifdef SYSTEM_DB
+#include <db.h>
+#else
+#include <berkeleydb/db.h>
+#endif
+
+#include <boost/shared_ptr.hpp>
+
+#include <libxml/xmlmemory.h>
+#include <libxml/debugXML.h>
+#include <libxml/HTMLtree.h>
+#include <libxml/xmlIO.h>
+#include <libxml/xinclude.h>
+#include <libxml/catalog.h>
+
+#include <rtl/ustring.hxx>
+#include <osl/thread.h>
+#include <osl/process.h>
+#include <osl/file.hxx>
+
+#include <compilehelp.hxx>
+
+#define EMULATEORIGINAL 1
+
+#ifdef CMCDEBUG
+ #define HCDBG(foo) do { if (1) foo; } while(0)
+#else
+ #define HCDBG(foo) do { if (0) foo; } while(0)
+#endif
+
+namespace fs
+{
+ rtl_TextEncoding getThreadTextEncoding( void );
+
+ enum convert { native };
+ class path
+ {
+ public:
+ ::rtl::OUString data;
+ public:
+ path() {}
+ path(const path &rOther) : data(rOther.data) {}
+ path(const std::string &in, convert)
+ {
+ rtl::OUString sWorkingDir;
+ osl_getProcessWorkingDir(&sWorkingDir.pData);
+
+ rtl::OString tmp(in.c_str());
+ rtl::OUString ustrSystemPath(rtl::OStringToOUString(tmp, getThreadTextEncoding()));
+ osl::File::getFileURLFromSystemPath(ustrSystemPath, data);
+ osl::File::getAbsoluteFileURL(sWorkingDir, data, data);
+ }
+ path(const std::string &FileURL)
+ {
+ rtl::OString tmp(FileURL.c_str());
+ data = rtl::OStringToOUString(tmp, getThreadTextEncoding());
+ }
+ std::string native_file_string() const
+ {
+ ::rtl::OUString ustrSystemPath;
+ osl::File::getSystemPathFromFileURL(data, ustrSystemPath);
+ rtl::OString tmp(rtl::OUStringToOString(ustrSystemPath, getThreadTextEncoding()));
+ HCDBG(std::cerr << "native_file_string is " << tmp.getStr() << std::endl);
+ return std::string(tmp.getStr());
+ }
+ std::string native_directory_string() const { return native_file_string(); }
+ std::string toUTF8() const
+ {
+ rtl::OString tmp(rtl::OUStringToOString(data, RTL_TEXTENCODING_UTF8));
+ return std::string(tmp.getStr());
+ }
+ bool empty() const { return data.getLength() == 0; }
+ path operator/(const std::string &in) const
+ {
+ path ret(*this);
+ HCDBG(std::cerr << "orig was " <<
+ rtl::OUStringToOString(ret.data, RTL_TEXTENCODING_UTF8).getStr() << std::endl);
+ rtl::OString tmp(in.c_str());
+ rtl::OUString ustrSystemPath(rtl::OStringToOUString(tmp, getThreadTextEncoding()));
+ ret.data += rtl::OUString(sal_Unicode('/'));
+ ret.data += ustrSystemPath;
+ HCDBG(std::cerr << "final is " <<
+ rtl::OUStringToOString(ret.data, RTL_TEXTENCODING_UTF8).getStr() << std::endl);
+ return ret;
+ }
+ void append(const char *in)
+ {
+ rtl::OString tmp(in);
+ rtl::OUString ustrSystemPath(rtl::OStringToOUString(tmp, getThreadTextEncoding()));
+ data = data + ustrSystemPath;
+ }
+ void append(const std::string &in) { append(in.c_str()); }
+ };
+
+ void create_directory(const fs::path indexDirName);
+ void rename(const fs::path &src, const fs::path &dest);
+ void copy(const fs::path &src, const fs::path &dest);
+ bool exists(const fs::path &in);
+ void remove_all(const fs::path &in);
+ void remove(const fs::path &in);
+}
+
+struct joaat_hash
+{
+ size_t operator()(const std::string &str) const
+ {
+ size_t hash = 0;
+ const char *key = str.data();
+ for (size_t i = 0; i < str.size(); i++)
+ {
+ hash += key[i];
+ hash += (hash << 10);
+ hash ^= (hash >> 6);
+ }
+ hash += (hash << 3);
+ hash ^= (hash >> 11);
+ hash += (hash << 15);
+ return hash;
+ }
+};
+
+#define get16bits(d) ((((sal_uInt32)(((const sal_uInt8 *)(d))[1])) << 8)\
+ +(sal_uInt32)(((const sal_uInt8 *)(d))[0]) )
+
+struct SuperFastHash
+{
+ size_t operator()(const std::string &str) const
+ {
+ const char * data = str.data();
+ int len = str.size();
+ size_t hash = len, tmp;
+ if (len <= 0 || data == NULL) return 0;
+
+ int rem = len & 3;
+ len >>= 2;
+
+ /* Main loop */
+ for (;len > 0; len--)
+ {
+ hash += get16bits (data);
+ tmp = (get16bits (data+2) << 11) ^ hash;
+ hash = (hash << 16) ^ tmp;
+ data += 2*sizeof (sal_uInt16);
+ hash += hash >> 11;
+ }
+
+ /* Handle end cases */
+ switch (rem)
+ {
+ case 3: hash += get16bits (data);
+ hash ^= hash << 16;
+ hash ^= data[sizeof (sal_uInt16)] << 18;
+ hash += hash >> 11;
+ break;
+ case 2: hash += get16bits (data);
+ hash ^= hash << 11;
+ hash += hash >> 17;
+ break;
+ case 1: hash += *data;
+ hash ^= hash << 10;
+ hash += hash >> 1;
+ }
+
+ /* Force "avalanching" of final 127 bits */
+ hash ^= hash << 3;
+ hash += hash >> 5;
+ hash ^= hash << 4;
+ hash += hash >> 17;
+ hash ^= hash << 25;
+ hash += hash >> 6;
+
+ return hash;
+ }
+};
+
+#define pref_hash joaat_hash
+
+typedef std::hash_map<std::string, std::string, pref_hash> Stringtable;
+typedef std::list<std::string> LinkedList;
+typedef std::vector<std::string> HashSet;
+
+typedef std::hash_map<std::string, LinkedList, pref_hash> Hashtable;
+
+class StreamTable
+{
+public:
+ std::string document_id;
+ std::string document_path;
+ std::string document_module;
+ std::string document_title;
+
+ HashSet *appl_hidlist;
+ Hashtable *appl_keywords;
+ Stringtable *appl_helptexts;
+ xmlDocPtr appl_doc;
+
+ HashSet *default_hidlist;
+ Hashtable *default_keywords;
+ Stringtable *default_helptexts;
+ xmlDocPtr default_doc;
+
+ StreamTable() :
+ appl_hidlist(NULL), appl_keywords(NULL), appl_helptexts(NULL), appl_doc(NULL),
+ default_hidlist(NULL), default_keywords(NULL), default_helptexts(NULL), default_doc(NULL)
+ {}
+ void dropdefault()
+ {
+ delete default_hidlist;
+ delete default_keywords;
+ delete default_helptexts;
+ if (default_doc) xmlFreeDoc(default_doc);
+ }
+ void dropappl()
+ {
+ delete appl_hidlist;
+ delete appl_keywords;
+ delete appl_helptexts;
+ if (appl_doc) xmlFreeDoc(appl_doc);
+ }
+ ~StreamTable()
+ {
+ dropappl();
+ dropdefault();
+ }
+};
+
+struct HelpProcessingException
+{
+ HelpProcessingErrorClass m_eErrorClass;
+ std::string m_aErrorMsg;
+ std::string m_aXMLParsingFile;
+ int m_nXMLParsingLine;
+
+ HelpProcessingException( HelpProcessingErrorClass eErrorClass, const std::string& aErrorMsg )
+ : m_eErrorClass( eErrorClass )
+ , m_aErrorMsg( aErrorMsg )
+ {}
+ HelpProcessingException( const std::string& aErrorMsg, const std::string& aXMLParsingFile, int nXMLParsingLine )
+ : m_eErrorClass( HELPPROCESSING_XMLPARSING_ERROR )
+ , m_aErrorMsg( aErrorMsg )
+ , m_aXMLParsingFile( aXMLParsingFile )
+ , m_nXMLParsingLine( nXMLParsingLine )
+ {}
+};
+
+class HelpCompiler
+{
+public:
+ HelpCompiler(StreamTable &streamTable,
+ const fs::path &in_inputFile,
+ const fs::path &in_src,
+ const fs::path &in_resEmbStylesheet,
+ const std::string &in_module,
+ const std::string &in_lang,
+ bool in_bExtensionMode);
+ bool compile( void ) throw (HelpProcessingException);
+ void addEntryToJarFile(const std::string &prefix,
+ const std::string &entryName, const std::string &bytesToAdd);
+ void addEntryToJarFile(const std::string &prefix,
+ const std::string &entryName, const HashSet &bytesToAdd);
+ void addEntryToJarFile(const std::string &prefix,
+ const std::string &entryName, const Stringtable &bytesToAdd);
+ void addEntryToJarFile(const std::string &prefix,
+ const std::string &entryName, const Hashtable &bytesToAdd);
+private:
+ xmlDocPtr getSourceDocument(const fs::path &filePath);
+ HashSet switchFind(xmlDocPtr doc);
+ xmlNodePtr clone(xmlNodePtr node, const std::string& appl);
+ StreamTable &streamTable;
+ const fs::path inputFile, src;
+ const std::string module, lang;
+ const fs::path resEmbStylesheet;
+ bool bExtensionMode;
+};
+
+#endif
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/transex3/source/help/HelpFileDocument.java b/transex3/source/help/HelpFileDocument.java
new file mode 100644
index 000000000000..2212db27f251
--- /dev/null
+++ b/transex3/source/help/HelpFileDocument.java
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: HelpFileDocument.java,v $
+ * $Revision: 1.2 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.help;
+
+import java.io.File;
+import java.io.Reader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+//import java.io.FileReader;
+import java.io.StringReader;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+/** Lucene Document for help files */
+public class HelpFileDocument
+{
+ /** Creates reader for UTF-8 files
+ */
+ private static Reader getReaderForFile( File aFile )
+ throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException {
+ Reader aReader;
+ if( aFile != null ) {
+ FileInputStream fis = new FileInputStream( aFile );
+ aReader = new InputStreamReader( fis, "UTF-8" );
+ }
+ else {
+ aReader = new StringReader( "" );
+ }
+ return aReader;
+ }
+
+ /** Makes a document for a File.
+ */
+ public static Document Document( String aModule, File aCaptionFile, File aContentFile )
+ throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException {
+ Document doc = new Document();
+
+ // Add the path of the file as a field named "path". Use a field that is
+ // indexed (i.e. searchable), but don't tokenize the field into words.
+ File aFile = aCaptionFile != null ? aCaptionFile : aContentFile;
+ if( aFile != null )
+ {
+ String aPath = "#HLP#" + aModule + "/" + aFile.getName();
+ doc.add(new Field("path", aPath, Field.Store.YES, Field.Index.UN_TOKENIZED));
+ }
+
+ // Add the caption of the file to a field named "caption". Specify a Reader,
+ // so that the text of the file is tokenized and indexed, but not stored.
+ doc.add( new Field( "caption", getReaderForFile( aCaptionFile ) ) );
+
+ // Add the contents of the file to a field named "content". Specify a Reader,
+ // so that the text of the file is tokenized and indexed, but not stored.
+ doc.add( new Field( "content", getReaderForFile( aContentFile ) ) );
+
+ // return the document
+ return doc;
+ }
+
+ private HelpFileDocument() {}
+}
diff --git a/transex3/source/help/HelpIndexerTool.java b/transex3/source/help/HelpIndexerTool.java
new file mode 100644
index 000000000000..6bf22d1ac344
--- /dev/null
+++ b/transex3/source/help/HelpIndexerTool.java
@@ -0,0 +1,372 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: HelpIndexer.java,v $
+ * $Revision: 1.21 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package com.sun.star.help;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+import java.util.zip.CRC32;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.analysis.cjk.CJKAnalyzer;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.index.IndexWriter;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Date;
+
+public class HelpIndexerTool
+{
+ public HelpIndexerTool()
+ {
+ }
+
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main( String[] args )
+ {
+ boolean bExtensionMode = false;
+ mainImpl( args, bExtensionMode );
+ }
+
+ public static void mainImpl( String[] args, boolean bExtensionMode )
+ {
+ String aDirToZipStr = "";
+ String aSrcDirStr = "";
+ String aLanguageStr = "";
+ String aModule = "";
+ String aTargetZipFileStr = "";
+ String aCfsName = "";
+
+ // Scan arguments
+ boolean bLang = false;
+ boolean bMod = false;
+ boolean bZipDir = false;
+ boolean bSrcDir = false;
+ boolean bOutput = false;
+ boolean bCfsName = false;
+
+ int nArgCount = args.length;
+ for( int i = 0 ; i < nArgCount ; i++ )
+ {
+ if( "-lang".equals(args[i]) )
+ {
+ if( i + 1 < nArgCount )
+ {
+ aLanguageStr = args[i + 1];
+ bLang = true;
+ }
+ i++;
+ }
+ else if( "-mod".equals(args[i]) )
+ {
+ if( i + 1 < nArgCount )
+ {
+ aModule = args[i + 1];
+ bMod = true;
+ }
+ i++;
+ }
+ else if( "-zipdir".equals(args[i]) )
+ {
+ if( i + 1 < nArgCount )
+ {
+ aDirToZipStr = args[i + 1];
+ bZipDir = true;
+ }
+ i++;
+ }
+ else if( "-srcdir".equals(args[i]) )
+ {
+ if( i + 1 < nArgCount )
+ {
+ aSrcDirStr = args[i + 1];
+ bSrcDir = true;
+ }
+ i++;
+ }
+ else if( "-o".equals(args[i]) )
+ {
+ if( i + 1 < nArgCount )
+ {
+ aTargetZipFileStr = args[i + 1];
+ bOutput = true;
+ }
+ i++;
+ }
+ else if( "-checkcfsname".equals(args[i]) )
+ {
+ if( i + 1 < nArgCount )
+ {
+ aCfsName = args[i + 1] + ".cfs";
+ bCfsName = true;
+ }
+ i++;
+ }
+ }
+
+ if( !bLang || !bMod || !bZipDir || (!bOutput && !bExtensionMode) )
+ {
+ if( bExtensionMode )
+ return;
+
+ System.out.println("Usage: HelpIndexer -lang ISOLangCode -mod HelpModule -zipdir TempZipDir -o OutputZipFile");
+ System.exit( -1 );
+ }
+
+ String aIndexDirName = aModule + ".idxl";
+ File aIndexDir = new File( aDirToZipStr + File.separator + aIndexDirName );
+ if( !bSrcDir )
+ aSrcDirStr = aDirToZipStr;
+ File aCaptionFilesDir = new File( aSrcDirStr + File.separator + "caption" );
+ File aContentFilesDir = new File( aSrcDirStr + File.separator + "content" );
+
+ try
+ {
+ Date start = new Date();
+ Analyzer analyzer = aLanguageStr.equals("ja") ? (Analyzer)new CJKAnalyzer() : (Analyzer)new StandardAnalyzer();
+ IndexWriter writer = new IndexWriter( aIndexDir, analyzer, true );
+ if( !bExtensionMode )
+ System.out.println( "Lucene: Indexing to directory '" + aIndexDir + "'..." );
+ int nRet = indexDocs( writer, aModule, bExtensionMode, aCaptionFilesDir, aContentFilesDir );
+ if( nRet != -1 )
+ {
+ if( !bExtensionMode )
+ {
+ System.out.println();
+ System.out.println( "Optimizing ..." );
+ }
+ writer.optimize();
+ }
+ writer.close();
+
+ boolean bCfsFileOk = true;
+ if( bCfsName && !bExtensionMode && nRet != -1 )
+ {
+ String aCompleteCfsFileName = aDirToZipStr + File.separator + aIndexDirName + File.separator + aCfsName;
+ File aCfsFile = new File( aCompleteCfsFileName );
+ bCfsFileOk = aCfsFile.exists();
+ System.out.println( "Checking cfs file " + aCfsName+ ": " + (bCfsFileOk ? "Found" : "Not found") );
+ }
+
+ if( bExtensionMode )
+ {
+ if( !bSrcDir )
+ {
+ deleteRecursively( aCaptionFilesDir );
+ deleteRecursively( aContentFilesDir );
+ }
+ }
+ else
+ {
+ if( nRet == -1 )
+ deleteRecursively( aIndexDir );
+
+ if( bCfsFileOk )
+ System.out.println( "Zipping ..." );
+ File aDirToZipFile = new File( aDirToZipStr );
+ createZipFile( aDirToZipFile, aTargetZipFileStr );
+ deleteRecursively( aDirToZipFile );
+ }
+
+ if( !bCfsFileOk )
+ {
+ System.out.println( "cfs file check failed, terminating..." );
+ System.exit( -1 );
+ }
+
+ Date end = new Date();
+ if( !bExtensionMode )
+ System.out.println(end.getTime() - start.getTime() + " total milliseconds");
+ }
+ catch (IOException e)
+ {
+ if( bExtensionMode )
+ return;
+
+ System.out.println(" caught a " + e.getClass() +
+ "\n with message: " + e.getMessage());
+ System.exit( -1 );
+ }
+ }
+
+ private static int indexDocs(IndexWriter writer, String aModule, boolean bExtensionMode,
+ File aCaptionFilesDir, File aContentFilesDir) throws IOException
+ {
+ if( !aCaptionFilesDir.canRead() || !aCaptionFilesDir.isDirectory() )
+ {
+ if( !bExtensionMode )
+ System.out.println( "Not found: " + aCaptionFilesDir );
+ return -1;
+ }
+ if( !aContentFilesDir.canRead() || !aContentFilesDir.isDirectory() )
+ {
+ if( !bExtensionMode )
+ System.out.println( "Not found: " + aContentFilesDir );
+ return -1;
+ }
+
+ String[] aCaptionFiles = aCaptionFilesDir.list();
+ List aCaptionFilesList = Arrays.asList( aCaptionFiles );
+ HashSet aCaptionFilesHashSet = new HashSet( aCaptionFilesList );
+
+ String[] aContentFiles = aContentFilesDir.list();
+ List aContentFilesList = Arrays.asList( aContentFiles );
+ HashSet aContentFilesHashSet = new HashSet( aContentFilesList );
+
+ // Loop over caption files and find corresponding content file
+ if( !bExtensionMode )
+ System.out.println( "Indexing, adding files" );
+ int nCaptionFilesLen = aCaptionFiles.length;
+ for( int i = 0 ; i < nCaptionFilesLen ; i++ )
+ {
+ String aCaptionFileStr = aCaptionFiles[i];
+ File aCaptionFile = new File( aCaptionFilesDir, aCaptionFileStr );
+ File aContentFile = null;
+ if( aContentFilesHashSet.contains( aCaptionFileStr ) )
+ aContentFile = new File( aContentFilesDir, aCaptionFileStr );
+
+ if( !bExtensionMode )
+ System.out.print( "." );
+ writer.addDocument( HelpFileDocument.Document( aModule, aCaptionFile, aContentFile ) );
+ }
+
+ // Loop over content files to find remaining files not mapped to caption files
+ int nContentFilesLen = aContentFiles.length;
+ for( int i = 0 ; i < nContentFilesLen ; i++ )
+ {
+ String aContentFileStr = aContentFiles[i];
+ if( !aCaptionFilesHashSet.contains( aContentFileStr ) )
+ {
+ // Not already handled in caption files loop
+ File aCaptionFile = null;
+ File aContentFile = new File( aContentFilesDir, aContentFileStr );
+ if( !bExtensionMode )
+ System.out.print( "." );
+ writer.addDocument( HelpFileDocument.Document( aModule, aCaptionFile, aContentFile ) );
+ }
+ }
+ return 0;
+ }
+
+ public static void createZipFile( File aDirToZip, String aTargetZipFileStr )
+ throws FileNotFoundException, IOException
+ {
+ FileOutputStream fos = new FileOutputStream( aTargetZipFileStr );
+ ZipOutputStream zos = new ZipOutputStream( fos );
+
+ File[] aChildrenFiles = aDirToZip.listFiles();
+ int nFileCount = aChildrenFiles.length;
+ for( int i = 0 ; i < nFileCount ; i++ )
+ addToZipRecursively( zos, aChildrenFiles[i], null );
+
+ zos.close();
+ }
+
+ public static void addToZipRecursively( ZipOutputStream zos, File aFile, String aBasePath )
+ throws FileNotFoundException, IOException
+ {
+ if( aFile.isDirectory() )
+ {
+ String aDirName = aFile.getName();
+ if( aDirName.equalsIgnoreCase( "caption" ) || aDirName.equalsIgnoreCase( "content" ) )
+ return;
+
+ File[] aChildrenFiles = aFile.listFiles();
+ String aNewBasePath = "";
+ if( aBasePath != null )
+ aNewBasePath += aBasePath + File.separator;
+ aNewBasePath += aDirName;
+
+ int nFileCount = aChildrenFiles.length;
+ for( int i = 0 ; i < nFileCount ; i++ )
+ addToZipRecursively( zos, aChildrenFiles[i], aNewBasePath );
+
+ return;
+ }
+
+ // No directory
+ // read contents of file we are going to put in the zip
+ int fileLength = (int) aFile.length();
+ FileInputStream fis = new FileInputStream( aFile );
+ byte[] wholeFile = new byte[fileLength];
+ int bytesRead = fis.read( wholeFile, 0, fileLength );
+ fis.close();
+
+ String aFileName = aFile.getName();
+ String aEntryName = "";
+ if( aBasePath != null )
+ aEntryName += aBasePath + "/";
+ aEntryName += aFileName;
+ ZipEntry aZipEntry = new ZipEntry( aEntryName );
+ aZipEntry.setTime( aFile.lastModified() );
+ aZipEntry.setSize( fileLength );
+
+ int nMethod = ( aFileName.toLowerCase().endsWith( ".jar" ) )
+ ? ZipEntry.STORED : ZipEntry.DEFLATED;
+ aZipEntry.setMethod( nMethod );
+
+ CRC32 tempCRC = new CRC32();
+ tempCRC.update( wholeFile, 0, wholeFile.length );
+ aZipEntry.setCrc( tempCRC.getValue() );
+
+ // write the contents into the zip element
+ zos.putNextEntry( aZipEntry );
+ zos.write( wholeFile, 0, fileLength );
+ zos.closeEntry();
+ }
+
+ static public boolean deleteRecursively( File aFile )
+ {
+ if( aFile.isDirectory() )
+ {
+ File[] aChildrenFiles = aFile.listFiles();
+ int nFileCount = aChildrenFiles.length;
+ for( int i = 0 ; i < nFileCount ; i++ )
+ {
+ File aChildrenFile = aChildrenFiles[i];
+ boolean bSuccess = deleteRecursively( aChildrenFile );
+ if( !bSuccess )
+ return false;
+ }
+ }
+
+ return aFile.delete();
+ }
+}
+
diff --git a/transex3/source/help/HelpLinker.cxx b/transex3/source/help/HelpLinker.cxx
new file mode 100644
index 000000000000..8acb129b21fb
--- /dev/null
+++ b/transex3/source/help/HelpLinker.cxx
@@ -0,0 +1,1161 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: HelpLinker.cxx,v $
+ * $Revision: 1.16 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "HelpCompiler.hxx"
+
+#include <map>
+
+#include <string.h>
+#include <limits.h>
+
+#include <libxslt/xslt.h>
+#include <libxslt/transform.h>
+#include <libxslt/xsltutils.h>
+#include <libxslt/functions.h>
+#include <libxslt/extensions.h>
+
+#include <sal/types.h>
+#include <osl/time.h>
+#include <rtl/bootstrap.hxx>
+
+#ifdef SYSTEM_EXPAT
+#include <expat.h>
+#else
+#include <expat/xmlparse.h>
+#endif
+
+#define DBHELP_ONLY
+
+
+class IndexerPreProcessor
+{
+private:
+ std::string m_aModuleName;
+ fs::path m_fsIndexBaseDir;
+ fs::path m_fsCaptionFilesDirName;
+ fs::path m_fsContentFilesDirName;
+
+ xsltStylesheetPtr m_xsltStylesheetPtrCaption;
+ xsltStylesheetPtr m_xsltStylesheetPtrContent;
+
+public:
+ IndexerPreProcessor( const std::string& aModuleName, const fs::path& fsIndexBaseDir,
+ const fs::path& idxCaptionStylesheet, const fs::path& idxContentStylesheet );
+ ~IndexerPreProcessor();
+
+ void processDocument( xmlDocPtr doc, const std::string& EncodedDocPath );
+};
+
+IndexerPreProcessor::IndexerPreProcessor
+ ( const std::string& aModuleName, const fs::path& fsIndexBaseDir,
+ const fs::path& idxCaptionStylesheet, const fs::path& idxContentStylesheet )
+ : m_aModuleName( aModuleName )
+ , m_fsIndexBaseDir( fsIndexBaseDir )
+{
+ m_fsCaptionFilesDirName = fsIndexBaseDir / "caption";
+ fs::create_directory( m_fsCaptionFilesDirName );
+
+ m_fsContentFilesDirName = fsIndexBaseDir / "content";
+ fs::create_directory( m_fsContentFilesDirName );
+
+ m_xsltStylesheetPtrCaption = xsltParseStylesheetFile
+ ((const xmlChar *)idxCaptionStylesheet.native_file_string().c_str());
+ m_xsltStylesheetPtrContent = xsltParseStylesheetFile
+ ((const xmlChar *)idxContentStylesheet.native_file_string().c_str());
+}
+
+IndexerPreProcessor::~IndexerPreProcessor()
+{
+ if( m_xsltStylesheetPtrCaption )
+ xsltFreeStylesheet( m_xsltStylesheetPtrCaption );
+ if( m_xsltStylesheetPtrContent )
+ xsltFreeStylesheet( m_xsltStylesheetPtrContent );
+}
+
+
+std::string getEncodedPath( const std::string& Path )
+{
+ rtl::OString aOStr_Path( Path.c_str() );
+ rtl::OUString aOUStr_Path( rtl::OStringToOUString
+ ( aOStr_Path, fs::getThreadTextEncoding() ) );
+ rtl::OUString aPathURL;
+ osl::File::getFileURLFromSystemPath( aOUStr_Path, aPathURL );
+ rtl::OString aOStr_PathURL( rtl::OUStringToOString
+ ( aPathURL, fs::getThreadTextEncoding() ) );
+ std::string aStdStr_PathURL( aOStr_PathURL.getStr() );
+ return aStdStr_PathURL;
+}
+
+void IndexerPreProcessor::processDocument
+ ( xmlDocPtr doc, const std::string &EncodedDocPath )
+{
+ std::string aStdStr_EncodedDocPathURL = getEncodedPath( EncodedDocPath );
+
+ xmlDocPtr resCaption = xsltApplyStylesheet( m_xsltStylesheetPtrCaption, doc, NULL );
+ xmlNodePtr pResNodeCaption = resCaption->xmlChildrenNode;
+ if( pResNodeCaption )
+ {
+ fs::path fsCaptionPureTextFile_docURL = m_fsCaptionFilesDirName / aStdStr_EncodedDocPathURL;
+ std::string aCaptionPureTextFileStr_docURL = fsCaptionPureTextFile_docURL.native_file_string();
+ FILE* pFile_docURL = fopen( aCaptionPureTextFileStr_docURL.c_str(), "w" );
+ if( pFile_docURL )
+ {
+ fprintf( pFile_docURL, "%s\n", pResNodeCaption->content );
+ fclose( pFile_docURL );
+ }
+ }
+ xmlFreeDoc(resCaption);
+
+ xmlDocPtr resContent = xsltApplyStylesheet( m_xsltStylesheetPtrContent, doc, NULL );
+ xmlNodePtr pResNodeContent = resContent->xmlChildrenNode;
+ if( pResNodeContent )
+ {
+ fs::path fsContentPureTextFile_docURL = m_fsContentFilesDirName / aStdStr_EncodedDocPathURL;
+ std::string aContentPureTextFileStr_docURL = fsContentPureTextFile_docURL.native_file_string();
+ FILE* pFile_docURL = fopen( aContentPureTextFileStr_docURL.c_str(), "w" );
+ if( pFile_docURL )
+ {
+ fprintf( pFile_docURL, "%s\n", pResNodeContent->content );
+ fclose( pFile_docURL );
+ }
+ }
+ xmlFreeDoc(resContent);
+}
+
+struct Data
+{
+ std::vector<std::string> _idList;
+ typedef std::vector<std::string>::const_iterator cIter;
+
+ void append(const std::string &id)
+ {
+ _idList.push_back(id);
+ }
+
+ std::string getString() const
+ {
+ std::string ret;
+ cIter aEnd = _idList.end();
+ for (cIter aIter = _idList.begin(); aIter != aEnd; ++aIter)
+ ret += *aIter + ";";
+ return ret;
+ }
+};
+
+void writeKeyValue_DBHelp( FILE* pFile, const std::string& aKeyStr, const std::string& aValueStr )
+{
+ if( pFile == NULL )
+ return;
+ char cLF = 10;
+ int nKeyLen = aKeyStr.length();
+ int nValueLen = aValueStr.length();
+ fprintf( pFile, "%x ", nKeyLen );
+ if( nKeyLen > 0 )
+ fwrite( aKeyStr.c_str(), 1, nKeyLen, pFile );
+ fprintf( pFile, " %x ", nValueLen );
+ if( nValueLen > 0 )
+ fwrite( aValueStr.c_str(), 1, nValueLen, pFile );
+ fprintf( pFile, "%c", cLF );
+}
+
+class HelpKeyword
+{
+private:
+ typedef std::hash_map<std::string, Data, pref_hash> DataHashtable;
+ DataHashtable _hash;
+
+public:
+ void insert(const std::string &key, const std::string &id)
+ {
+ Data &data = _hash[key];
+ data.append(id);
+ }
+
+ void dump(DB* table)
+ {
+ DataHashtable::const_iterator aEnd = _hash.end();
+ for (DataHashtable::const_iterator aIter = _hash.begin(); aIter != aEnd; ++aIter)
+ {
+ const std::string &keystr = aIter->first;
+ DBT key;
+ memset(&key, 0, sizeof(key));
+ key.data = const_cast<char*>(keystr.c_str());
+ key.size = keystr.length();
+
+ const Data &data = aIter->second;
+ std::string str = data.getString();
+ DBT value;
+ memset(&value, 0, sizeof(value));
+ value.data = const_cast<char*>(str.c_str());
+ value.size = str.length();
+
+ table->put(table, NULL, &key, &value, 0);
+ }
+ }
+
+ void dump_DBHelp( const std::string& rFileName )
+ {
+ FILE* pFile = fopen( rFileName.c_str(), "wb" );
+ if( pFile == NULL )
+ return;
+
+ DataHashtable::const_iterator aEnd = _hash.end();
+ for (DataHashtable::const_iterator aIter = _hash.begin(); aIter != aEnd; ++aIter)
+ writeKeyValue_DBHelp( pFile, aIter->first, aIter->second.getString() );
+
+ fclose( pFile );
+ }
+};
+
+class HelpLinker
+{
+public:
+ void main(std::vector<std::string> &args, std::string* pExtensionPath = NULL )
+ throw( HelpProcessingException );
+
+ HelpLinker()
+ : init(true)
+ , m_pIndexerPreProcessor(NULL)
+ {}
+ ~HelpLinker()
+ { delete m_pIndexerPreProcessor; }
+
+private:
+ int locCount, totCount;
+ Stringtable additionalFiles;
+ HashSet helpFiles;
+ fs::path sourceRoot;
+ fs::path embeddStylesheet;
+ fs::path idxCaptionStylesheet;
+ fs::path idxContentStylesheet;
+ fs::path zipdir;
+ fs::path outputFile;
+ std::string module;
+ std::string lang;
+ std::string hid;
+ std::string extensionPath;
+ bool bExtensionMode;
+ fs::path indexDirName;
+ Stringtable hidlistTranslation;
+ fs::path indexDirParentName;
+ bool init;
+ IndexerPreProcessor* m_pIndexerPreProcessor;
+ void initIndexerPreProcessor();
+ void link() throw( HelpProcessingException );
+ void addBookmark( DB* dbBase, FILE* pFile_DBHelp, std::string thishid,
+ const std::string& fileB, const std::string& anchorB,
+ const std::string& jarfileB, const std::string& titleB );
+#if 0
+ /**
+ * @param outputFile
+ * @param module
+ * @param lang
+ * @param hid
+ * @param helpFiles
+ * @param additionalFiles
+ */
+
+ private HelpURLStreamHandlerFactory urlHandler = null;
+#endif
+};
+
+namespace URLEncoder
+{
+ static std::string encode(const std::string &rIn)
+ {
+ const char *good = "!$&'()*+,-.=@_";
+ static const char hex[17] = "0123456789ABCDEF";
+
+ std::string result;
+ for (size_t i=0; i < rIn.length(); ++i)
+ {
+ unsigned char c = rIn[i];
+ if (isalnum (c) || strchr (good, c))
+ result += c;
+ else {
+ result += '%';
+ result += hex[c >> 4];
+ result += hex[c & 0xf];
+ }
+ }
+ return result;
+ }
+}
+
+void HelpLinker::addBookmark( DB* dbBase, FILE* pFile_DBHelp, std::string thishid,
+ const std::string& fileB, const std::string& anchorB,
+ const std::string& jarfileB, const std::string& titleB)
+{
+ HCDBG(std::cerr << "HelpLinker::addBookmark " << thishid << " " <<
+ fileB << " " << anchorB << " " << jarfileB << " " << titleB << std::endl);
+
+ std::string temp = thishid;
+ std::transform (temp.begin(), temp.end(), temp.begin(), toupper);
+ std::replace(temp.begin(), temp.end(), ':', '_');
+ const std::string& translatedHid = hidlistTranslation[temp];
+ if (!translatedHid.empty())
+ thishid = translatedHid;
+
+ thishid = URLEncoder::encode(thishid);
+
+ DBT key;
+ memset(&key, 0, sizeof(key));
+ key.data = const_cast<char*>(thishid.c_str());
+ key.size = thishid.length();
+
+ int fileLen = fileB.length();
+ if (!anchorB.empty())
+ fileLen += (1 + anchorB.length());
+ int dataLen = 1 + fileLen + 1 + jarfileB.length() + 1 + titleB.length();
+
+ std::vector<unsigned char> dataB(dataLen);
+ size_t i = 0;
+ dataB[i++] = static_cast<unsigned char>(fileLen);
+ for (size_t j = 0; j < fileB.length(); ++j)
+ dataB[i++] = fileB[j];
+ if (!anchorB.empty())
+ {
+ dataB[i++] = '#';
+ for (size_t j = 0; j < anchorB.length(); ++j)
+ dataB[i++] = anchorB[j];
+ }
+ dataB[i++] = static_cast<unsigned char>(jarfileB.length());
+ for (size_t j = 0; j < jarfileB.length(); ++j)
+ dataB[i++] = jarfileB[j];
+
+ dataB[i++] = static_cast<unsigned char>(titleB.length());
+ for (size_t j = 0; j < titleB.length(); ++j)
+ dataB[i++] = titleB[j];
+
+ DBT data;
+ memset(&data, 0, sizeof(data));
+ data.data = &dataB[0];
+ data.size = dataB.size();
+
+ if( dbBase != NULL )
+ dbBase->put(dbBase, NULL, &key, &data, 0);
+
+ if( pFile_DBHelp != NULL )
+ {
+ std::string aValueStr( dataB.begin(), dataB.end() );
+ writeKeyValue_DBHelp( pFile_DBHelp, thishid, aValueStr );
+ }
+}
+
+void HelpLinker::initIndexerPreProcessor()
+{
+ if( m_pIndexerPreProcessor )
+ delete m_pIndexerPreProcessor;
+ std::string mod = module;
+ std::transform (mod.begin(), mod.end(), mod.begin(), tolower);
+ m_pIndexerPreProcessor = new IndexerPreProcessor( mod, indexDirParentName,
+ idxCaptionStylesheet, idxContentStylesheet );
+}
+
+/**
+*
+*/
+void HelpLinker::link() throw( HelpProcessingException )
+{
+ bool bIndexForExtension = true;
+
+ if( bExtensionMode )
+ {
+ indexDirParentName = sourceRoot;
+ }
+ else
+ {
+ indexDirParentName = zipdir;
+ fs::create_directory(indexDirParentName);
+ }
+
+#ifdef CMC_DEBUG
+ std::cerr << "will not delete tmpdir of " << indexDirParentName.native_file_string().c_str() << std::endl;
+#endif
+
+ std::string mod = module;
+ std::transform (mod.begin(), mod.end(), mod.begin(), tolower);
+
+ // do the work here
+ // continue with introduction of the overall process thing into the
+ // here all hzip files will be worked on
+ std::string appl = mod;
+ if (appl[0] == 's')
+ appl = appl.substr(1);
+
+ bool bUse_ = true;
+#ifdef DBHELP_ONLY
+ if( !bExtensionMode )
+ bUse_ = false;
+#endif
+
+ DB* helpText(0);
+#ifndef DBHELP_ONLY
+ fs::path helpTextFileName(indexDirParentName / (mod + ".ht"));
+ db_create(&helpText,0,0);
+ helpText->open(helpText, NULL, helpTextFileName.native_file_string().c_str(), NULL, DB_BTREE,
+ DB_CREATE | DB_TRUNCATE, 0644);
+#endif
+
+ fs::path helpTextFileName_DBHelp(indexDirParentName / (mod + (bUse_ ? ".ht_" : ".ht")));
+ FILE* pFileHelpText_DBHelp = fopen
+ ( helpTextFileName_DBHelp.native_file_string().c_str(), "wb" );
+
+ DB* dbBase(0);
+#ifndef DBHELP_ONLY
+ fs::path dbBaseFileName(indexDirParentName / (mod + ".db"));
+ db_create(&dbBase,0,0);
+ dbBase->open(dbBase, NULL, dbBaseFileName.native_file_string().c_str(), NULL, DB_BTREE,
+ DB_CREATE | DB_TRUNCATE, 0644);
+#endif
+
+ fs::path dbBaseFileName_DBHelp(indexDirParentName / (mod + (bUse_ ? ".db_" : ".db")));
+ FILE* pFileDbBase_DBHelp = fopen
+ ( dbBaseFileName_DBHelp.native_file_string().c_str(), "wb" );
+
+#ifndef DBHELP_ONLY
+ DB* keyWord(0);
+ fs::path keyWordFileName(indexDirParentName / (mod + ".key"));
+ db_create(&keyWord,0,0);
+ keyWord->open(keyWord, NULL, keyWordFileName.native_file_string().c_str(), NULL, DB_BTREE,
+ DB_CREATE | DB_TRUNCATE, 0644);
+#endif
+
+ fs::path keyWordFileName_DBHelp(indexDirParentName / (mod + (bUse_ ? ".key_" : ".key")));
+
+ HelpKeyword helpKeyword;
+
+ // catch HelpProcessingException to avoid locking data bases
+ try
+ {
+
+ std::ifstream fileReader(hid.c_str());
+ while (fileReader)
+ {
+ std::string key;
+ fileReader >> key;
+ std::transform (key.begin(), key.end(), key.begin(), toupper);
+ std::replace(key.begin(), key.end(), ':', '_');
+ std::string data;
+ fileReader >> data;
+ if (!key.empty() && !data.empty())
+ hidlistTranslation[key] = data;
+ }
+ fileReader.close();
+
+ // lastly, initialize the indexBuilder
+ if ( (!bExtensionMode || bIndexForExtension) && !helpFiles.empty())
+ initIndexerPreProcessor();
+
+ if( !bExtensionMode )
+ {
+#ifndef OS2 // YD @TODO@ crashes libc runtime :-(
+ std::cout << "Making " << outputFile.native_file_string() <<
+ " from " << helpFiles.size() << " input files" << std::endl;
+#endif
+ }
+
+ // here we start our loop over the hzip files.
+ HashSet::iterator end = helpFiles.end();
+ for (HashSet::iterator iter = helpFiles.begin(); iter != end; ++iter)
+ {
+ if( !bExtensionMode )
+ {
+ std::cout << ".";
+ std::cout.flush();
+ }
+
+ // process one file
+ // streamTable contains the streams in the hzip file
+ StreamTable streamTable;
+ const std::string &xhpFileName = *iter;
+
+ if (!bExtensionMode && xhpFileName.rfind(".xhp") != xhpFileName.length()-4)
+ {
+ // only work on .xhp - files
+ std::cerr <<
+ "ERROR: input list entry '"
+ << xhpFileName
+ << "' has the wrong extension (only files with extension .xhp "
+ << "are accepted)";
+ continue;
+ }
+
+ fs::path langsourceRoot(sourceRoot);
+ fs::path xhpFile;
+
+ if( bExtensionMode )
+ {
+ // langsourceRoot == sourceRoot for extensions
+ std::string xhpFileNameComplete( extensionPath );
+ xhpFileNameComplete.append( '/' + xhpFileName );
+ xhpFile = fs::path( xhpFileNameComplete );
+ }
+ else
+ {
+ langsourceRoot.append('/' + lang + '/');
+ xhpFile = fs::path(xhpFileName, fs::native);
+ }
+
+ HelpCompiler hc( streamTable, xhpFile, langsourceRoot,
+ embeddStylesheet, module, lang, bExtensionMode );
+
+ HCDBG(std::cerr << "before compile of " << xhpFileName << std::endl);
+ bool success = hc.compile();
+ HCDBG(std::cerr << "after compile of " << xhpFileName << std::endl);
+
+ if (!success && !bExtensionMode)
+ {
+ std::stringstream aStrStream;
+ aStrStream <<
+ "\nERROR: compiling help particle '"
+ << xhpFileName
+ << "' for language '"
+ << lang
+ << "' failed!";
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ const std::string documentBaseId = streamTable.document_id;
+ std::string documentPath = streamTable.document_path;
+ if (documentPath.find("/") == 0)
+ documentPath = documentPath.substr(1);
+
+ std::string documentJarfile = streamTable.document_module + ".jar";
+
+ std::string documentTitle = streamTable.document_title;
+ if (documentTitle.empty())
+ documentTitle = "<notitle>";
+
+#if 0
+ std::cout << "for " << xhpFileName << " documentBaseId is " << documentBaseId << "\n";
+ std::cout << "for " << xhpFileName << " documentPath is " << documentPath << "\n";
+ std::cout << "for " << xhpFileName << " documentJarfile is " << documentJarfile << "\n";
+ std::cout << "for " << xhpFileName << " documentPath is " << documentTitle << "\n";
+#endif
+
+ const std::string& fileB = documentPath;
+ const std::string& jarfileB = documentJarfile;
+ std::string& titleB = documentTitle;
+
+ // add once this as its own id.
+ addBookmark(dbBase, pFileDbBase_DBHelp, documentPath, fileB, std::string(), jarfileB, titleB);
+
+ // first the database *.db
+ // ByteArrayInputStream bais = null;
+ // ObjectInputStream ois = null;
+
+ const HashSet *hidlist = streamTable.appl_hidlist;
+ if (!hidlist)
+ hidlist = streamTable.default_hidlist;
+ if (hidlist && !hidlist->empty())
+ {
+ // now iterate over all elements of the hidlist
+ HashSet::const_iterator aEnd = hidlist->end();
+ for (HashSet::const_iterator hidListIter = hidlist->begin();
+ hidListIter != aEnd; ++hidListIter)
+ {
+ std::string thishid = *hidListIter;
+
+ std::string anchorB;
+ size_t index = thishid.rfind('#');
+ if (index != std::string::npos)
+ {
+ anchorB = thishid.substr(1 + index);
+ thishid = thishid.substr(0, index);
+ }
+ addBookmark(dbBase, pFileDbBase_DBHelp, thishid, fileB, anchorB, jarfileB, titleB);
+ }
+ }
+
+ // now the keywords
+ const Hashtable *anchorToLL = streamTable.appl_keywords;
+ if (!anchorToLL)
+ anchorToLL = streamTable.default_keywords;
+ if (anchorToLL && !anchorToLL->empty())
+ {
+ std::string fakedHid = URLEncoder::encode(documentPath);
+ Hashtable::const_iterator aEnd = anchorToLL->end();
+ for (Hashtable::const_iterator enumer = anchorToLL->begin();
+ enumer != aEnd; ++enumer)
+ {
+ const std::string &anchor = enumer->first;
+ addBookmark(dbBase, pFileDbBase_DBHelp, documentPath, fileB,
+ anchor, jarfileB, titleB);
+ std::string totalId = fakedHid + "#" + anchor;
+ // std::cerr << hzipFileName << std::endl;
+ const LinkedList& ll = enumer->second;
+ LinkedList::const_iterator aOtherEnd = ll.end();
+ for (LinkedList::const_iterator llIter = ll.begin();
+ llIter != aOtherEnd; ++llIter)
+ {
+ helpKeyword.insert(*llIter, totalId);
+ }
+ }
+
+ }
+
+ // and last the helptexts
+ const Stringtable *helpTextHash = streamTable.appl_helptexts;
+ if (!helpTextHash)
+ helpTextHash = streamTable.default_helptexts;
+ if (helpTextHash && !helpTextHash->empty())
+ {
+ Stringtable::const_iterator aEnd = helpTextHash->end();
+ for (Stringtable::const_iterator helpTextIter = helpTextHash->begin();
+ helpTextIter != aEnd; ++helpTextIter)
+ {
+ std::string helpTextId = helpTextIter->first;
+ const std::string& helpTextText = helpTextIter->second;
+
+ std::string temp = helpTextId;
+ std::transform (temp.begin(), temp.end(), temp.begin(), toupper);
+ std::replace(temp.begin(), temp.end(), ':', '_');
+
+ const std::string& tHid = hidlistTranslation[temp];
+ if (!tHid.empty())
+ helpTextId = tHid;
+ helpTextId = URLEncoder::encode(helpTextId);
+
+ DBT keyDbt;
+ memset(&keyDbt, 0, sizeof(keyDbt));
+ keyDbt.data = const_cast<char*>(helpTextId.c_str());
+ keyDbt.size = helpTextId.length();
+
+ DBT textDbt;
+ memset(&textDbt, 0, sizeof(textDbt));
+ textDbt.data = const_cast<char*>(helpTextText.c_str());
+ textDbt.size = helpTextText.length();
+
+ if( helpText != NULL )
+ helpText->put(helpText, NULL, &keyDbt, &textDbt, 0);
+
+ if( pFileHelpText_DBHelp != NULL )
+ writeKeyValue_DBHelp( pFileHelpText_DBHelp, helpTextId, helpTextText );
+ }
+ }
+
+ //IndexerPreProcessor
+ if( !bExtensionMode || bIndexForExtension )
+ {
+ // now the indexing
+ xmlDocPtr document = streamTable.appl_doc;
+ if (!document)
+ document = streamTable.default_doc;
+ if (document)
+ {
+ std::string temp = module;
+ std::transform (temp.begin(), temp.end(), temp.begin(), tolower);
+ m_pIndexerPreProcessor->processDocument(document, URLEncoder::encode(documentPath) );
+ }
+ }
+
+ } // while loop over hzip files ending
+ if( !bExtensionMode )
+ std::cout << std::endl;
+
+ } // try
+ catch( HelpProcessingException& )
+ {
+ // catch HelpProcessingException to avoid locking data bases
+#ifndef DBHELP_ONLY
+ helpText->close(helpText, 0);
+ dbBase->close(dbBase, 0);
+ keyWord->close(keyWord, 0);
+#endif
+ if( pFileHelpText_DBHelp != NULL )
+ fclose( pFileHelpText_DBHelp );
+ if( pFileDbBase_DBHelp != NULL )
+ fclose( pFileDbBase_DBHelp );
+ throw;
+ }
+
+#ifndef DBHELP_ONLY
+ helpText->close(helpText, 0);
+ dbBase->close(dbBase, 0);
+ helpKeyword.dump(keyWord);
+ keyWord->close(keyWord, 0);
+#endif
+ if( pFileHelpText_DBHelp != NULL )
+ fclose( pFileHelpText_DBHelp );
+ if( pFileDbBase_DBHelp != NULL )
+ fclose( pFileDbBase_DBHelp );
+
+ helpKeyword.dump_DBHelp( keyWordFileName_DBHelp.native_file_string() );
+
+ if( !bExtensionMode )
+ {
+ // New index
+ Stringtable::iterator aEnd = additionalFiles.end();
+ for (Stringtable::iterator enumer = additionalFiles.begin(); enumer != aEnd;
+ ++enumer)
+ {
+ const std::string &additionalFileName = enumer->second;
+ const std::string &additionalFileKey = enumer->first;
+
+ fs::path fsAdditionalFileName( additionalFileName, fs::native );
+ std::string aNativeStr = fsAdditionalFileName.native_file_string();
+ const char* pStr = aNativeStr.c_str();
+ std::cerr << pStr;
+
+ fs::path fsTargetName( indexDirParentName / additionalFileKey );
+
+ fs::copy( fsAdditionalFileName, fsTargetName );
+ }
+ }
+
+/*
+ /////////////////////////////////////////////////////////////////////////
+ /// remove temprary directory for index creation
+ /////////////////////////////////////////////////////////////////////////
+#ifndef CMC_DEBUG
+ if( !bExtensionMode )
+ fs::remove_all( indexDirParentName );
+#endif
+*/
+}
+
+
+void HelpLinker::main(std::vector<std::string> &args, std::string* pExtensionPath)
+ throw( HelpProcessingException )
+{
+ rtl::OUString aOfficeHelpPath;
+
+ bExtensionMode = false;
+ if( pExtensionPath && pExtensionPath->length() > 0 )
+ {
+ helpFiles.clear();
+ bExtensionMode = true;
+ extensionPath = *pExtensionPath;
+ sourceRoot = fs::path(extensionPath);
+
+ aOfficeHelpPath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/help") );
+ rtl::Bootstrap::expandMacros( aOfficeHelpPath );
+ }
+ if (args.size() > 0 && args[0][0] == '@')
+ {
+ std::vector<std::string> stringList;
+ std::string strBuf;
+ std::ifstream fileReader(args[0].substr(1).c_str());
+
+ while (fileReader)
+ {
+ std::string token;
+ fileReader >> token;
+ if (!token.empty())
+ stringList.push_back(token);
+ }
+ fileReader.close();
+
+ args = stringList;
+ }
+
+ size_t i = 0;
+
+ while (i < args.size())
+ {
+ if (args[i].compare("-src") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "sourceroot missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ if( !bExtensionMode )
+ sourceRoot = fs::path(args[i], fs::native);
+ }
+ else if (args[i].compare("-sty") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "embeddingStylesheet missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ embeddStylesheet = fs::path(args[i], fs::native);
+ }
+ else if (args[i].compare("-zipdir") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "idxtemp missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ zipdir = fs::path(args[i], fs::native);
+ }
+ else if (args[i].compare("-idxcaption") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "idxcaption stylesheet missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ idxCaptionStylesheet = fs::path(args[i], fs::native);
+ }
+ else if (args[i].compare("-idxcontent") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "idxcontent stylesheet missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ idxContentStylesheet = fs::path(args[i], fs::native);
+ }
+ else if (args[i].compare("-o") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "outputfilename missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ outputFile = fs::path(args[i], fs::native);
+ }
+ else if (args[i].compare("-mod") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "module name missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ module = args[i];
+ }
+ else if (args[i].compare("-lang") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "language name missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ lang = args[i];
+ }
+ else if (args[i].compare("-hid") == 0)
+ {
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "hid list missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ hid = args[i];
+ }
+ else if (args[i].compare("-add") == 0)
+ {
+ std::string addFile, addFileUnderPath;
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "pathname missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ addFileUnderPath = args[i];
+ ++i;
+ if (i >= args.size())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "pathname missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ addFile = args[i];
+ if (!addFileUnderPath.empty() && !addFile.empty())
+ additionalFiles[addFileUnderPath] = addFile;
+ }
+ else
+ helpFiles.push_back(args[i]);
+ ++i;
+ }
+
+ if (!bExtensionMode && zipdir.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "no index dir given" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ if (!bExtensionMode && idxCaptionStylesheet.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "no index caption stylesheet given" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ else if ( bExtensionMode )
+ {
+ rtl::OUString aIdxCaptionPathFileURL( aOfficeHelpPath );
+ aIdxCaptionPathFileURL += rtl::OUString::createFromAscii( "/idxcaption.xsl" );
+
+ rtl::OString aOStr_IdxCaptionPathFileURL( rtl::OUStringToOString
+ ( aIdxCaptionPathFileURL, fs::getThreadTextEncoding() ) );
+ std::string aStdStr_IdxCaptionPathFileURL( aOStr_IdxCaptionPathFileURL.getStr() );
+
+ idxCaptionStylesheet = fs::path( aStdStr_IdxCaptionPathFileURL );
+ }
+ if (!bExtensionMode && idxContentStylesheet.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "no index content stylesheet given" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ else if ( bExtensionMode )
+ {
+ rtl::OUString aIdxContentPathFileURL( aOfficeHelpPath );
+ aIdxContentPathFileURL += rtl::OUString::createFromAscii( "/idxcontent.xsl" );
+
+ rtl::OString aOStr_IdxContentPathFileURL( rtl::OUStringToOString
+ ( aIdxContentPathFileURL, fs::getThreadTextEncoding() ) );
+ std::string aStdStr_IdxContentPathFileURL( aOStr_IdxContentPathFileURL.getStr() );
+
+ idxContentStylesheet = fs::path( aStdStr_IdxContentPathFileURL );
+ }
+ if (!bExtensionMode && embeddStylesheet.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "no embedding resolving file given" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ if (sourceRoot.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "no sourceroot given" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ if (!bExtensionMode && outputFile.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "no output file given" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ if (module.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "module missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ if (!bExtensionMode && lang.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "language missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+ if (!bExtensionMode && hid.empty())
+ {
+ std::stringstream aStrStream;
+ aStrStream << "hid list missing" << std::endl;
+ throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() );
+ }
+
+ link();
+}
+
+int main(int argc, char**argv)
+{
+ sal_uInt32 starttime = osl_getGlobalTimer();
+ std::vector<std::string> args;
+ for (int i = 1; i < argc; ++i)
+ args.push_back(std::string(argv[i]));
+ try
+ {
+ HelpLinker* pHelpLinker = new HelpLinker();
+ pHelpLinker->main( args );
+ delete pHelpLinker;
+ }
+ catch( const HelpProcessingException& e )
+ {
+ std::cerr << e.m_aErrorMsg;
+ exit(1);
+ }
+ sal_uInt32 endtime = osl_getGlobalTimer();
+#ifndef OS2 // YD @TODO@ crashes libc runtime :-(
+ std::cout << "time taken was " << (endtime-starttime)/1000.0 << " seconds" << std::endl;
+#endif
+ return 0;
+}
+
+// Variable to set an exception in "C" StructuredXMLErrorFunction
+static const HelpProcessingException* GpXMLParsingException = NULL;
+
+extern "C" void StructuredXMLErrorFunction(void *userData, xmlErrorPtr error)
+{
+ (void)userData;
+ (void)error;
+
+ std::string aErrorMsg = error->message;
+ std::string aXMLParsingFile;
+ if( error->file != NULL )
+ aXMLParsingFile = error->file;
+ int nXMLParsingLine = error->line;
+ HelpProcessingException* pException = new HelpProcessingException( aErrorMsg, aXMLParsingFile, nXMLParsingLine );
+ GpXMLParsingException = pException;
+
+ // Reset error handler
+ xmlSetStructuredErrorFunc( NULL, NULL );
+}
+
+HelpProcessingErrorInfo& HelpProcessingErrorInfo::operator=( const struct HelpProcessingException& e )
+{
+ m_eErrorClass = e.m_eErrorClass;
+ rtl::OString tmpErrorMsg( e.m_aErrorMsg.c_str() );
+ m_aErrorMsg = rtl::OStringToOUString( tmpErrorMsg, fs::getThreadTextEncoding() );
+ rtl::OString tmpXMLParsingFile( e.m_aXMLParsingFile.c_str() );
+ m_aXMLParsingFile = rtl::OStringToOUString( tmpXMLParsingFile, fs::getThreadTextEncoding() );
+ m_nXMLParsingLine = e.m_nXMLParsingLine;
+ return *this;
+}
+
+
+// Returns true in case of success, false in case of error
+HELPLINKER_DLLPUBLIC bool compileExtensionHelp
+(
+ const rtl::OUString& aExtensionName,
+ const rtl::OUString& aExtensionLanguageRoot,
+ sal_Int32 nXhpFileCount, const rtl::OUString* pXhpFiles,
+ HelpProcessingErrorInfo& o_rHelpProcessingErrorInfo
+)
+{
+ bool bSuccess = true;
+
+ sal_Int32 argc = nXhpFileCount + 3;
+ const char** argv = new const char*[argc];
+ argv[0] = "";
+ argv[1] = "-mod";
+ rtl::OString aOExtensionName = rtl::OUStringToOString( aExtensionName, fs::getThreadTextEncoding() );
+ argv[2] = aOExtensionName.getStr();
+
+ for( sal_Int32 iXhp = 0 ; iXhp < nXhpFileCount ; ++iXhp )
+ {
+ rtl::OUString aXhpFile = pXhpFiles[iXhp];
+
+ rtl::OString aOXhpFile = rtl::OUStringToOString( aXhpFile, fs::getThreadTextEncoding() );
+ char* pArgStr = new char[aOXhpFile.getLength() + 1];
+ strcpy( pArgStr, aOXhpFile.getStr() );
+ argv[iXhp + 3] = pArgStr;
+ }
+
+ std::vector<std::string> args;
+ for( sal_Int32 i = 1; i < argc; ++i )
+ args.push_back(std::string( argv[i]) );
+
+ for( sal_Int32 iXhp = 0 ; iXhp < nXhpFileCount ; ++iXhp )
+ delete argv[iXhp + 3];
+ delete[] argv;
+
+ rtl::OString aOExtensionLanguageRoot = rtl::OUStringToOString( aExtensionLanguageRoot, fs::getThreadTextEncoding() );
+ const char* pExtensionPath = aOExtensionLanguageRoot.getStr();
+ std::string aStdStrExtensionPath = pExtensionPath;
+
+ // Set error handler
+ xmlSetStructuredErrorFunc( NULL, (xmlStructuredErrorFunc)StructuredXMLErrorFunction );
+ try
+ {
+ HelpLinker* pHelpLinker = new HelpLinker();
+ pHelpLinker->main( args,&aStdStrExtensionPath );
+ delete pHelpLinker;
+ }
+ catch( const HelpProcessingException& e )
+ {
+ if( GpXMLParsingException != NULL )
+ {
+ o_rHelpProcessingErrorInfo = *GpXMLParsingException;
+ delete GpXMLParsingException;
+ GpXMLParsingException = NULL;
+ }
+ else
+ {
+ o_rHelpProcessingErrorInfo = e;
+ }
+ bSuccess = false;
+ }
+ // Reset error handler
+ xmlSetStructuredErrorFunc( NULL, NULL );
+
+ // i83624: Tree files
+ ::rtl::OUString aTreeFileURL = aExtensionLanguageRoot;
+ aTreeFileURL += rtl::OUString::createFromAscii( "/help.tree" );
+ osl::DirectoryItem aTreeFileItem;
+ osl::FileBase::RC rcGet = osl::DirectoryItem::get( aTreeFileURL, aTreeFileItem );
+ osl::FileStatus aFileStatus( FileStatusMask_FileSize );
+ if( rcGet == osl::FileBase::E_None &&
+ aTreeFileItem.getFileStatus( aFileStatus ) == osl::FileBase::E_None &&
+ aFileStatus.isValid( FileStatusMask_FileSize ) )
+ {
+ sal_uInt64 ret, len = aFileStatus.getFileSize();
+ char* s = new char[ int(len) ]; // the buffer to hold the installed files
+ osl::File aFile( aTreeFileURL );
+ aFile.open( OpenFlag_Read );
+ aFile.read( s, len, ret );
+ aFile.close();
+
+ XML_Parser parser = XML_ParserCreate( 0 );
+ int parsed = XML_Parse( parser, s, int( len ), true );
+
+ if( parsed == 0 )
+ {
+ XML_Error nError = XML_GetErrorCode( parser );
+ o_rHelpProcessingErrorInfo.m_eErrorClass = HELPPROCESSING_XMLPARSING_ERROR;
+ o_rHelpProcessingErrorInfo.m_aErrorMsg = rtl::OUString::createFromAscii( XML_ErrorString( nError ) );;
+ o_rHelpProcessingErrorInfo.m_aXMLParsingFile = aTreeFileURL;
+ // CRAHSES!!! o_rHelpProcessingErrorInfo.m_nXMLParsingLine = XML_GetCurrentLineNumber( parser );
+ bSuccess = false;
+ }
+
+ XML_ParserFree( parser );
+ delete[] s;
+ }
+
+ return bSuccess;
+}
+
+// vnd.sun.star.help://swriter/52821?Language=en-US&System=UNIX
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
+
diff --git a/transex3/source/help/MANIFEST.MF b/transex3/source/help/MANIFEST.MF
new file mode 100644
index 000000000000..bf0e4ab46cb2
--- /dev/null
+++ b/transex3/source/help/MANIFEST.MF
@@ -0,0 +1,2 @@
+RegistrationClassName: com.sun.star.help.HelpComponent
+Class-Path: lucene-core-2.3.jar lucene-analyzers-2.3.jar
diff --git a/transex3/source/help/compilehelp.hxx b/transex3/source/help/compilehelp.hxx
new file mode 100644
index 000000000000..1e9a1c8604b8
--- /dev/null
+++ b/transex3/source/help/compilehelp.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: compilehelp.hxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef COMPILE_HXX
+#define COMPILE_HXX
+
+#include "sal/types.h"
+
+#if defined(HELPLINKER_DLLIMPLEMENTATION)
+#define HELPLINKER_DLLPUBLIC SAL_DLLPUBLIC_EXPORT
+#else
+#define HELPLINKER_DLLPUBLIC SAL_DLLPUBLIC_IMPORT
+#endif
+#define HELPLINKER_DLLPRIVATE SAL_DLLPRIVATE
+
+
+//#include <helplinkerdllapi.h>
+#include <rtl/ustring.hxx>
+
+enum HelpProcessingErrorClass
+{
+ HELPPROCESSING_NO_ERROR,
+ HELPPROCESSING_GENERAL_ERROR, // Missing files, options etc.
+ HELPPROCESSING_INTERNAL_ERROR, // Unexpected problems
+ HELPPROCESSING_XMLPARSING_ERROR // Errors thrown by libxml
+};
+
+struct HelpProcessingErrorInfo
+{
+ HelpProcessingErrorClass m_eErrorClass;
+ rtl::OUString m_aErrorMsg;
+ rtl::OUString m_aXMLParsingFile;
+ sal_Int32 m_nXMLParsingLine;
+
+ HelpProcessingErrorInfo( void )
+ : m_eErrorClass( HELPPROCESSING_NO_ERROR )
+ , m_nXMLParsingLine( -1 )
+ {}
+
+ HelpProcessingErrorInfo& operator=( const struct HelpProcessingException& e );
+};
+
+
+// Returns true in case of success, false in case of error
+HELPLINKER_DLLPUBLIC bool compileExtensionHelp
+(
+ const rtl::OUString& aExtensionName,
+ const rtl::OUString& aExtensionLanguageRoot,
+ sal_Int32 nXhpFileCount, const rtl::OUString* pXhpFiles,
+ HelpProcessingErrorInfo& o_rHelpProcessingErrorInfo
+);
+
+#endif
diff --git a/transex3/source/help/helplinker.pmk b/transex3/source/help/helplinker.pmk
new file mode 100644
index 000000000000..569c5f4dbdee
--- /dev/null
+++ b/transex3/source/help/helplinker.pmk
@@ -0,0 +1,35 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: helplinker.pmk,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+# define HELPLINKER_DLLIMPLEMENTATION (see @ inc/xmlhelp/helplinkerdllapi.h)
+CDEFS += -DHELPLINKER_DLLIMPLEMENTATION
+
+VISIBILITY_HIDDEN=TRUE
diff --git a/transex3/source/help/makefile.mk b/transex3/source/help/makefile.mk
new file mode 100644
index 000000000000..edf68d906133
--- /dev/null
+++ b/transex3/source/help/makefile.mk
@@ -0,0 +1,139 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.38 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ = ..$/..
+PRJNAME = xmlhelp
+TARGET = HelpLinker
+LIBBASENAME = helplinker
+PACKAGE = com$/sun$/star$/help
+TARGETTYPE=CUI
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : helplinker.pmk
+
+.IF "$(SYSTEM_LIBXSLT)" == "YES"
+CFLAGS+= $(LIBXSLT_CFLAGS)
+.ELSE
+LIBXSLTINCDIR=external$/libxslt
+CFLAGS+= -I$(SOLARINCDIR)$/$(LIBXSLTINCDIR)
+.ENDIF
+
+.IF "$(SYSTEM_DB)" == "YES"
+CFLAGS+=-DSYSTEM_DB -I$(DB_INCLUDES)
+.ENDIF
+
+.IF "$(SYSTEM_EXPAT)" == "YES"
+CFLAGS+=-DSYSTEM_EXPAT
+.ENDIF
+
+OBJFILES=\
+ $(OBJ)$/HelpLinker.obj \
+ $(OBJ)$/HelpCompiler.obj
+SLOFILES=\
+ $(SLO)$/HelpLinker.obj \
+ $(SLO)$/HelpCompiler.obj
+
+EXCEPTIONSFILES=\
+ $(OBJ)$/HelpLinker.obj \
+ $(OBJ)$/HelpCompiler.obj \
+ $(SLO)$/HelpLinker.obj \
+ $(SLO)$/HelpCompiler.obj
+.IF "$(OS)" == "MACOSX" && "$(CPU)" == "P" && "$(COM)" == "GCC"
+# There appears to be a GCC 4.0.1 optimization error causing _file:good() to
+# report true right before the call to writeOut at HelpLinker.cxx:1.12 l. 954
+# but out.good() to report false right at the start of writeOut at
+# HelpLinker.cxx:1.12 l. 537:
+NOOPTFILES=\
+ $(OBJ)$/HelpLinker.obj \
+ $(SLO)$/HelpLinker.obj
+.ENDIF
+
+APP1TARGET= $(TARGET)
+APP1OBJS=\
+ $(OBJ)$/HelpLinker.obj \
+ $(OBJ)$/HelpCompiler.obj
+
+APP1STDLIBS+=$(SALLIB) $(BERKELEYLIB) $(XSLTLIB) $(EXPATASCII3RDLIB)
+
+SHL1TARGET =$(LIBBASENAME)$(DLLPOSTFIX)
+SHL1LIBS= $(SLB)$/$(TARGET).lib
+SHL1IMPLIB =i$(LIBBASENAME)
+SHL1DEF =$(MISC)$/$(SHL1TARGET).def
+SHL1STDLIBS =$(SALLIB) $(BERKELEYLIB) $(XSLTLIB) $(EXPATASCII3RDLIB)
+SHL1USE_EXPORTS =ordinal
+
+DEF1NAME =$(SHL1TARGET)
+DEFLIB1NAME =$(TARGET)
+
+JAVAFILES = \
+ HelpIndexerTool.java \
+ HelpFileDocument.java
+
+
+JAVACLASSFILES = \
+ $(CLASSDIR)$/$(PACKAGE)$/HelpIndexerTool.class \
+ $(CLASSDIR)$/$(PACKAGE)$/HelpFileDocument.class
+
+
+# $(CLASSDIR)$/$(PACKAGE)$/HelpSearch.class \
+# $(CLASSDIR)$/$(PACKAGE)$/HelpIndexer.class \
+# $(CLASSDIR)$/$(PACKAGE)$/HelpComponent.class \
+# $(CLASSDIR)$/$(PACKAGE)$/HelpFileDocument.class
+
+#JARFILES = ridl.jar jurt.jar unoil.jar juh.jar
+.IF "$(SYSTEM_LUCENE)" == "YES"
+CLASSPATH!:=$(CLASSPATH)$(PATH_SEPERATOR)$(LUCENE_CORE_JAR)$(PATH_SEPERATOR)$(LUCENE_ANALYZERS_JAR)
+COMP=fix_system_lucene
+.ELSE
+JARFILES += lucene-core-2.3.jar lucene-analyzers-2.3.jar
+.ENDIF
+JAVAFILES = $(subst,$(CLASSDIR)$/$(PACKAGE)$/, $(subst,.class,.java $(JAVACLASSFILES)))
+#JAVAFILES = $(JAVACLASSFILES)
+
+JARCLASSDIRS = $(PACKAGE)/*
+JARTARGET = HelpIndexerTool.jar
+JARCOMPRESS = TRUE
+#CUSTOMMANIFESTFILE = MANIFEST.MF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.IF "$(JARTARGETN)"!=""
+$(JARTARGETN) : $(COMP)
+.ENDIF
+
+fix_system_lucene:
+ @echo "Fix Java Class-Path entry for Lucene libraries from system."
+ @$(SED) -r -e "s#^(Class-Path:).*#\1 file://$(LUCENE_CORE_JAR) file://$(LUCENE_ANALYZERS_JAR)#" \
+ -i ../../$(INPATH)/class/HelpLinker/META-INF/MANIFEST.MF
diff --git a/ucbhelper/inc/ucbhelper/interactionrequest.hxx b/ucbhelper/inc/ucbhelper/interactionrequest.hxx
index b66a07caceb7..f23041d0caa2 100644
--- a/ucbhelper/inc/ucbhelper/interactionrequest.hxx
+++ b/ucbhelper/inc/ucbhelper/interactionrequest.hxx
@@ -38,7 +38,7 @@
#include <com/sun/star/task/XInteractionApprove.hpp>
#include <com/sun/star/task/XInteractionDisapprove.hpp>
#include <com/sun/star/ucb/XInteractionReplaceExistingData.hpp>
-#include <com/sun/star/ucb/XInteractionSupplyAuthentication.hpp>
+#include <com/sun/star/ucb/XInteractionSupplyAuthentication2.hpp>
#include <com/sun/star/ucb/XInteractionSupplyName.hpp>
#include <rtl/ref.hxx>
#include <cppuhelper/weak.hxx>
@@ -342,7 +342,7 @@ public:
class UCBHELPER_DLLPUBLIC InteractionSupplyAuthentication :
public InteractionContinuation,
public com::sun::star::lang::XTypeProvider,
- public com::sun::star::ucb::XInteractionSupplyAuthentication
+ public com::sun::star::ucb::XInteractionSupplyAuthentication2
{
com::sun::star::uno::Sequence< com::sun::star::ucb::RememberAuthentication >
m_aRememberPasswordModes;
@@ -360,6 +360,9 @@ class UCBHELPER_DLLPUBLIC InteractionSupplyAuthentication :
unsigned m_bCanSetUserName : 1;
unsigned m_bCanSetPassword : 1;
unsigned m_bCanSetAccount : 1;
+ unsigned m_bCanUseSystemCredentials : 1;
+ unsigned m_bDefaultUseSystemCredentials : 1;
+ unsigned m_bUseSystemCredentials : 1;
public:
/**
@@ -382,7 +385,7 @@ public:
sal_Bool bCanSetRealm,
sal_Bool bCanSetUserName,
sal_Bool bCanSetPassword,
- sal_Bool bCanSetAccount );
+ sal_Bool bCanSetAccount);
/**
* Constructor.
*
@@ -408,6 +411,11 @@ public:
* @param eDefaultRememberAccountMode specifies the default
* authentication-remember-mode for accounts preferred by the
* requesting client.
+ * @param bCanUseSystemCredentials indicates whether issuer of the
+ * authetication request can obtain and use system credentials
+ * for authentication.
+ * @param bDefaultUseSystemCredentials specifies the default system
+ * credentials usage preferred by the requesting client
*
* @see com::sun::star::ucb::AuthenticationRequest
* @see com::sun::star::ucb::RememberAuthentication
@@ -427,7 +435,9 @@ public:
com::sun::star::ucb::RememberAuthentication > &
rRememberAccountModes,
const com::sun::star::ucb::RememberAuthentication
- eDefaultRememberAccountMode );
+ eDefaultRememberAccountMode,
+ sal_Bool bCanUseSystemCredentials,
+ sal_Bool bDefaultUseSystemCredentials );
// XInterface
virtual com::sun::star::uno::Any SAL_CALL
@@ -497,6 +507,12 @@ public:
setRememberAccount( com::sun::star::ucb::RememberAuthentication Remember )
throw( com::sun::star::uno::RuntimeException );
+ // XInteractionSupplyAuthentication2
+ virtual ::sal_Bool SAL_CALL canUseSystemCredentials( ::sal_Bool& Default )
+ throw ( ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL setUseSystemCredentials( ::sal_Bool UseSystemCredentials )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
// Non-interface methods.
/**
@@ -548,6 +564,8 @@ public:
*/
const com::sun::star::ucb::RememberAuthentication &
getRememberAccountMode() const { return m_eRememberAccountMode; }
+
+ sal_Bool getUseSystemCredentials() const { return m_bUseSystemCredentials; }
};
//============================================================================
@@ -571,7 +589,10 @@ inline InteractionSupplyAuthentication::InteractionSupplyAuthentication(
m_bCanSetRealm( bCanSetRealm ),
m_bCanSetUserName( bCanSetUserName ),
m_bCanSetPassword( bCanSetPassword ),
- m_bCanSetAccount( bCanSetAccount )
+ m_bCanSetAccount( bCanSetAccount ),
+ m_bCanUseSystemCredentials( sal_False ),
+ m_bDefaultUseSystemCredentials( sal_False ),
+ m_bUseSystemCredentials( sal_False )
{
m_aRememberPasswordModes[ 0 ]
= com::sun::star::ucb::RememberAuthentication_NO;
@@ -593,7 +614,9 @@ inline InteractionSupplyAuthentication::InteractionSupplyAuthentication(
const com::sun::star::uno::Sequence<
com::sun::star::ucb::RememberAuthentication > & rRememberAccountModes,
const com::sun::star::ucb::RememberAuthentication
- eDefaultRememberAccountMode )
+ eDefaultRememberAccountMode,
+ sal_Bool bCanUseSystemCredentials,
+ sal_Bool bDefaultUseSystemCredentials )
: InteractionContinuation( pRequest ),
m_aRememberPasswordModes( rRememberPasswordModes ),
m_aRememberAccountModes( rRememberAccountModes ),
@@ -604,7 +627,10 @@ inline InteractionSupplyAuthentication::InteractionSupplyAuthentication(
m_bCanSetRealm( bCanSetRealm ),
m_bCanSetUserName( bCanSetUserName ),
m_bCanSetPassword( bCanSetPassword ),
- m_bCanSetAccount( bCanSetAccount )
+ m_bCanSetAccount( bCanSetAccount ),
+ m_bCanUseSystemCredentials( bCanUseSystemCredentials ),
+ m_bDefaultUseSystemCredentials( bDefaultUseSystemCredentials ),
+ m_bUseSystemCredentials( bDefaultUseSystemCredentials & bCanUseSystemCredentials )
{
}
diff --git a/ucbhelper/inc/ucbhelper/simpleauthenticationrequest.hxx b/ucbhelper/inc/ucbhelper/simpleauthenticationrequest.hxx
index ddb2e655de8b..13061ca0238f 100644
--- a/ucbhelper/inc/ucbhelper/simpleauthenticationrequest.hxx
+++ b/ucbhelper/inc/ucbhelper/simpleauthenticationrequest.hxx
@@ -33,9 +33,12 @@
#include <rtl/ref.hxx>
#include <ucbhelper/interactionrequest.hxx>
-#include <com/sun/star/ucb/AuthenticationRequest.hpp>
#include "ucbhelper/ucbhelperdllapi.h"
+namespace com { namespace sun { namespace star { namespace ucb {
+ class URLAuthenticationRequest;
+} } } }
+
namespace ucbhelper {
/**
@@ -63,12 +66,13 @@ class UCBHELPER_DLLPUBLIC SimpleAuthenticationRequest : public ucbhelper::Intera
ucbhelper::InteractionSupplyAuthentication > m_xAuthSupplier;
private:
- void initialize( ::com::sun::star::ucb::AuthenticationRequest aRequest,
- const sal_Bool & bCanSetRealm,
- const sal_Bool & bCanSetUserName,
- const sal_Bool & bCanSetPassword,
- const sal_Bool & bCanSetAccount,
- const sal_Bool & bAllowPersistentStoring );
+ void initialize( const ::com::sun::star::ucb::URLAuthenticationRequest & rRequest,
+ sal_Bool bCanSetRealm,
+ sal_Bool bCanSetUserName,
+ sal_Bool bCanSetPassword,
+ sal_Bool bCanSetAccount,
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials );
public:
/** Specification whether some entity (realm, username, password, account)
@@ -84,6 +88,7 @@ public:
/**
* Constructor.
*
+ * @param rURL contains a URL for which authentication is requested.
* @param rServerName contains a server name.
* @param rRealm contains a realm, if applicable.
* @param rUserName contains a username, if available (for instance from
@@ -92,7 +97,8 @@ public:
* a previous try).
* @param rAccount contains an account, if applicable.
*/
- SimpleAuthenticationRequest( const rtl::OUString & rServerName,
+ SimpleAuthenticationRequest( const rtl::OUString & rURL,
+ const rtl::OUString & rServerName,
const rtl::OUString & rRealm,
const rtl::OUString & rUserName,
const rtl::OUString & rPassword,
@@ -102,6 +108,7 @@ public:
/**
* Constructor.
*
+ * @param rURL contains a URL for which authentication is requested.
* @param rServerName contains a server name.
* @param rRealm contains a realm, if applicable.
* @param rUserName contains a username, if available (for instance from
@@ -109,14 +116,19 @@ public:
* @param rPassword contains a password, if available (for instance from
* a previous try).
* @param rAccount contains an account, if applicable.
- * @param bAllowPersistentStoring specifies if the credentials should stored in the passowrd container persistently
+ * @param bAllowPersistentStoring specifies if the credentials should
+ * be stored in the passowrd container persistently
+ * @param bAllowUseSystemCredntials specifies if requesting client is
+ * able to obtain and use system credentials for authentication
*/
- SimpleAuthenticationRequest( const rtl::OUString & rServerName,
+ SimpleAuthenticationRequest( const rtl::OUString & rURL,
+ const rtl::OUString & rServerName,
const rtl::OUString & rRealm,
const rtl::OUString & rUserName,
const rtl::OUString & rPassword,
const rtl::OUString & rAccount,
- const sal_Bool & bAllowPersistentStoring);
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials );
/**
@@ -138,7 +150,8 @@ public:
modifiable.
* @param rAccount contains an account, if applicable.
*/
- SimpleAuthenticationRequest( const rtl::OUString & rServerName,
+ SimpleAuthenticationRequest( const rtl::OUString & rURL,
+ const rtl::OUString & rServerName,
EntityType eRealmType,
const rtl::OUString & rRealm,
EntityType eUserNameType,
@@ -152,6 +165,7 @@ public:
/**
* Constructor.
*
+ * @param rURL contains a URL for which authentication is requested.
* @param rServerName contains a server name.
* @param eRealmType specifies whether a realm is applicable and
modifiable.
@@ -167,9 +181,13 @@ public:
* @param eAccountType specifies whether an account is applicable and
modifiable.
* @param rAccount contains an account, if applicable.
- * @param bAllowPersistentStoring specifies if the credentials should stored in the passowrd container persistently
+ * @param bAllowPersistentStoring specifies if the credentials should
+ * be stored in the passowrd container persistently
+ * @param bAllowUseSystemCredntials specifies if requesting client is
+ * able to obtain and use system credentials for authentication
*/
- SimpleAuthenticationRequest( const rtl::OUString & rServerName,
+ SimpleAuthenticationRequest( const rtl::OUString & rURL,
+ const rtl::OUString & rServerName,
EntityType eRealmType,
const rtl::OUString & rRealm,
EntityType eUserNameType,
@@ -178,7 +196,8 @@ public:
const rtl::OUString & rPassword,
EntityType eAccountType,
const rtl::OUString & rAccount,
- const sal_Bool & bAllowPersistentStoring);
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials );
/**
* This method returns the supplier for the missing authentication data,
diff --git a/ucbhelper/source/provider/interactionrequest.cxx b/ucbhelper/source/provider/interactionrequest.cxx
index 8bfb4461d6f3..df91c47dc8fe 100644
--- a/ucbhelper/source/provider/interactionrequest.cxx
+++ b/ucbhelper/source/provider/interactionrequest.cxx
@@ -704,7 +704,8 @@ InteractionSupplyAuthentication::queryInterface( const uno::Type & rType )
uno::Any aRet = cppu::queryInterface( rType,
static_cast< lang::XTypeProvider * >( this ),
static_cast< task::XInteractionContinuation * >( this ),
- static_cast< ucb::XInteractionSupplyAuthentication * >( this ) );
+ static_cast< ucb::XInteractionSupplyAuthentication * >( this ),
+ static_cast< ucb::XInteractionSupplyAuthentication2 * >( this ));
return aRet.hasValue()
? aRet : InteractionContinuation::queryInterface( rType );
@@ -750,7 +751,7 @@ uno::Sequence< uno::Type > SAL_CALL InteractionSupplyAuthentication::getTypes()
uno::Reference< lang::XTypeProvider > * >( 0 ) ),
getCppuType( static_cast<
uno::Reference<
- ucb::XInteractionSupplyAuthentication > * >( 0 ) ) );
+ ucb::XInteractionSupplyAuthentication2 > * >( 0 ) ) );
pCollection = &collection;
}
}
@@ -905,6 +906,33 @@ void SAL_CALL InteractionSupplyAuthentication::setRememberAccount(
}
//=========================================================================
+//
+// XInteractionSupplyAuthentication2 methods.
+//
+//=========================================================================
+
+// virtual
+::sal_Bool SAL_CALL
+InteractionSupplyAuthentication::canUseSystemCredentials(
+ ::sal_Bool& Default )
+ throw ( uno::RuntimeException )
+{
+ Default = m_bDefaultUseSystemCredentials;
+ return m_bCanUseSystemCredentials;
+}
+
+//=========================================================================
+// virtual
+void SAL_CALL InteractionSupplyAuthentication::setUseSystemCredentials(
+ ::sal_Bool UseSystemCredentials )
+ throw ( uno::RuntimeException )
+{
+ if ( m_bCanUseSystemCredentials )
+ m_bUseSystemCredentials = UseSystemCredentials;
+}
+
+
+//=========================================================================
//=========================================================================
//
// InteractionSupplyName Implementation.
diff --git a/ucbhelper/source/provider/simpleauthenticationrequest.cxx b/ucbhelper/source/provider/simpleauthenticationrequest.cxx
index 16570f7f012d..c5d7448fa29b 100644
--- a/ucbhelper/source/provider/simpleauthenticationrequest.cxx
+++ b/ucbhelper/source/provider/simpleauthenticationrequest.cxx
@@ -31,6 +31,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_ucbhelper.hxx"
#include <com/sun/star/task/XMasterPasswordHandling.hpp>
+#include <com/sun/star/ucb/URLAuthenticationRequest.hpp>
#include <ucbhelper/simpleauthenticationrequest.hxx>
using namespace com::sun::star;
@@ -38,14 +39,15 @@ using namespace ucbhelper;
//=========================================================================
SimpleAuthenticationRequest::SimpleAuthenticationRequest(
+ const rtl::OUString & rURL,
const rtl::OUString & rServerName,
const rtl::OUString & rRealm,
const rtl::OUString & rUserName,
const rtl::OUString & rPassword,
const rtl::OUString & rAccount )
{
- // Fill request...
- ucb::AuthenticationRequest aRequest;
+ // Fill request...
+ ucb::URLAuthenticationRequest aRequest;
// aRequest.Message = // OUString
// aRequest.Context = // XInterface
aRequest.Classification = task::InteractionClassification_ERROR;
@@ -61,26 +63,30 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
aRequest.HasAccount = ( rAccount.getLength() > 0 );
if ( aRequest.HasAccount )
aRequest.Account = rAccount;
+ aRequest.URL = rURL;
- initialize(aRequest,
+ initialize(aRequest,
sal_False,
sal_True,
sal_True,
aRequest.HasAccount,
- sal_False);
+ sal_False,
+ sal_False );
}
//=========================================================================
SimpleAuthenticationRequest::SimpleAuthenticationRequest(
+ const rtl::OUString & rURL,
const rtl::OUString & rServerName,
const rtl::OUString & rRealm,
const rtl::OUString & rUserName,
const rtl::OUString & rPassword,
const rtl::OUString & rAccount,
- const sal_Bool & bAllowPersistentStoring )
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials )
{
- // Fill request...
- ucb::AuthenticationRequest aRequest;
+ // Fill request...
+ ucb::URLAuthenticationRequest aRequest;
// aRequest.Message = // OUString
// aRequest.Context = // XInterface
aRequest.Classification = task::InteractionClassification_ERROR;
@@ -96,56 +102,20 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
aRequest.HasAccount = ( rAccount.getLength() > 0 );
if ( aRequest.HasAccount )
aRequest.Account = rAccount;
+ aRequest.URL = rURL;
- initialize(aRequest,
+ initialize(aRequest,
sal_False,
sal_True,
sal_True,
aRequest.HasAccount,
- bAllowPersistentStoring);
-}
-
-void SimpleAuthenticationRequest::initialize(
- ucb::AuthenticationRequest aRequest,
- const sal_Bool & bCanSetRealm,
- const sal_Bool & bCanSetUserName,
- const sal_Bool & bCanSetPassword,
- const sal_Bool & bCanSetAccount,
- const sal_Bool & bAllowPersistentStoring )
-{
- setRequest( uno::makeAny( aRequest ) );
-
- // Fill continuations...
- uno::Sequence< ucb::RememberAuthentication > aRememberModes( bAllowPersistentStoring ? 3 : 2 );
- aRememberModes[ 0 ] = ucb::RememberAuthentication_NO;
- aRememberModes[ 1 ] = ucb::RememberAuthentication_SESSION;
- if (bAllowPersistentStoring)
- aRememberModes[ 1 ] = ucb::RememberAuthentication_PERSISTENT;
-
- m_xAuthSupplier
- = new InteractionSupplyAuthentication(
- this,
- bCanSetRealm,
- bCanSetUserName,
- bCanSetPassword,
- bCanSetAccount,
- aRememberModes, // rRememberPasswordModes
- ucb::RememberAuthentication_SESSION, // eDefaultRememberPasswordMode
- aRememberModes, // rRememberAccountModes
- ucb::RememberAuthentication_SESSION // eDefaultRememberAccountMode
- );
-
- uno::Sequence<
- uno::Reference< task::XInteractionContinuation > > aContinuations( 3 );
- aContinuations[ 0 ] = new InteractionAbort( this );
- aContinuations[ 1 ] = new InteractionRetry( this );
- aContinuations[ 2 ] = m_xAuthSupplier.get();
-
- setContinuations( aContinuations );
+ bAllowPersistentStoring,
+ bAllowUseSystemCredentials );
}
//=========================================================================
SimpleAuthenticationRequest::SimpleAuthenticationRequest(
+ const rtl::OUString & rURL,
const rtl::OUString & rServerName,
EntityType eRealmType,
const rtl::OUString & rRealm,
@@ -157,7 +127,7 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
const rtl::OUString & rAccount )
{
// Fill request...
- ucb::AuthenticationRequest aRequest;
+ ucb::URLAuthenticationRequest aRequest;
// aRequest.Message = // OUString
// aRequest.Context = // XInterface
aRequest.Classification = task::InteractionClassification_ERROR;
@@ -175,17 +145,20 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
aRequest.HasAccount = eAccountType != ENTITY_NA;
if ( aRequest.HasAccount )
aRequest.Account = rAccount;
+ aRequest.URL = rURL;
initialize(aRequest,
eRealmType == ENTITY_MODIFY,
eUserNameType == ENTITY_MODIFY,
ePasswordType == ENTITY_MODIFY,
eAccountType == ENTITY_MODIFY,
- sal_False);
+ sal_False,
+ sal_False );
}
//=========================================================================
SimpleAuthenticationRequest::SimpleAuthenticationRequest(
+ const rtl::OUString & rURL,
const rtl::OUString & rServerName,
EntityType eRealmType,
const rtl::OUString & rRealm,
@@ -195,10 +168,11 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
const rtl::OUString & rPassword,
EntityType eAccountType,
const rtl::OUString & rAccount,
- const sal_Bool & bAllowPersistentStoring )
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials )
{
// Fill request...
- ucb::AuthenticationRequest aRequest;
+ ucb::URLAuthenticationRequest aRequest;
// aRequest.Message = // OUString
// aRequest.Context = // XInterface
aRequest.Classification = task::InteractionClassification_ERROR;
@@ -216,11 +190,56 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
aRequest.HasAccount = eAccountType != ENTITY_NA;
if ( aRequest.HasAccount )
aRequest.Account = rAccount;
+ aRequest.URL = rURL;
initialize(aRequest,
eRealmType == ENTITY_MODIFY,
eUserNameType == ENTITY_MODIFY,
ePasswordType == ENTITY_MODIFY,
eAccountType == ENTITY_MODIFY,
- bAllowPersistentStoring);
+ bAllowPersistentStoring,
+ bAllowUseSystemCredentials );
+}
+
+//=========================================================================
+void SimpleAuthenticationRequest::initialize(
+ const ucb::URLAuthenticationRequest & rRequest,
+ sal_Bool bCanSetRealm,
+ sal_Bool bCanSetUserName,
+ sal_Bool bCanSetPassword,
+ sal_Bool bCanSetAccount,
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials )
+{
+ setRequest( uno::makeAny( rRequest ) );
+
+ // Fill continuations...
+ uno::Sequence< ucb::RememberAuthentication > aRememberModes( bAllowPersistentStoring ? 3 : 2 );
+ aRememberModes[ 0 ] = ucb::RememberAuthentication_NO;
+ aRememberModes[ 1 ] = ucb::RememberAuthentication_SESSION;
+ if (bAllowPersistentStoring)
+ aRememberModes[ 1 ] = ucb::RememberAuthentication_PERSISTENT;
+
+ m_xAuthSupplier
+ = new InteractionSupplyAuthentication(
+ this,
+ bCanSetRealm,
+ bCanSetUserName,
+ bCanSetPassword,
+ bCanSetAccount,
+ aRememberModes, // rRememberPasswordModes
+ ucb::RememberAuthentication_SESSION, // eDefaultRememberPasswordMode
+ aRememberModes, // rRememberAccountModes
+ ucb::RememberAuthentication_SESSION, // eDefaultRememberAccountMode
+ bAllowUseSystemCredentials, // bCanUseSystemCredentials,
+ false // bDefaultUseSystemCredentials
+ );
+
+ uno::Sequence<
+ uno::Reference< task::XInteractionContinuation > > aContinuations( 3 );
+ aContinuations[ 0 ] = new InteractionAbort( this );
+ aContinuations[ 1 ] = new InteractionRetry( this );
+ aContinuations[ 2 ] = m_xAuthSupplier.get();
+
+ setContinuations( aContinuations );
}
diff --git a/unotools/inc/unotools/idhelper.hxx b/unotools/inc/unotools/idhelper.hxx
index 2fcac8550af5..a2aa28d26c1b 100644
--- a/unotools/inc/unotools/idhelper.hxx
+++ b/unotools/inc/unotools/idhelper.hxx
@@ -125,9 +125,6 @@ public: \
static void release(); \
\
static ::com::sun::star::uno::Sequence< sal_Int8 > getImplementationId( \
- const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider >& _rxProvider); \
- \
- static ::com::sun::star::uno::Sequence< sal_Int8 > getImplementationId( \
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >& _rTypes); \
\
private: \
@@ -182,16 +179,6 @@ void classname::release() \
\
/*-----------------------------------------------------------------------*/ \
::com::sun::star::uno::Sequence< sal_Int8 > classname::getImplementationId( \
- const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider >& _rxProvider) \
-{ \
- ::osl::MutexGuard aGuard(s_aMutex); \
- if (_rxProvider.is()) \
- return getImplementationId(_rxProvider->getTypes()); \
- return ::com::sun::star::uno::Sequence< sal_Int8 >(); \
-} \
- \
-/*-----------------------------------------------------------------------*/ \
-::com::sun::star::uno::Sequence< sal_Int8 > classname::getImplementationId( \
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >& _rTypes) \
{ \
::osl::MutexGuard aGuard(s_aMutex); \
diff --git a/vcl/aqua/inc/saldata.hxx b/vcl/aqua/inc/saldata.hxx
index dc629b9a3b8c..a84be1fc2c25 100644
--- a/vcl/aqua/inc/saldata.hxx
+++ b/vcl/aqua/inc/saldata.hxx
@@ -35,6 +35,8 @@
#include <Cocoa/Cocoa.h>
#include "postmac.h"
+#include "com/sun/star/uno/Reference.hxx"
+
#include "vcl/sv.h"
#include "vcl/svdata.hxx"
#include "vcl/salwtype.hxx"
@@ -112,6 +114,9 @@ struct SalData
long mnDPIX; // #i100617# read DPI only once per office life
long mnDPIY; // #i100617# read DPI only once per office life
+ com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ mxClipboard;
+
SalData();
~SalData();
diff --git a/vcl/aqua/inc/salframe.h b/vcl/aqua/inc/salframe.h
index aeabdefc72a5..1d1eb3cb6bd3 100644
--- a/vcl/aqua/inc/salframe.h
+++ b/vcl/aqua/inc/salframe.h
@@ -44,6 +44,8 @@
#include <utility>
#include <stdexcept>
+#include <boost/shared_ptr.hpp>
+
class AquaSalGraphics;
class AquaSalFrame;
class AquaSalTimer;
@@ -60,47 +62,49 @@ typedef struct SalFrame::SalPointerState SalPointerState;
class AquaSalFrame : public SalFrame
{
public:
- NSWindow* mpWindow; // Cocoa window
- NSView* mpView; // Cocoa view (actually a custom view, see below
- NSMenuItem* mpDockMenuEntry; // entry in the dynamic dock menu
- NSRect maScreenRect; // for mirroring purposes
- AquaSalGraphics* mpGraphics; // current frame graphics
- AquaSalFrame* mpParent; // pointer to parent frame
- SystemEnvData maSysData; // system data
- int mnMinWidth; // min. client width in pixels
- int mnMinHeight; // min. client height in pixels
- int mnMaxWidth; // max. client width in pixels
- int mnMaxHeight; // max. client height in pixels
- NSRect maFullScreenRect; // old window size when in FullScreen
- bool mbGraphics:1; // is Graphics used?
- bool mbFullScreen:1; // is Window in FullScreen?
- bool mbShown:1;
- bool mbInitShow:1;
- bool mbPositioned:1;
- bool mbSized:1;
- bool mbPresentation:1;
-
- ULONG mnStyle;
- unsigned int mnStyleMask; // our style mask from NSWindow creation
-
- ULONG mnLastEventTime;
- unsigned int mnLastModifierFlags;
- AquaSalMenu* mpMenu;
-
- SalExtStyle mnExtStyle; // currently document frames are marked this way
-
- PointerStyle mePointerStyle; // currently active pointer style
-
- NSTrackingRectTag mnTrackingRectTag; // used to get enter/leave messages
-
- CGMutablePathRef mrClippingPath; // used for "shaping"
- std::vector< CGRect > maClippingRects;
-
- std::list<AquaBlinker*> maBlinkers;
-
- Rectangle maInvalidRect;
-
- ULONG mnICOptions;
+ NSWindow* mpWindow; // Cocoa window
+ NSView* mpView; // Cocoa view (actually a custom view, see below
+ NSMenuItem* mpDockMenuEntry; // entry in the dynamic dock menu
+ NSRect maScreenRect; // for mirroring purposes
+ AquaSalGraphics* mpGraphics; // current frame graphics
+ AquaSalFrame* mpParent; // pointer to parent frame
+ SystemEnvData maSysData; // system data
+ int mnMinWidth; // min. client width in pixels
+ int mnMinHeight; // min. client height in pixels
+ int mnMaxWidth; // max. client width in pixels
+ int mnMaxHeight; // max. client height in pixels
+ NSRect maFullScreenRect; // old window size when in FullScreen
+ bool mbGraphics:1; // is Graphics used?
+ bool mbFullScreen:1; // is Window in FullScreen?
+ bool mbShown:1;
+ bool mbInitShow:1;
+ bool mbPositioned:1;
+ bool mbSized:1;
+ bool mbPresentation:1;
+
+ ULONG mnStyle;
+ unsigned int mnStyleMask; // our style mask from NSWindow creation
+
+ ULONG mnLastEventTime;
+ unsigned int mnLastModifierFlags;
+ AquaSalMenu* mpMenu;
+
+ SalExtStyle mnExtStyle; // currently document frames are marked this way
+
+ PointerStyle mePointerStyle; // currently active pointer style
+
+ NSTrackingRectTag mnTrackingRectTag; // used to get enter/leave messages
+
+ CGMutablePathRef mrClippingPath; // used for "shaping"
+ std::vector< CGRect > maClippingRects;
+
+ std::list<AquaBlinker*> maBlinkers;
+
+ Rectangle maInvalidRect;
+
+ ULONG mnICOptions;
+
+ boost::shared_ptr< Timer > mpActivityTimer; // Timer to prevent system sleep during presentation
public:
/** Constructor
diff --git a/vcl/aqua/inc/salinst.h b/vcl/aqua/inc/salinst.h
index b2cbc83d9f79..5b1cf0d84562 100644
--- a/vcl/aqua/inc/salinst.h
+++ b/vcl/aqua/inc/salinst.h
@@ -143,9 +143,16 @@ public:
virtual void DestroyMenuItem( SalMenuItem* );
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
virtual void SetEventCallback( void* pInstance, bool(*pCallback)(void*,void*,int) );
virtual void SetErrorEventCallback( void* pInstance, bool(*pCallback)(void*,void*,int) );
+ // dtrans implementation
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
+
static void handleAppDefinedEvent( NSEvent* pEvent );
// check whether a particular string is passed on the command line
diff --git a/vcl/aqua/inc/vclnsapp.h b/vcl/aqua/inc/vclnsapp.h
index fc637ff75a31..622f1bfd6bcd 100755
--- a/vcl/aqua/inc/vclnsapp.h
+++ b/vcl/aqua/inc/vclnsapp.h
@@ -35,6 +35,8 @@
#include "Cocoa/Cocoa.h"
#include "postmac.h"
+class AquaSalFrame;
+
@interface CocoaThreadEnabler : NSObject
{
}
@@ -64,6 +66,8 @@
-(void)applicationWillResignActive: (NSNotification *)pNotification;
-(MacOSBOOL)applicationShouldHandleReopen: (NSApplication*)pApp hasVisibleWindows: (MacOSBOOL)bWinVisible;
-(void)setDockIconClickHandler: (NSObject*)pHandler;
+-(void)cycleFrameForward: (AquaSalFrame*)pCurFrame;
+-(void)cycleFrameBackward: (AquaSalFrame*)pCurFrame;
@end
#endif
diff --git a/vcl/aqua/source/a11y/aqua11yfactory.mm b/vcl/aqua/source/a11y/aqua11yfactory.mm
index b660472d9bbe..a49bce957b3b 100644
--- a/vcl/aqua/source/a11y/aqua11yfactory.mm
+++ b/vcl/aqua/source/a11y/aqua11yfactory.mm
@@ -151,7 +151,18 @@ static bool enabled = false;
}
[ nativeRole release ];
[ aWrapper setActsAsRadioGroup: asRadioGroup ];
- if ( ! rxAccessibleContext -> getAccessibleStateSet() -> contains ( AccessibleStateType::TRANSIENT ) ) {
+ #if 0
+ /* #i102033# NSAccessibility does not seemt to know an equivalent for transient children.
+ That means we need to cache this, else e.g. tree list boxes are not accessible (moreover
+ it crashes by notifying dead objects - which would seemt o be another bug)
+
+ FIXME:
+ Unfortunately this can increase memory consumption drastically until the non transient parent
+ is destroyed an finally all the transients are released.
+ */
+ if ( ! rxAccessibleContext -> getAccessibleStateSet() -> contains ( AccessibleStateType::TRANSIENT ) )
+ #endif
+ {
[ dAllWrapper setObject: aWrapper forKey: nKey ];
}
}
diff --git a/vcl/aqua/source/a11y/aqua11ywrapper.mm b/vcl/aqua/source/a11y/aqua11ywrapper.mm
index 99bcbd20f698..64e0e9ef0308 100644
--- a/vcl/aqua/source/a11y/aqua11ywrapper.mm
+++ b/vcl/aqua/source/a11y/aqua11ywrapper.mm
@@ -109,7 +109,18 @@ static MacOSBOOL isPopupMenuOpen = NO;
// XAccessibleMultiLineText
mpReferenceWrapper -> rAccessibleMultiLineText = Reference < XAccessibleMultiLineText > ( rxAccessibleContext, UNO_QUERY );
// XAccessibleEventBroadcaster
- if ( ! rxAccessibleContext -> getAccessibleStateSet() -> contains ( AccessibleStateType::TRANSIENT ) ) {
+ #if 0
+ /* #i102033# NSAccessibility does not seemt to know an equivalent for transient children.
+ That means we need to cache this, else e.g. tree list boxes are not accessible (moreover
+ it crashes by notifying dead objects - which would seemt o be another bug)
+
+ FIXME:
+ Unfortunately this can increase memory consumption drastically until the non transient parent
+ is destroyed an finally all the transients are released.
+ */
+ if ( ! rxAccessibleContext -> getAccessibleStateSet() -> contains ( AccessibleStateType::TRANSIENT ) )
+ #endif
+ {
Reference< XAccessibleEventBroadcaster > xBroadcaster(rxAccessibleContext, UNO_QUERY);
if( xBroadcaster.is() ) {
/*
diff --git a/vcl/aqua/source/app/makefile.mk b/vcl/aqua/source/app/makefile.mk
index 2bf3641898f1..a90c95c74a6e 100644
--- a/vcl/aqua/source/app/makefile.mk
+++ b/vcl/aqua/source/app/makefile.mk
@@ -50,8 +50,6 @@ dummy:
.ELSE # "$(GUIBASE)"!="aqua"
-#CFLAGS+=-x objective-c++
-
SLOFILES= $(SLO)$/salinst.obj \
$(SLO)$/saldata.obj \
$(SLO)$/vclnsapp.obj \
diff --git a/vcl/aqua/source/app/salinst.cxx b/vcl/aqua/source/app/salinst.cxx
index 71bfb7953187..e4037df0c4aa 100644
--- a/vcl/aqua/source/app/salinst.cxx
+++ b/vcl/aqua/source/app/salinst.cxx
@@ -55,6 +55,14 @@
#include "saltimer.h"
#include "vclnsapp.h"
+#include <comphelper/processfactory.hxx>
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/uri/XExternalUriReferenceTranslator.hpp>
+#include <com/sun/star/uri/ExternalUriReferenceTranslator.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
#include "premac.h"
#include <Foundation/Foundation.h>
#include <ApplicationServices/ApplicationServices.h>
@@ -64,6 +72,7 @@
using namespace std;
+using namespace ::com::sun::star;
extern BOOL ImplSVMain();
@@ -815,6 +824,18 @@ bool AquaSalInstance::AnyInput( USHORT nType )
return false;
}
+ if( nType & INPUT_TIMER )
+ {
+ if( AquaSalTimer::pRunningTimer )
+ {
+ NSDate* pDt = [AquaSalTimer::pRunningTimer fireDate];
+ if( pDt && [pDt timeIntervalSinceNow] < 0 )
+ {
+ return true;
+ }
+ }
+ }
+
unsigned/*NSUInteger*/ nEventMask = 0;
if( nType & INPUT_MOUSE)
nEventMask |=
@@ -828,7 +849,7 @@ bool AquaSalInstance::AnyInput( USHORT nType )
nEventMask |= NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask;
if( nType & INPUT_OTHER)
nEventMask |= NSTabletPoint;
- // TODO: INPUT_PAINT / INPUT_TIMER / more INPUT_OTHER
+ // TODO: INPUT_PAINT / more INPUT_OTHER
if( !nType)
return false;
@@ -1017,6 +1038,83 @@ void* AquaSalInstance::GetConnectionIdentifier( ConnectionIdentifierType& rRetur
return (void*)"";
}
+// We need to re-encode file urls because osl_getFileURLFromSystemPath converts
+// to UTF-8 before encoding non ascii characters, which is not what other apps expect.
+static rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl)
+{
+ rtl::OUString extUrl;
+
+ uno::Reference< lang::XMultiServiceFactory > sm = comphelper::getProcessServiceFactory();
+ if (sm.is())
+ {
+ uno::Reference< beans::XPropertySet > pset;
+ sm->queryInterface( getCppuType( &pset )) >>= pset;
+ if (pset.is())
+ {
+ uno::Reference< uno::XComponentContext > context;
+ static const rtl::OUString DEFAULT_CONTEXT( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) );
+ pset->getPropertyValue(DEFAULT_CONTEXT) >>= context;
+ if (context.is())
+ extUrl = uri::ExternalUriReferenceTranslator::create(context)->translateToExternal(internalUrl);
+ }
+ }
+ return extUrl;
+}
+
+// #i104525# many versions of OSX have problems with some URLs:
+// when an app requests OSX to add one of these URLs to the "Recent Items" list
+// then this app gets killed (TextEdit, Preview, etc. and also OOo)
+static bool isDangerousUrl( const rtl::OUString& rUrl )
+{
+ // use a heuristic that detects all known cases since there is no official comment
+ // on the exact impact and root cause of the OSX bug
+ const int nLen = rUrl.getLength();
+ const sal_Unicode* p = rUrl.getStr();
+ for( int i = 0; i < nLen-3; ++i, ++p ) {
+ if( p[0] != '%' )
+ continue;
+ // escaped percent?
+ if( (p[1] == '2') && (p[2] == '5') )
+ return true;
+ // escapes are considered to be UTF-8 encoded
+ // => check for invalid UTF-8 leading byte
+ if( (p[1] != 'f') && (p[1] != 'F') )
+ continue;
+ int cLowNibble = p[2];
+ if( (cLowNibble >= '0' ) && (cLowNibble <= '9'))
+ return false;
+ if( cLowNibble >= 'a' )
+ cLowNibble -= 'a' - 'A';
+ if( (cLowNibble < 'A') || (cLowNibble >= 'C'))
+ return true;
+ }
+
+ return false;
+}
+
+void AquaSalInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& /*rMimeType*/)
+{
+ // Convert file URL for external use (see above)
+ rtl::OUString externalUrl = translateToExternalUrl(rFileUrl);
+ if( 0 == externalUrl.getLength() )
+ externalUrl = rFileUrl;
+
+ if( externalUrl.getLength() && !isDangerousUrl( externalUrl ) )
+ {
+ NSString* pString = CreateNSString( externalUrl );
+ NSURL* pURL = [NSURL URLWithString: pString];
+
+ if( pURL )
+ {
+ NSDocumentController* pCtrl = [NSDocumentController sharedDocumentController];
+ [pCtrl noteNewRecentDocumentURL: pURL];
+ }
+ if( pString )
+ [pString release];
+ }
+}
+
+
// -----------------------------------------------------------------------
SalTimer* AquaSalInstance::CreateSalTimer()
diff --git a/vcl/aqua/source/app/vclnsapp.mm b/vcl/aqua/source/app/vclnsapp.mm
index 43d44c709c12..5a295b5e1171 100755
--- a/vcl/aqua/source/app/vclnsapp.mm
+++ b/vcl/aqua/source/app/vclnsapp.mm
@@ -104,6 +104,24 @@
return;
}
}
+
+ // #i90083# handle frame switching
+ // FIXME: lousy workaround
+ if( (nModMask & (NSControlKeyMask|NSAlternateKeyMask)) == 0 )
+ {
+ if( [[pEvent characters] isEqualToString: @"<"] ||
+ [[pEvent characters] isEqualToString: @"~"] )
+ {
+ [self cycleFrameForward: pFrame];
+ return;
+ }
+ else if( [[pEvent characters] isEqualToString: @">"] ||
+ [[pEvent characters] isEqualToString: @"`"] )
+ {
+ [self cycleFrameBackward: pFrame];
+ return;
+ }
+ }
// get information whether the event was handled; keyDown returns nothing
GetSalData()->maKeyEventAnswer[ pEvent ] = false;
@@ -186,6 +204,84 @@
{
[super sendEvent: pEvent];
}
+
+-(void)cycleFrameForward: (AquaSalFrame*)pCurFrame
+{
+ // find current frame in list
+ std::list< AquaSalFrame* >& rFrames( GetSalData()->maFrames );
+ std::list< AquaSalFrame* >::iterator it = rFrames.begin();
+ for( ; it != rFrames.end() && *it != pCurFrame; ++it )
+ ;
+ if( it != rFrames.end() )
+ {
+ // now find the next frame (or end)
+ do
+ {
+ ++it;
+ if( it != rFrames.end() )
+ {
+ if( (*it)->mpDockMenuEntry != NULL &&
+ (*it)->mbShown )
+ {
+ [(*it)->getWindow() makeKeyAndOrderFront: NSApp];
+ return;
+ }
+ }
+ } while( it != rFrames.end() );
+ // cycle around, find the next up to pCurFrame
+ it = rFrames.begin();
+ while( *it != pCurFrame )
+ {
+ if( (*it)->mpDockMenuEntry != NULL &&
+ (*it)->mbShown )
+ {
+ [(*it)->getWindow() makeKeyAndOrderFront: NSApp];
+ return;
+ }
+ ++it;
+ }
+ }
+}
+
+-(void)cycleFrameBackward: (AquaSalFrame*)pCurFrame
+{
+ // do the same as cycleFrameForward only with a reverse iterator
+
+ // find current frame in list
+ std::list< AquaSalFrame* >& rFrames( GetSalData()->maFrames );
+ std::list< AquaSalFrame* >::reverse_iterator it = rFrames.rbegin();
+ for( ; it != rFrames.rend() && *it != pCurFrame; ++it )
+ ;
+ if( it != rFrames.rend() )
+ {
+ // now find the next frame (or end)
+ do
+ {
+ ++it;
+ if( it != rFrames.rend() )
+ {
+ if( (*it)->mpDockMenuEntry != NULL &&
+ (*it)->mbShown )
+ {
+ [(*it)->getWindow() makeKeyAndOrderFront: NSApp];
+ return;
+ }
+ }
+ } while( it != rFrames.rend() );
+ // cycle around, find the next up to pCurFrame
+ it = rFrames.rbegin();
+ while( *it != pCurFrame )
+ {
+ if( (*it)->mpDockMenuEntry != NULL &&
+ (*it)->mbShown )
+ {
+ [(*it)->getWindow() makeKeyAndOrderFront: NSApp];
+ return;
+ }
+ ++it;
+ }
+ }
+}
-(NSMenu*)applicationDockMenu:(NSApplication *)sender
{
diff --git a/dtrans/source/aqua/DataFlavorMapping.cxx b/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
index ce042e15b4d8..af05f084a97e 100644
--- a/dtrans/source/aqua/DataFlavorMapping.cxx
+++ b/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
@@ -28,11 +28,13 @@
*
************************************************************************/
+#include "vcl/unohelp.hxx"
#include <DataFlavorMapping.hxx>
#include "HtmlFmtFlt.hxx"
#include "PictToBmpFlt.hxx"
-#include <com/sun/star/datatransfer/UnsupportedFlavorException.hpp>
-#include <com/sun/star/datatransfer/XMimeContentType.hpp>
+#include "com/sun/star/datatransfer/UnsupportedFlavorException.hpp"
+#include "com/sun/star/datatransfer/XMimeContentType.hpp"
+#include "com/sun/star/lang/XMultiServiceFactory.hpp"
#include "com/sun/star/uno/Sequence.hxx"
#include <rtl/ustring.hxx>
@@ -513,12 +515,11 @@ Any FileListDataProvider::getOOoData()
//###########################
-DataFlavorMapper::DataFlavorMapper(const Reference<XComponentContext>& context) :
- mXComponentContext(context)
+DataFlavorMapper::DataFlavorMapper()
{
- Reference<XMultiComponentFactory> mrServiceManager = mXComponentContext->getServiceManager();
- mrXMimeCntFactory = Reference<XMimeContentTypeFactory>(mrServiceManager->createInstanceWithContext(
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.datatransfer.MimeContentTypeFactory")), mXComponentContext), UNO_QUERY);
+ Reference<XMultiServiceFactory> mrServiceManager = vcl::unohelper::GetMultiServiceFactory();
+ mrXMimeCntFactory = Reference<XMimeContentTypeFactory>(mrServiceManager->createInstance(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.datatransfer.MimeContentTypeFactory"))), UNO_QUERY);
if (!mrXMimeCntFactory.is())
throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("AquaClipboard: Cannot create com.sun.star.datatransfer.MimeContentTypeFactory")), NULL);
diff --git a/dtrans/source/aqua/DataFlavorMapping.hxx b/vcl/aqua/source/dtrans/DataFlavorMapping.hxx
index 6243032d5051..03cb77e319f7 100644
--- a/dtrans/source/aqua/DataFlavorMapping.hxx
+++ b/vcl/aqua/source/dtrans/DataFlavorMapping.hxx
@@ -75,7 +75,7 @@ public:
/* Initialialize a DataFavorMapper instance. Throws a RuntimeException in case the XMimeContentTypeFactory service
cannot be created.
*/
- DataFlavorMapper(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& context);
+ DataFlavorMapper();
/* Map a system data flavor to an OpenOffice data flavor.
@@ -133,7 +133,6 @@ private:
bool isValidMimeContentType(const rtl::OUString& contentType) const;
private:
- const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> mXComponentContext;
::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XMimeContentTypeFactory> mrXMimeCntFactory;
};
diff --git a/dtrans/source/aqua/DragActionConversion.cxx b/vcl/aqua/source/dtrans/DragActionConversion.cxx
index 793dcca503a0..793dcca503a0 100644
--- a/dtrans/source/aqua/DragActionConversion.cxx
+++ b/vcl/aqua/source/dtrans/DragActionConversion.cxx
diff --git a/dtrans/source/aqua/DragActionConversion.hxx b/vcl/aqua/source/dtrans/DragActionConversion.hxx
index 137e2af30be1..137e2af30be1 100644
--- a/dtrans/source/aqua/DragActionConversion.hxx
+++ b/vcl/aqua/source/dtrans/DragActionConversion.hxx
diff --git a/dtrans/source/aqua/DragSource.cxx b/vcl/aqua/source/dtrans/DragSource.cxx
index c0e7bd6ece94..074ce5c6c318 100644
--- a/dtrans/source/aqua/DragSource.cxx
+++ b/vcl/aqua/source/dtrans/DragSource.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
#include <com/sun/star/datatransfer/XTransferable.hpp>
#include <com/sun/star/awt/MouseButton.hpp>
@@ -61,9 +61,6 @@ using namespace comphelper;
using namespace std;
-extern rtl_StandardModuleCount g_moduleCount;
-
-
// For OOo internal D&D we provide the Transferable without NSDragPboard
// interference as a shortcut
Reference<XTransferable> DragSource::g_XTransferable = Reference<XTransferable>();
@@ -161,14 +158,12 @@ Sequence<OUString> dragSource_getSupportedServiceNames()
@end
-DragSource::DragSource( const Reference<XComponentContext>& context):
+DragSource::DragSource():
WeakComponentImplHelper3<XDragSource, XInitialization, XServiceInfo>(m_aMutex),
- mXComponentContext(context),
mView(NULL),
mLastMouseEventBeforeStartDrag(nil),
m_MouseButton(0)
{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt);
}
@@ -176,7 +171,6 @@ DragSource::~DragSource()
{
[(id <MouseEventListener>)mView unregisterMouseEventListener: mDragSourceHelper];
[mDragSourceHelper release];
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
}
@@ -254,7 +248,7 @@ void SAL_CALL DragSource::startDrag(const DragGestureEvent& trigger,
m_MouseButton= mMouseEvent.Buttons;
mXDragSrcListener = listener;
mXCurrentContext = static_cast<XDragSourceContext*>(new DragSourceContext(this));
- auto_ptr<AquaClipboard> clipb(new AquaClipboard(this->mXComponentContext, NULL, false));
+ auto_ptr<AquaClipboard> clipb(new AquaClipboard(NULL, false));
g_XTransferable = transferable;
clipb->setContents(g_XTransferable, Reference<XClipboardOwner>());
mDragSourceActions = sourceActions;
diff --git a/dtrans/source/aqua/DragSource.hxx b/vcl/aqua/source/dtrans/DragSource.hxx
index 252b63fee41d..1268a466adf3 100644
--- a/dtrans/source/aqua/DragSource.hxx
+++ b/vcl/aqua/source/dtrans/DragSource.hxx
@@ -89,7 +89,7 @@ class DragSource : public ::cppu::BaseMutex,
private ::boost::noncopyable
{
public:
- DragSource(const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext>& context);
+ DragSource();
virtual ~DragSource();
// XInitialization
@@ -119,8 +119,6 @@ public:
virtual unsigned int getSupportedDragOperations(bool isLocal) const;
public:
- com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> mXComponentContext;
-
// The context notifies the XDragSourceListeners
com::sun::star::uno::Reference< com::sun::star::datatransfer::dnd::XDragSourceContext > mXCurrentContext;
diff --git a/dtrans/source/aqua/DragSourceContext.cxx b/vcl/aqua/source/dtrans/DragSourceContext.cxx
index f0496a297052..cd657a6147e9 100644
--- a/dtrans/source/aqua/DragSourceContext.cxx
+++ b/vcl/aqua/source/dtrans/DragSourceContext.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
@@ -43,20 +43,14 @@ using namespace com::sun::star::datatransfer::dnd::DNDConstants;
using namespace com::sun::star::uno;
using namespace cppu;
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-
DragSourceContext::DragSourceContext( DragSource* pSource) :
WeakComponentImplHelper1<XDragSourceContext>(m_aMutex),
m_pDragSource( pSource)
{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
}
DragSourceContext::~DragSourceContext()
{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
}
sal_Int32 SAL_CALL DragSourceContext::getCurrentCursor( )
diff --git a/dtrans/source/aqua/DragSourceContext.hxx b/vcl/aqua/source/dtrans/DragSourceContext.hxx
index 3526ec846fd6..3526ec846fd6 100644
--- a/dtrans/source/aqua/DragSourceContext.hxx
+++ b/vcl/aqua/source/dtrans/DragSourceContext.hxx
diff --git a/dtrans/source/aqua/DropTarget.cxx b/vcl/aqua/source/dtrans/DropTarget.cxx
index 6f973d7aa08f..88ffc1e51d02 100644
--- a/dtrans/source/aqua/DropTarget.cxx
+++ b/vcl/aqua/source/dtrans/DropTarget.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
#include <com/sun/star/datatransfer/XTransferable.hpp>
#include <com/sun/star/datatransfer/dnd/DropTargetDragEnterEvent.hpp>
@@ -65,8 +65,6 @@ using namespace com::sun::star::lang;
using namespace com::sun::star::uno;
using namespace comphelper;
-extern rtl_StandardModuleCount g_moduleCount;
-
OUString dropTarget_getImplementationName()
{
return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1"));
@@ -152,17 +150,15 @@ namespace /* private */
@end
-DropTarget::DropTarget( const Reference<XComponentContext>& context) :
+DropTarget::DropTarget() :
WeakComponentImplHelper5<XInitialization, XDropTarget, XDropTargetDragContext, XDropTargetDropContext, XServiceInfo>(m_aMutex),
- mXComponentContext(context),
mDropTargetHelper(nil),
mbActive(false),
mDragSourceSupportedActions(DNDConstants::ACTION_NONE),
mSelectedDropAction(DNDConstants::ACTION_NONE),
mDefaultActions(DNDConstants::ACTION_COPY_OR_MOVE | DNDConstants::ACTION_LINK | DNDConstants::ACTION_DEFAULT)
{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- mDataFlavorMapper = DataFlavorMapperPtr_t(new DataFlavorMapper(mXComponentContext));
+ mDataFlavorMapper = DataFlavorMapperPtr_t(new DataFlavorMapper());
}
@@ -170,7 +166,6 @@ DropTarget::~DropTarget()
{
[(id <DraggingDestinationHandler>)mView unregisterDraggingDestinationHandler:mDropTargetHelper];
[mDropTargetHelper release];
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
}
@@ -249,7 +244,7 @@ NSDragOperation DropTarget::draggingEntered(id sender)
sal_Int32 posY = static_cast<sal_Int32>(dragLocation.y);
NSPasteboard* dragPboard = [sender draggingPasteboard];
- mXCurrentDragClipboard = new AquaClipboard(mXComponentContext, dragPboard, false);
+ mXCurrentDragClipboard = new AquaClipboard(dragPboard, false);
Reference<XTransferable> xTransferable = DragSource::g_XTransferable.is() ?
DragSource::g_XTransferable : mXCurrentDragClipboard->getContents();
@@ -297,6 +292,9 @@ NSDragOperation DropTarget::draggingUpdated(id sender)
fire_dragOver(dtde);
+ // drag over callbacks likely have rendered something
+ [mView setNeedsDisplay: TRUE];
+
dragOp = OfficeToSystemDragActions(mSelectedDropAction);
//NSLog(@"Drag update: Source actions: %x proposed action %x selected action %x", mDragSourceSupportedActions, currentAction, mSelectedDropAction);
diff --git a/dtrans/source/aqua/DropTarget.hxx b/vcl/aqua/source/dtrans/DropTarget.hxx
index f65de4ff164e..91b50c041916 100644
--- a/dtrans/source/aqua/DropTarget.hxx
+++ b/vcl/aqua/source/dtrans/DropTarget.hxx
@@ -95,7 +95,7 @@ class DropTarget: public cppu::BaseMutex,
private boost::noncopyable
{
public:
- DropTarget(const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& context);
+ DropTarget();
virtual ~DropTarget();
// Overrides WeakComponentImplHelper::disposing which is called by
@@ -157,7 +157,6 @@ private:
void fire_dropActionChanged(const com::sun::star::datatransfer::dnd::DropTargetDragEvent& dtde);
private:
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > mXComponentContext;
com::sun::star::uno::Reference< com::sun::star::datatransfer::dnd::XDropTargetDragContext > mXCurrentDragContext;
com::sun::star::uno::Reference< com::sun::star::datatransfer::dnd::XDropTargetDropContext > mXCurrentDropContext;
com::sun::star::uno::Reference< com::sun::star::datatransfer::clipboard::XClipboard > mXCurrentDragClipboard;
diff --git a/dtrans/source/aqua/HtmlFmtFlt.cxx b/vcl/aqua/source/dtrans/HtmlFmtFlt.cxx
index 3f558b0a5b4f..3f558b0a5b4f 100644
--- a/dtrans/source/aqua/HtmlFmtFlt.cxx
+++ b/vcl/aqua/source/dtrans/HtmlFmtFlt.cxx
diff --git a/dtrans/source/aqua/HtmlFmtFlt.hxx b/vcl/aqua/source/dtrans/HtmlFmtFlt.hxx
index 49f0cc70590c..49f0cc70590c 100644
--- a/dtrans/source/aqua/HtmlFmtFlt.hxx
+++ b/vcl/aqua/source/dtrans/HtmlFmtFlt.hxx
diff --git a/dtrans/source/aqua/OSXTransferable.cxx b/vcl/aqua/source/dtrans/OSXTransferable.cxx
index a4f5b7807935..a893f09d89cc 100644
--- a/dtrans/source/aqua/OSXTransferable.cxx
+++ b/vcl/aqua/source/dtrans/OSXTransferable.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <sal/types.h>
#ifndef _TRANSFERABLE_HXX_
@@ -63,11 +63,9 @@ namespace // private
} // namespace private
-OSXTransferable::OSXTransferable(const Reference< XComponentContext >& context,
- const Reference<XMimeContentTypeFactory> rXMimeCntFactory,
+OSXTransferable::OSXTransferable(const Reference<XMimeContentTypeFactory> rXMimeCntFactory,
DataFlavorMapperPtr_t pDataFlavorMapper,
NSPasteboard* pasteboard) :
- mXComponentContext(context),
mrXMimeCntFactory(rXMimeCntFactory),
mDataFlavorMapper(pDataFlavorMapper),
mPasteboard(pasteboard)
diff --git a/dtrans/source/aqua/OSXTransferable.hxx b/vcl/aqua/source/dtrans/OSXTransferable.hxx
index d231611f0aaf..9b371523c440 100644
--- a/dtrans/source/aqua/OSXTransferable.hxx
+++ b/vcl/aqua/source/dtrans/OSXTransferable.hxx
@@ -58,8 +58,7 @@ class OSXTransferable : public ::cppu::WeakImplHelper1<com::sun::star::datatrans
public:
typedef com::sun::star::uno::Sequence< sal_Int8 > ByteSequence_t;
- explicit OSXTransferable(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& context,
- ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XMimeContentTypeFactory> rXMimeCntFactory,
+ explicit OSXTransferable(com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XMimeContentTypeFactory> rXMimeCntFactory,
DataFlavorMapperPtr_t pDataFlavorMapper,
NSPasteboard* pasteboard);
@@ -96,7 +95,6 @@ public:
private:
com::sun::star::uno::Sequence< com::sun::star::datatransfer::DataFlavor > mFlavorList;
- const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mXComponentContext;
::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XMimeContentTypeFactory> mrXMimeCntFactory;
DataFlavorMapperPtr_t mDataFlavorMapper;
NSPasteboard* mPasteboard;
diff --git a/dtrans/source/aqua/PictToBmpFlt.cxx b/vcl/aqua/source/dtrans/PictToBmpFlt.cxx
index 0643efae33ca..0643efae33ca 100644
--- a/dtrans/source/aqua/PictToBmpFlt.cxx
+++ b/vcl/aqua/source/dtrans/PictToBmpFlt.cxx
diff --git a/dtrans/source/aqua/PictToBmpFlt.hxx b/vcl/aqua/source/dtrans/PictToBmpFlt.hxx
index 29e9c535546f..29e9c535546f 100644
--- a/dtrans/source/aqua/PictToBmpFlt.hxx
+++ b/vcl/aqua/source/dtrans/PictToBmpFlt.hxx
diff --git a/dtrans/source/aqua/aqua_clipboard.cxx b/vcl/aqua/source/dtrans/aqua_clipboard.cxx
index 370edee90eb7..27bf308dce9b 100644
--- a/dtrans/source/aqua/aqua_clipboard.cxx
+++ b/vcl/aqua/source/dtrans/aqua_clipboard.cxx
@@ -29,15 +29,15 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include "aqua_clipboard.hxx"
#include "DataFlavorMapping.hxx"
#include "OSXTransferable.hxx"
-#ifndef COMPHELPER_MAKESEQUENCE_HXX_INCLUDED
+#include "vcl/unohelp.hxx"
+
#include "comphelper/makesequence.hxx"
-#endif
#include <boost/assert.hpp>
@@ -95,15 +95,14 @@ Sequence<OUString> clipboard_getSupportedServiceNames()
}
-AquaClipboard::AquaClipboard(const Reference< XComponentContext >& context, NSPasteboard* pasteboard, bool bUseSystemPasteboard) :
+AquaClipboard::AquaClipboard(NSPasteboard* pasteboard, bool bUseSystemPasteboard) :
WeakComponentImplHelper4<XClipboardEx, XClipboardNotifier, XFlushableClipboard, XServiceInfo>(m_aMutex),
- mXComponentContext(context),
mIsSystemPasteboard(bUseSystemPasteboard)
{
- Reference<XMultiComponentFactory> mrServiceMgr = mXComponentContext->getServiceManager();
+ Reference<XMultiServiceFactory> mrServiceMgr = vcl::unohelper::GetMultiServiceFactory();
- mrXMimeCntFactory = Reference<XMimeContentTypeFactory>(mrServiceMgr->createInstanceWithContext(
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.datatransfer.MimeContentTypeFactory")), mXComponentContext), UNO_QUERY);
+ mrXMimeCntFactory = Reference<XMimeContentTypeFactory>(mrServiceMgr->createInstance(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.datatransfer.MimeContentTypeFactory"))), UNO_QUERY);
if (!mrXMimeCntFactory.is())
{
@@ -112,7 +111,7 @@ AquaClipboard::AquaClipboard(const Reference< XComponentContext >& context, NSPa
static_cast<XClipboardEx*>(this));
}
- mpDataFlavorMapper = DataFlavorMapperPtr_t(new DataFlavorMapper(mXComponentContext));
+ mpDataFlavorMapper = DataFlavorMapperPtr_t(new DataFlavorMapper());
if (pasteboard != NULL)
{
@@ -183,8 +182,7 @@ Reference<XTransferable> SAL_CALL AquaClipboard::getContents() throw(RuntimeExce
return mXClipboardContent;
}
- return Reference<XTransferable>(new OSXTransferable(mXComponentContext,
- mrXMimeCntFactory,
+ return Reference<XTransferable>(new OSXTransferable(mrXMimeCntFactory,
mpDataFlavorMapper,
mPasteboard));
}
diff --git a/dtrans/source/aqua/aqua_clipboard.hxx b/vcl/aqua/source/dtrans/aqua_clipboard.hxx
index 3de02f5dcdcd..90bb404fdb36 100644
--- a/dtrans/source/aqua/aqua_clipboard.hxx
+++ b/vcl/aqua/source/dtrans/aqua_clipboard.hxx
@@ -92,8 +92,7 @@ public:
system clipboard will be created (bUseSystemClipboard == true) or if
the DragPasteboard if bUseSystemClipboard == false
*/
- AquaClipboard(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& context,
- NSPasteboard* pasteboard = NULL,
+ AquaClipboard(NSPasteboard* pasteboard = NULL,
bool bUseSystemClipboard = true);
~AquaClipboard();
@@ -171,7 +170,6 @@ private:
void fireClipboardChangedEvent();
private:
- const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mXComponentContext;
::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XMimeContentTypeFactory > mrXMimeCntFactory;
::std::list< ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener > > mClipboardListeners;
::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > mXClipboardContent;
diff --git a/dtrans/source/aqua/aqua_service.cxx b/vcl/aqua/source/dtrans/aqua_service.cxx
index 39453683a2cc..aeaf697670ef 100644
--- a/dtrans/source/aqua/aqua_service.cxx
+++ b/vcl/aqua/source/dtrans/aqua_service.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include "aqua_clipboard.hxx"
#include <cppuhelper/factory.hxx>
#include <com/sun/star/container/XSet.hpp>
diff --git a/dtrans/source/aqua/makefile.mk b/vcl/aqua/source/dtrans/makefile.mk
index e0b4eecf6db4..e802c98abf64 100644
--- a/dtrans/source/aqua/makefile.mk
+++ b/vcl/aqua/source/dtrans/makefile.mk
@@ -29,17 +29,11 @@
#
#*************************************************************************
-PRJ=..$/..
+PRJ=..$/..$/..
-PRJNAME=dtrans
+PRJNAME=vcl
TARGET=dtransaqua
ENABLE_EXCEPTIONS=TRUE
-LIBTARGET=NO
-.IF "$(OS)"=="MACOSX"
-.IF "$(GUIBASE)"=="aqua"
-COMP1TYPELIST=$(TARGET)
-.ENDIF # "$(GUIBASE)"=="aqua"
-.ENDIF # "$(OS)"=="MACOSX"
# --- Settings -----------------------------------------------------
@@ -70,35 +64,7 @@ SLOFILES= \
$(SLO)$/DragSourceContext.obj \
$(SLO)$/DragActionConversion.obj
-SHL1TARGET=$(TARGET)$(DLLPOSTFIX)
-
-SHL1STDLIBS= \
- $(SALLIB) \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- -framework Carbon \
- -framework QuickTime \
- -framework Cocoa
-
-SHL1DEPN=
-SHL1IMPLIB= i$(SHL1TARGET)
-
-SHL1OBJS= $(SLOFILES)
-
-#APP1NOSAL=TRUE
-#APP1TARGET=test_aquacb
-#APP1OBJS=$(SLO)$/test_aquacb.obj
-#APP1STDLIBS=
-#$(SALLIB)
-#$(CPPULIB)
-#$(CPPUHELPERLIB)
-#-framework Cocoa
-
# --- Targets ------------------------------------------------------
-
-ALL : ALLTAR
- +cd $(LB) && $(REGCOMP) -register -r ../bin/$(COMP1TYPELIST).rdb -c $(SHL1TARGET)
-
.INCLUDE : target.mk
.ENDIF # "$(GUIBASE)"!="aqua"
diff --git a/vcl/aqua/source/dtrans/service_entry.cxx b/vcl/aqua/source/dtrans/service_entry.cxx
new file mode 100644
index 000000000000..38784ecb53dd
--- /dev/null
+++ b/vcl/aqua/source/dtrans/service_entry.cxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: service_entry.cxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include "saldata.hxx"
+#include "salinst.h"
+#include "DragSource.hxx"
+#include "DropTarget.hxx"
+#include "aqua_clipboard.hxx"
+#include "osl/diagnose.h"
+
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::cppu;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::datatransfer::clipboard;
+
+
+Reference< XInterface > AquaSalInstance::CreateClipboard( const Sequence< Any >& i_rArguments )
+{
+ SalData* pSalData = GetSalData();
+ if( ! pSalData->mxClipboard.is() )
+ pSalData->mxClipboard = Reference<XInterface>(static_cast< XClipboard* >(new AquaClipboard()), UNO_QUERY);
+ return pSalData->mxClipboard;
+}
+
+
+Reference<XInterface> AquaSalInstance::CreateDragSource()
+{
+ return Reference<XInterface>(static_cast< XInitialization* >(new DragSource()), UNO_QUERY);
+}
+
+Reference<XInterface> AquaSalInstance::CreateDropTarget()
+{
+ return Reference<XInterface>(static_cast< XInitialization* >(new DropTarget()), UNO_QUERY);
+}
+
diff --git a/dtrans/source/aqua/test_aquacb.cxx b/vcl/aqua/source/dtrans/test_aquacb.cxx
index bcb9dcd164df..db60712ce852 100644
--- a/dtrans/source/aqua/test_aquacb.cxx
+++ b/vcl/aqua/source/dtrans/test_aquacb.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include "aqua_clipboard.hxx"
#include <cppuhelper/servicefactory.hxx>
diff --git a/vcl/aqua/source/gdi/salatsuifontutils.cxx b/vcl/aqua/source/gdi/salatsuifontutils.cxx
index 595b7d276a2a..8e38981a3c7c 100644
--- a/vcl/aqua/source/gdi/salatsuifontutils.cxx
+++ b/vcl/aqua/source/gdi/salatsuifontutils.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salatsuifontutils.cxx,v $
- * $Revision: 1.13.138.6 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -210,12 +207,8 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF
rDFA.meItalic = ITALIC_NONE;
rDFA.mbSymbolFlag = false;
- // get the embeddable + subsettable status
- // TODO: remove test after PS-OpenType subsetting is implemented
- ATSFontRef rATSFontRef = FMGetATSFontRefFromFont( nFontID );
- ByteCount nGlyfLen = 0;
- OSStatus rc = ATSFontGetTable( rATSFontRef, 0x676c7966/*glyf*/, 0, 0, NULL, &nGlyfLen);
- rDFA.mbSubsettable = ((rc == noErr) && (nGlyfLen > 0));
+ // all scalable fonts on this platform are subsettable
+ rDFA.mbSubsettable = true;
rDFA.mbEmbeddable = false;
// TODO: these members are needed only for our X11 platform targets
rDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
@@ -223,7 +216,7 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF
// prepare iterating over all name strings of the font
ItemCount nFontNameCount = 0;
- rc = ATSUCountFontNames( nFontID, &nFontNameCount );
+ OSStatus rc = ATSUCountFontNames( nFontID, &nFontNameCount );
if( rc != noErr )
return false;
int nBestNameValue = 0;
@@ -269,7 +262,7 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF
case 0x30A: nNameValue += 0; // Win-UCS-4
eEncoding = RTL_TEXTENCODING_UCS4;
break;
- case 0x100: nNameValue += 21; // Mac Roman
+ case 0x100: nNameValue += 21; // Mac Roman
eEncoding = RTL_TEXTENCODING_APPLE_ROMAN;
break;
case 0x300: nNameValue = 0; // Win Symbol encoded name!
diff --git a/vcl/aqua/source/gdi/salbmp.cxx b/vcl/aqua/source/gdi/salbmp.cxx
index 42f29d677b52..8b7b23a681a0 100644
--- a/vcl/aqua/source/gdi/salbmp.cxx
+++ b/vcl/aqua/source/gdi/salbmp.cxx
@@ -214,16 +214,26 @@ bool AquaSalBitmap::CreateContext()
{
// convert user data to 32 bit
nContextBytesPerRow = mnWidth << 2;
- maContextBuffer.reset( new sal_uInt8[ mnHeight * nContextBytesPerRow ] );
+ try
+ {
+ maContextBuffer.reset( new sal_uInt8[ mnHeight * nContextBytesPerRow ] );
- if( !bSkipConversion )
- ConvertBitmapData( mnWidth, mnHeight,
- 32, nContextBytesPerRow, maPalette, maContextBuffer.get(),
- mnBits, mnBytesPerRow, maPalette, maUserBuffer.get() );
+ if( !bSkipConversion )
+ ConvertBitmapData( mnWidth, mnHeight,
+ 32, nContextBytesPerRow, maPalette, maContextBuffer.get(),
+ mnBits, mnBytesPerRow, maPalette, maUserBuffer.get() );
+ }
+ catch( std::bad_alloc )
+ {
+ mxGraphicContext = 0;
+ }
}
- mxGraphicContext = ::CGBitmapContextCreate( maContextBuffer.get(), mnWidth, mnHeight,
- bitsPerComponent, nContextBytesPerRow, aCGColorSpace, aCGBmpInfo );
+ if( maContextBuffer.get() )
+ {
+ mxGraphicContext = ::CGBitmapContextCreate( maContextBuffer.get(), mnWidth, mnHeight,
+ bitsPerComponent, nContextBytesPerRow, aCGColorSpace, aCGBmpInfo );
+ }
if( !mxGraphicContext )
maContextBuffer.reset();
diff --git a/vcl/aqua/source/gdi/salgdi.cxx b/vcl/aqua/source/gdi/salgdi.cxx
index 223aeff0d02f..7f71d0e9bc72 100644
--- a/vcl/aqua/source/gdi/salgdi.cxx
+++ b/vcl/aqua/source/gdi/salgdi.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salgdi.cxx,v $
- * $Revision: 1.81.14.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -40,6 +37,7 @@
#include "salatsuifontutils.hxx"
#include "vcl/impfont.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/sysdata.hxx"
#include "vcl/sallayout.hxx"
#include "vcl/svapp.hxx"
@@ -153,7 +151,7 @@ ImplFontCharMap* ImplMacFontData::GetImplFontCharMap() const
if( !ParseCMAP( &aBuffer[0], nRawLength, aCmapResult ) )
return mpCharMap;
- mpCharMap = new ImplFontCharMap( aCmapResult.mnPairCount, aCmapResult.mpPairCodes, aCmapResult.mpStartGlyphs );
+ mpCharMap = new ImplFontCharMap( aCmapResult );
return mpCharMap;
}
@@ -175,8 +173,7 @@ void ImplMacFontData::ReadOs2Table( void ) const
return;
// allocate a buffer for the OS/2 raw data
- ByteVector aBuffer;
- aBuffer.resize( nBufSize );
+ ByteVector aBuffer( nBufSize );
// get the OS/2 raw data
ByteCount nRawLength = 0;
@@ -215,8 +212,7 @@ void ImplMacFontData::ReadMacCmapEncoding( void ) const
if( eStatus != noErr )
return;
- ByteVector aBuffer;
- aBuffer.resize( nBufSize );
+ ByteVector aBuffer( nBufSize );
ByteCount nRawLength = 0;
eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
@@ -1994,15 +1990,30 @@ static void FakeDirEntry( FourCharCode eFCC, ByteCount nOfs, ByteCount nLen,
}
static bool GetRawFontData( const ImplFontData* pFontData,
- ByteVector& rBuffer )
+ ByteVector& rBuffer, bool* pJustCFF )
{
const ImplMacFontData* pMacFont = static_cast<const ImplMacFontData*>(pFontData);
const ATSUFontID nFontId = static_cast<ATSUFontID>(pMacFont->GetFontId());
ATSFontRef rFont = FMGetATSFontRefFromFont( nFontId );
+ ByteCount nCffLen = 0;
+ OSStatus eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, 0, NULL, &nCffLen);
+ if( pJustCFF != NULL )
+ {
+ *pJustCFF = (eStatus == noErr) && (nCffLen > 0);
+ if( *pJustCFF )
+ {
+ rBuffer.resize( nCffLen );
+ eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[0], &nCffLen);
+ if( (eStatus != noErr) || (nCffLen <= 0) )
+ return false;
+ return true;
+ }
+ }
+
// get font table availability and size in bytes
ByteCount nHeadLen = 0;
- OSStatus eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen);
+ eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen);
if( (eStatus != noErr) || (nHeadLen <= 0) )
return false;
ByteCount nMaxpLen = 0;
@@ -2013,14 +2024,6 @@ static bool GetRawFontData( const ImplFontData* pFontData,
eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, 0, NULL, &nCmapLen);
if( (eStatus != noErr) || (nCmapLen <= 0) )
return false;
- ByteCount nLocaLen = 0;
- eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen);
- if( (eStatus != noErr) || (nLocaLen <= 0) )
- return false;
- ByteCount nGlyfLen = 0;
- eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen);
- if( (eStatus != noErr) || (nGlyfLen <= 0) )
- return false;
ByteCount nNameLen = 0;
eStatus = ATSFontGetTable( rFont, GetTag("name"), 0, 0, NULL, &nNameLen);
if( (eStatus != noErr) || (nNameLen <= 0) )
@@ -2034,8 +2037,21 @@ static bool GetRawFontData( const ImplFontData* pFontData,
if( (eStatus != noErr) || (nHmtxLen <= 0) )
return false;
+ // get the glyph outline tables
+ ByteCount nLocaLen = 0;
+ ByteCount nGlyfLen = 0;
+ if( (eStatus != noErr) || (nCffLen <= 0) )
+ {
+ eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen);
+ if( (eStatus != noErr) || (nLocaLen <= 0) )
+ return false;
+ eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen);
+ if( (eStatus != noErr) || (nGlyfLen <= 0) )
+ return false;
+ }
+
ByteCount nPrepLen=0, nCvtLen=0, nFpgmLen=0;
- if( 1 ) // TODO: reduce PDF size by making hint subsetting optional
+ if( nGlyfLen ) // TODO: reduce PDF size by making hint subsetting optional
{
eStatus = ATSFontGetTable( rFont, GetTag("prep"), 0, 0, NULL, &nPrepLen);
eStatus = ATSFontGetTable( rFont, GetTag("cvt "), 0, 0, NULL, &nCvtLen);
@@ -2043,11 +2059,15 @@ static bool GetRawFontData( const ImplFontData* pFontData,
}
// prepare a byte buffer for a fake font
- int nTableCount = 8;
- nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0);
+ int nTableCount = 7;
+ nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0) + (nGlyfLen>0);
const ByteCount nFdirLen = 12 + 16*nTableCount;
ByteCount nTotalLen = nFdirLen;
- nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen + nLocaLen + nGlyfLen;
+ nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen;
+ if( nGlyfLen )
+ nTotalLen += nLocaLen + nGlyfLen;
+ else
+ nTotalLen += nCffLen;
nTotalLen += nHheaLen + nHmtxLen;
nTotalLen += nPrepLen + nCvtLen + nFpgmLen;
rBuffer.resize( nTotalLen );
@@ -2080,9 +2100,18 @@ static bool GetRawFontData( const ImplFontData* pFontData,
FakeDirEntry( GetTag("fpgm"), nOfs, nFpgmLen, &rBuffer[0], pFakeEntry );
nOfs += nFpgmLen;
}
- eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen);
- FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry );
- nOfs += nGlyfLen;
+ if( nCffLen ) {
+ eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[nOfs], &nCffLen);
+ FakeDirEntry( GetTag("CFF "), nOfs, nCffLen, &rBuffer[0], pFakeEntry );
+ nOfs += nGlyfLen;
+ } else {
+ eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen);
+ FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry );
+ nOfs += nGlyfLen;
+ eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen);
+ FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry );
+ nOfs += nLocaLen;
+ }
eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, nHeadLen, (void*)&rBuffer[nOfs], &nHeadLen);
FakeDirEntry( GetTag("head"), nOfs, nHeadLen, &rBuffer[0], pFakeEntry );
nOfs += nHeadLen;
@@ -2092,9 +2121,6 @@ static bool GetRawFontData( const ImplFontData* pFontData,
eStatus = ATSFontGetTable( rFont, GetTag("hmtx"), 0, nHmtxLen, (void*)&rBuffer[nOfs], &nHmtxLen);
FakeDirEntry( GetTag("hmtx"), nOfs, nHmtxLen, &rBuffer[0], pFakeEntry );
nOfs += nHmtxLen;
- eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen);
- FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry );
- nOfs += nLocaLen;
eStatus = ATSFontGetTable( rFont, GetTag("maxp"), 0, nMaxpLen, (void*)&rBuffer[nOfs], &nMaxpLen);
FakeDirEntry( GetTag("maxp"), nOfs, nMaxpLen, &rBuffer[0], pFakeEntry );
nOfs += nMaxpLen;
@@ -2116,10 +2142,38 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
const ImplFontData* pFontData, long* pGlyphIDs, sal_uInt8* pEncoding,
sal_Int32* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rInfo )
{
+ // TODO: move more of the functionality here into the generic subsetter code
+
+ // prepare the requested file name for writing the font-subset file
+ rtl::OUString aSysPath;
+ if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
+ return FALSE;
+ const rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
+ const ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) );
+
+ // get the raw-bytes from the font to be subset
ByteVector aBuffer;
- if( !GetRawFontData( pFontData, aBuffer ) )
+ bool bCffOnly = false;
+ if( !GetRawFontData( pFontData, aBuffer, &bCffOnly ) )
return sal_False;
+ // handle CFF-subsetting
+ if( bCffOnly )
+ {
+ // provide the raw-CFF data to the subsetter
+ ByteCount nCffLen = aBuffer.size();
+ rInfo.LoadFont( FontSubsetInfo::CFF_FONT, &aBuffer[0], nCffLen );
+
+ // NOTE: assuming that all glyphids requested on Aqua are fully translated
+
+ // make the subsetter provide the requested subset
+ FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" );
+ bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, NULL,
+ pGlyphIDs, pEncoding, nGlyphCount, pGlyphWidths );
+ fclose( pOutFile );
+ return bRC;
+ }
+
// TODO: modernize psprint's horrible fontsubset C-API
// this probably only makes sense after the switch to another SCM
// that can preserve change history after file renames
@@ -2133,7 +2187,7 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
// get details about the subsetted font
TTGlobalFontInfo aTTInfo;
::GetTTGlobalFontInfo( pSftFont, &aTTInfo );
- rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;
+ rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF;
rInfo.m_aPSName = String( aTTInfo.psname, RTL_TEXTENCODING_UTF8 );
rInfo.m_aFontBBox = Rectangle( Point( aTTInfo.xMin, aTTInfo.yMin ),
Point( aTTInfo.xMax, aTTInfo.yMax ) );
@@ -2211,11 +2265,6 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
free( pGlyphMetrics );
// write subset into destination file
- rtl::OUString aSysPath;
- if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
- return FALSE;
- rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
- ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) );
nRC = ::CreateTTFromTTGlyphs( pSftFont, aToFile.GetBuffer(), aShortIDs,
aTempEncs, nGlyphCount, 0, NULL, 0 );
::CloseTTFont(pSftFont);
@@ -2233,7 +2282,7 @@ void AquaSalGraphics::GetGlyphWidths( const ImplFontData* pFontData, bool bVerti
if( pFontData->IsSubsettable() )
{
ByteVector aBuffer;
- if( !GetRawFontData( pFontData, aBuffer ) )
+ if( !GetRawFontData( pFontData, aBuffer, NULL ) )
return;
// TODO: modernize psprint's horrible fontsubset C-API
@@ -2318,7 +2367,6 @@ const void* AquaSalGraphics::GetEmbedFontData( const ImplFontData* pFontData,
FontSubsetInfo& rInfo,
long* pDataLen )
{
- // TODO: are the non-subsettable fonts on OSX that are embeddable?
return NULL;
}
diff --git a/vcl/aqua/source/window/salframe.cxx b/vcl/aqua/source/window/salframe.cxx
index 9c713ea26a52..b942c97cead1 100644
--- a/vcl/aqua/source/window/salframe.cxx
+++ b/vcl/aqua/source/window/salframe.cxx
@@ -43,6 +43,7 @@
#include "aqua11yfactory.h"
#include "vcl/salwtype.hxx"
#include "vcl/window.hxx"
+#include "vcl/timer.hxx"
#include "premac.h"
// needed for theming
@@ -749,16 +750,37 @@ void AquaSalFrame::ShowFullScreen( BOOL bFullScreen, sal_Int32 nDisplay )
// -----------------------------------------------------------------------
+class PreventSleepTimer : public AutoTimer
+{
+public:
+ PreventSleepTimer()
+ {
+ SetTimeout( 30000 );
+ Start();
+ }
+
+ virtual ~PreventSleepTimer()
+ {
+ }
+
+ virtual void Timeout()
+ {
+ UpdateSystemActivity(OverallAct);
+ }
+};
+
void AquaSalFrame::StartPresentation( BOOL bStart )
{
if( bStart )
{
+ mpActivityTimer.reset( new PreventSleepTimer() );
[mpWindow setLevel: NSScreenSaverWindowLevel];
if( mbShown )
[mpWindow makeMainWindow];
}
else
{
+ mpActivityTimer.reset();
[mpWindow setLevel: NSNormalWindowLevel];
}
}
@@ -1173,6 +1195,7 @@ void AquaSalFrame::UpdateSettings( AllSettings& rSettings )
Color aMenuTextColor( getColor( [NSColor textColor],
aStyleSettings.GetMenuTextColor(), mpWindow ) );
aStyleSettings.SetMenuTextColor( aMenuTextColor );
+ aStyleSettings.SetMenuBarTextColor( aMenuTextColor );
aStyleSettings.SetCursorBlinkTime( 500 );
diff --git a/vcl/aqua/source/window/salframeview.mm b/vcl/aqua/source/window/salframeview.mm
index c7facd8c6c09..68ea2c2062f2 100755
--- a/vcl/aqua/source/window/salframeview.mm
+++ b/vcl/aqua/source/window/salframeview.mm
@@ -184,6 +184,8 @@ static AquaSalFrame* getMouseContainerFrame()
return YES;
if( mpFrame->mbFullScreen )
return YES;
+ if( (mpFrame->mnStyle & SAL_FRAME_STYLE_FLOAT_FOCUSABLE) )
+ return YES;
return [super canBecomeKeyWindow];
}
@@ -1420,7 +1422,7 @@ private:
return 0;
}
-#ifdef MAC_OS_X_VERSION_10_5
+#if defined(MAC_OS_X_VERSION_10_5) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
/* build target 10.5 or greater */
- (NSInteger)conversationIdentifier
#else
diff --git a/vcl/inc/list.h b/vcl/inc/list.h
index b801b43d77eb..66bff6912bc0 100644
--- a/vcl/inc/list.h
+++ b/vcl/inc/list.h
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: list.h,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,8 +25,6 @@
*
************************************************************************/
-/* $Id: list.h,v 1.4 2008-06-25 14:20:01 kz Exp $ */
-
/*[]---------------------------------------------------[]*/
/*| |*/
/*| Implementation of the list data type |*/
diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx
index 5f22bc0a471f..e2252802ba18 100644
--- a/vcl/inc/sft.hxx
+++ b/vcl/inc/sft.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: sft.h,v $
- * $Revision: 1.21 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,11 +25,7 @@
*
************************************************************************/
-/* $Id: sft.h,v 1.21 2008-06-25 14:20:49 kz Exp $ */
-
/**
-
- *
* @file sft.h
* @brief Sun Font Tools
* @author Alexander Gelfenbain
@@ -245,9 +238,13 @@ namespace vcl
sal_uInt32 ur3; /**< bits 64 - 95 of Unicode Range flags */
sal_uInt32 ur4; /**< bits 96 - 127 of Unicode Range flags */
sal_uInt8 panose[10]; /**< PANOSE classification number */
- sal_uInt16 typeFlags; /**< type flags (copyright information) */
+ sal_uInt32 typeFlags; /**< type flags (copyright bits + PS-OpenType flag) */
} TTGlobalFontInfo;
+#define TYPEFLAG_INVALID 0x8000000
+#define TYPEFLAG_COPYRIGHT_MASK 0x000000E
+#define TYPEFLAG_PS_OPENTYPE 0x0010000
+
/** Structure used by KernGlyphs() */
typedef struct {
int x; /**< positive: right, negative: left */
@@ -569,6 +566,12 @@ namespace vcl
*/
int GetTTGlyphCount( TrueTypeFont* ttf );
+/**
+ * provide access to the raw data of a SFNT-container's subtable
+ */
+ bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex,
+ const sal_uInt8** ppRawBytes, int* pRawLength );
+
/*- private definitions */ /*FOLD00*/
struct _TrueTypeFont {
@@ -590,14 +593,14 @@ namespace vcl
sal_uInt32 unitsPerEm;
sal_uInt32 numberOfHMetrics;
sal_uInt32 numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */
- sal_uInt8 *cmap;
+ const sal_uInt8* cmap;
int cmapType;
sal_uInt32 (*mapper)(const sal_uInt8 *, sal_uInt32); /* character to glyphID translation function */
- sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */
+ const sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */
sal_uInt32 *tlens; /* array of table lengths */
int kerntype; /* Defined in the KernType enum */
sal_uInt32 nkern; /* number of kern subtables */
- sal_uInt8 **kerntables; /* array of pointers to kern subtables */
+ const sal_uInt8** kerntables; /* array of pointers to kern subtables */
void *pGSubstitution; /* info provided by GSUB for UseGSUB() */
};
@@ -619,7 +622,8 @@ namespace vcl
#define O_prep 14 /* 'prep' - only used in TT->TT generation */
#define O_fpgm 15 /* 'fpgm' - only used in TT->TT generation */
#define O_gsub 16 /* 'GSUB' */
-#define NUM_TAGS 17
+#define O_CFF 17 /* 'CFF' */
+#define NUM_TAGS 18
} // namespace vcl
diff --git a/vcl/inc/vcl/floatwin.hxx b/vcl/inc/vcl/floatwin.hxx
index 8dcba41e2a8e..02ac18ac28f8 100644
--- a/vcl/inc/vcl/floatwin.hxx
+++ b/vcl/inc/vcl/floatwin.hxx
@@ -157,6 +157,8 @@ public:
const Link& GetPopupModeEndHdl() const { return maPopupModeEndHdl; }
BOOL GrabsFocus() const { return mbGrabFocus; }
+
+ static Point CalcFloatingPosition( Window* pWindow, const Rectangle& rRect, ULONG nFlags, USHORT& rArrangeIndex );
};
#endif // _SV_FLOATWIN_HXX
diff --git a/vcl/inc/vcl/fontmanager.hxx b/vcl/inc/vcl/fontmanager.hxx
index bdfd30d12f7f..edd7a787ae3d 100644
--- a/vcl/inc/vcl/fontmanager.hxx
+++ b/vcl/inc/vcl/fontmanager.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fontmanager.hxx,v $
- * $Revision: 1.36 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -51,6 +48,7 @@
// forward declarations
namespace utl { class MultiAtomProvider; } // see unotools/atom.hxx
+class FontSubsetInfo;
namespace psp {
class PPDParser; // see ppdparser.hxx
@@ -166,6 +164,8 @@ struct FastPrintFontInfo
rtl_TextEncoding m_aEncoding;
fcstatus::type m_eEmbeddedbitmap;
fcstatus::type m_eAntialias;
+ bool m_bSubsettable;
+ bool m_bEmbeddable;
FastPrintFontInfo() :
m_nID( 0 ),
@@ -328,9 +328,9 @@ class VCL_DLLPUBLIC PrintFontManager
rtl::OString m_aFontFile; // relative to directory
rtl::OString m_aXLFD; // mainly for administration, contains the XLFD from fonts.dir
int m_nCollectionEntry; // -1 for regular fonts, 0 to ... for fonts stemming from collections
- unsigned int m_nTypeFlags; // from TrueType file; only known use is for copyright flags
+ unsigned int m_nTypeFlags; // copyright bits and PS-OpenType flag
- TrueTypeFontFile() : PrintFont( fonttype::TrueType ), m_nDirectory( 0 ), m_nCollectionEntry(-1), m_nTypeFlags( 0x80000000 ) {}
+ TrueTypeFontFile();
virtual ~TrueTypeFontFile();
virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider );
};
@@ -648,7 +648,9 @@ public:
// nGlyphs: number of glyphs in arrays
// pCapHeight:: capital height of the produced font
// pXMin, pYMin, pXMax, pYMax: outgoing font bounding box
- bool createFontSubset( fontID nFont,
+ // TODO: callers of this method should use its FontSubsetInfo counterpart directly
+ bool createFontSubset( FontSubsetInfo&,
+ fontID nFont,
const rtl::OUString& rOutFile,
sal_Int32* pGlyphIDs,
sal_uInt8* pNewEncoding,
diff --git a/vcl/inc/vcl/fontsubset.hxx b/vcl/inc/vcl/fontsubset.hxx
new file mode 100644
index 000000000000..3032490dcbab
--- /dev/null
+++ b/vcl/inc/vcl/fontsubset.hxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_FONTSUBSET_HXX
+#define _SV_FONTSUBSET_HXX
+
+#include <tools/gen.hxx>
+#include <tools/string.hxx>
+#include <cstdio>
+
+namespace vcl { struct _TrueTypeFont; } // SFT's idea of a TTF font
+
+class FontSubsetInfo
+{
+public:
+ explicit FontSubsetInfo( void );
+ virtual ~FontSubsetInfo( void );
+
+ enum FontType {
+ NO_FONT = 0,
+ SFNT_TTF = 1<<1, // SFNT container with TrueType glyphs
+ SFNT_CFF = 1<<2, // SFNT container with CFF-container
+ TYPE1_PFA = 1<<3, // PSType1 Postscript Font Ascii
+ TYPE1_PFB = 1<<4, // PSType1 Postscript Font Binary
+ CFF_FONT = 1<<5, // CFF-container with PSType2 glyphs
+ TYPE3_FONT = 1<<6, // PSType3 Postscript font
+ TYPE42_FONT = 1<<7, // PSType42 wrapper for an SFNT_TTF
+ ANY_SFNT = SFNT_TTF | SFNT_CFF,
+ ANY_TYPE1 = TYPE1_PFA | TYPE1_PFB,
+ ANY_FONT = 0xFF
+ };
+
+ bool LoadFont( FontType eInFontType,
+ const unsigned char* pFontBytes, int nByteLength );
+ bool LoadFont( vcl::_TrueTypeFont* pSftTrueTypeFont );
+
+ bool CreateFontSubset( int nOutFontTypeMask,
+ FILE* pOutFile, const char* pOutFontName,
+ const long* pReqGlyphIds, const sal_uInt8* pEncodedIds,
+ int nReqGlyphCount, sal_Int32* pOutGlyphWidths = NULL );
+
+public: // TODO: make subsetter results private and provide accessor methods instead
+ // subsetter-provided subset details needed by e.g. Postscript or PDF
+ String m_aPSName;
+ int m_nAscent; // all metrics in PS font units
+ int m_nDescent;
+ int m_nCapHeight;
+ Rectangle m_aFontBBox;
+ FontType m_nFontType; // font-type of subset result
+
+private:
+ // input-font-specific details
+ unsigned const char* mpInFontBytes;
+ int mnInByteLength;
+ FontType meInFontType; // allowed mask of input font-types
+ vcl::_TrueTypeFont* mpSftTTFont;
+
+ // subset-request details
+ int mnReqFontTypeMask; // allowed subset-target font types
+ FILE* mpOutFile;
+ const char* mpReqFontName;
+ const long* mpReqGlyphIds;
+ const sal_uInt8* mpReqEncodedIds;
+ int mnReqGlyphCount;
+
+protected:
+ bool CreateFontSubsetFromCff( sal_Int32* pOutGlyphWidths = NULL );
+ bool CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths = NULL );
+ bool CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths = NULL );
+};
+
+#endif // _SV_FONTSUBSET_HXX
+
diff --git a/vcl/inc/vcl/glyphcache.hxx b/vcl/inc/vcl/glyphcache.hxx
index 637feee34839..33a7c80b7746 100644
--- a/vcl/inc/vcl/glyphcache.hxx
+++ b/vcl/inc/vcl/glyphcache.hxx
@@ -50,6 +50,7 @@ struct ImplKernPairData;
namespace basegfx { class B2DPolyPolygon; }
class RawBitmap;
+class CmapResult;
#include <vcl/outfont.hxx>
@@ -189,7 +190,7 @@ public:
virtual void FetchFontMetric( ImplFontMetricData&, long& rFactor ) const = 0;
virtual ULONG GetKernPairs( ImplKernPairData** ) const { return 0; }
virtual int GetGlyphKernValue( int, int ) const { return 0; }
- virtual ULONG GetFontCodeRanges( sal_uInt32* ) const { return 0; }
+ virtual bool GetFontCodeRanges( CmapResult& ) const { return false; }
Point TransformPoint( const Point& ) const;
GlyphData& GetGlyphData( int nGlyphIndex );
diff --git a/vcl/inc/vcl/graph.hxx b/vcl/inc/vcl/graph.hxx
index 9d70c67d3e55..5f5fa8eff6ce 100644
--- a/vcl/inc/vcl/graph.hxx
+++ b/vcl/inc/vcl/graph.hxx
@@ -206,7 +206,7 @@ public:
BOOL IsSwapOut() const;
void SetLink( const GfxLink& );
- GfxLink GetLink();
+ GfxLink GetLink() const;
BOOL IsLink() const;
BOOL ExportNative( SvStream& rOStream ) const;
diff --git a/vcl/inc/vcl/graphite_adaptors.hxx b/vcl/inc/vcl/graphite_adaptors.hxx
new file mode 100644
index 000000000000..41ffa00b0f8f
--- /dev/null
+++ b/vcl/inc/vcl/graphite_adaptors.hxx
@@ -0,0 +1,154 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITEADAPTORS_HXX
+#define _SV_GRAPHITEADAPTORS_HXX
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Standard Library
+#include <stdexcept>
+// Platform
+
+#ifndef _SVWIN_H
+#include <tools/svwin.h>
+#endif
+
+#ifndef _SV_SVSYS_HXX
+#include <svsys.h>
+#endif
+
+#ifndef _SV_SALGDI_HXX
+#include <vcl/salgdi.hxx>
+#endif
+
+#ifndef _SV_SALLAYOUT_HXX
+#include <vcl/sallayout.hxx>
+#endif
+
+// Module
+#include "vcl/dllapi.h"
+
+// Libraries
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/ITextSource.h>
+
+
+// Module type definitions and forward declarations.
+//
+#ifndef MSC
+// SAL/VCL types
+class ServerFont;
+class FreetypeServerFont;
+
+// Graphite types
+
+struct FontProperties : gr::FontProps
+{
+ FontProperties(const FreetypeServerFont & font) throw();
+};
+
+namespace grutils
+{
+ class GrFeatureParser;
+}
+
+// This class adapts the Sal font and graphics services to form required by
+// the Graphite engine.
+// @author tse
+//
+class VCL_DLLPUBLIC GraphiteFontAdaptor : public gr::Font
+{
+typedef std::map<const gr::gid16, std::pair<gr::Rect, gr::Point> > GlyphMetricMap;
+
+public:
+ static bool IsGraphiteEnabledFont(ServerFont &) throw();
+
+ GraphiteFontAdaptor(ServerFont & font, const sal_Int32 dpi_x, const sal_Int32 dpi_y);
+ GraphiteFontAdaptor(const GraphiteFontAdaptor &) throw();
+ ~GraphiteFontAdaptor() throw();
+
+ gr::Font * copyThis();
+
+ // Basic attribute accessors.
+ virtual float ascent();
+ virtual float descent();
+ virtual bool bold();
+ virtual bool italic();
+ virtual float height();
+ virtual unsigned int getDPIx();
+ virtual unsigned int getDPIy();
+
+ // Font access methods.
+ virtual const void * getTable(gr::fontTableId32 tableID, size_t * pcbSize);
+ virtual void getFontMetrics(float * ascent_out, float * descent_out = 0, float * em_square_out = 0);
+
+ // Glyph metrics.
+ virtual void getGlyphMetrics(gr::gid16 glyphID, gr::Rect & boundingBox, gr::Point & advances);
+
+ // Adaptor attributes.
+ const FontProperties & fontProperties() const throw();
+ FreetypeServerFont & font() const throw();
+ const grutils::GrFeatureParser * features() const { return mpFeatures; };
+
+private:
+ virtual void UniqueCacheInfo(std::wstring &, bool &, bool &);
+
+ FreetypeServerFont& mrFont;
+ FontProperties maFontProperties;
+ const unsigned int mnDpiX, mnDpiY;
+ const float mfAscent,
+ mfDescent,
+ mfEmUnits;
+ grutils::GrFeatureParser * mpFeatures;
+ GlyphMetricMap maGlyphMetricMap;
+};
+
+// Partial implementation of class GraphiteFontAdaptor.
+//
+inline const FontProperties & GraphiteFontAdaptor::fontProperties() const throw() {
+ return maFontProperties;
+}
+
+inline FreetypeServerFont & GraphiteFontAdaptor::font() const throw() {
+ return mrFont;
+}
+#endif // not MFC
+
+// Partial implementation of class TextSourceAdaptor.
+//
+//inline const ImplLayoutArgs & TextSourceAdaptor::layoutArgs() const throw() {
+// return _layout_args;
+//}
+
+
+#endif // _SV_GRAPHITEADAPTORS_HXX
diff --git a/vcl/inc/vcl/graphite_cache.hxx b/vcl/inc/vcl/graphite_cache.hxx
new file mode 100644
index 000000000000..5a537c5f1e48
--- /dev/null
+++ b/vcl/inc/vcl/graphite_cache.hxx
@@ -0,0 +1,265 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description: Classes to cache Graphite Segments to try to improve
+// rendering performance.
+
+#ifndef GraphiteSegmentCache_h
+#define GraphiteSegmentCache_h
+
+#include <tools/solar.h>
+#include <rtl/ustring.h>
+
+#define GRCACHE_REUSE_VECTORS 1
+
+//#include <rope>
+#include <hash_map>
+
+class TextSourceAdaptor;
+/**
+* GrSegRecord stores a Graphite Segment and its associated text
+*/
+class GrSegRecord {
+public:
+ GrSegRecord(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl);
+
+ ~GrSegRecord();
+
+ void reuse(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl);
+
+ void clearVectors();
+ void clear();
+#ifdef GRCACHE_REUSE_VECTORS
+ void setGlyphVectors(long nWidth, GraphiteLayout::Glyphs & vGlyphs, std::vector<int> vCharDxs,
+ std::vector<int> & vChar2Base, std::vector<int> & vGlyph2Char)
+ {
+ clearVectors();
+ mnWidth = nWidth;
+ mvGlyphs.insert(mvGlyphs.begin(), vGlyphs.begin(), vGlyphs.end());
+ mvCharDxs.insert(mvCharDxs.begin(),vCharDxs.begin(),vCharDxs.end());
+ mvChar2BaseGlyph.insert(mvChar2BaseGlyph.begin(),vChar2Base.begin(),vChar2Base.end());
+ mvGlyph2Char.insert(mvGlyph2Char.begin(),vGlyph2Char.begin(),vGlyph2Char.end());
+ }
+#endif
+ gr::Segment * getSegment() { return m_seg; }
+ TextSourceAdaptor * getTextSrc() { return m_text; }
+ void unlock() { --m_lockCount; }
+ bool isRtl() const { return mbIsRtl; }
+#ifdef GRCACHE_REUSE_VECTORS
+ const long & width() const { return mnWidth; }
+ const GraphiteLayout::Glyphs & glyphs() const { return mvGlyphs; }
+ const std::vector<int> & charDxs() const { return mvCharDxs; }
+ const std::vector<int> & char2BaseGlyph() const { return mvChar2BaseGlyph; }
+ const std::vector<int> & glyph2Char() const { return mvGlyph2Char; }
+#endif
+private:
+ rtl::OUString * m_rope;
+ TextSourceAdaptor * m_text;
+ gr::Segment * m_seg;
+ const xub_Unicode * m_nextKey;
+ const xub_Unicode* m_pStr;
+ size_t m_startChar;
+ float m_fontScale;
+ long mnWidth;
+ GraphiteLayout::Glyphs mvGlyphs; // glyphs in display order
+ std::vector<int> mvCharDxs; // right hand side x offset of each glyph
+ std::vector<int> mvChar2BaseGlyph;
+ std::vector<int> mvGlyph2Char;
+ bool mbIsRtl;
+ int m_lockCount;
+ friend class GraphiteSegmentCache;
+};
+
+typedef std::hash_map<long, GrSegRecord*, std::hash<long> > GraphiteSegMap;
+typedef std::hash_multimap<size_t, GrSegRecord*> GraphiteRopeMap;
+typedef std::pair<GraphiteRopeMap::iterator, GraphiteRopeMap::iterator> GrRMEntry;
+
+/**
+* GraphiteSegmentCache contains the cached Segments for one particular font size
+*/
+class GraphiteSegmentCache
+{
+ enum {
+ // not really sure what good values are here,
+ // bucket size should be >> cache size
+ SEG_BUCKET_SIZE = 4096,
+ SEG_CACHE_SIZE = 255
+ };
+public:
+ GraphiteSegmentCache()
+ : m_segMap(SEG_BUCKET_SIZE),
+ m_oldestKey(NULL) {};
+ ~GraphiteSegmentCache()
+ {
+ m_ropeMap.clear();
+ GraphiteSegMap::iterator i = m_segMap.begin();
+ while (i != m_segMap.end())
+ {
+ GrSegRecord *r = i->second;
+ delete r;
+ ++i;
+ }
+ m_segMap.clear();
+ };
+ GrSegRecord * getSegment(ImplLayoutArgs & layoutArgs, bool bIsRtl)
+ {
+ GrSegRecord * found = NULL;
+ // try to find a segment starting at correct place, if not, try to find a
+ // match for the complete buffer
+ GraphiteSegMap::iterator iMap =
+ m_segMap.find(reinterpret_cast<long>(layoutArgs.mpStr +
+ layoutArgs.mnMinCharPos));
+ if (iMap != m_segMap.end())
+ {
+ found = iMap->second;
+ }
+ else
+ {
+ iMap = m_segMap.find(reinterpret_cast<long>(layoutArgs.mpStr));
+ if (iMap != m_segMap.end())
+ {
+ found = iMap->second;
+ }
+ }
+ if (found)
+ {
+ if (found->m_seg->startCharacter() <= layoutArgs.mnMinCharPos &&
+ found->m_seg->stopCharacter() >= layoutArgs.mnEndCharPos)
+ {
+ const size_t seg_char_limit = min(layoutArgs.mnLength, layoutArgs.mnEndCharPos
+ + GraphiteLayout::EXTRA_CONTEXT_LENGTH);
+ DBG_ASSERT(found && found->m_seg, "null entry in GraphiteSegmentCache");
+ // restore original start character, in case it has changed
+ found->m_seg->setTextSourceOffset(found->m_startChar);
+ // check that characters are the same, at least in the range of
+ // interest
+ // We could use substr and ==, but substr does a copy,
+ // so its probably faster to do it like this
+ for (size_t i = layoutArgs.mnMinCharPos; i < seg_char_limit; i++)
+ {
+ //if (!found->m_rope->match(rtl::OUString(layoutArgs.mpStr[i], layoutArgs.mnLength), i - found->m_seg->startCharacter()))
+ if (found->m_rope->getStr()[i-found->m_seg->startCharacter()] != layoutArgs.mpStr[i])
+ return NULL;
+ }
+ if (found->isRtl() != bIsRtl)
+ {
+ return NULL;
+ }
+// if (found->m_lockCount != 0)
+// OutputDebugString("Multple users of SegRecord!");
+ found->m_lockCount++;
+ }
+ else found = NULL;
+ }
+ else
+ {
+ // the pointers aren't the same, but we might still have the same text in a segment
+ // this is expecially needed when editing a large paragraph
+ // each edit changes the pointers, but if we don't reuse any segments it gets very
+ // slow.
+ const size_t seg_char_limit = min(layoutArgs.mnLength, layoutArgs.mnEndCharPos
+ + GraphiteLayout::EXTRA_CONTEXT_LENGTH);
+ rtl::OUString * rope = new rtl::OUString(layoutArgs.mpStr + layoutArgs.mnMinCharPos,
+ seg_char_limit - layoutArgs.mnMinCharPos);
+ if (!rope) return NULL;
+ size_t nHash = (*(rope)).hashCode();
+ GrRMEntry range = m_ropeMap.equal_range(nHash);
+ while (range.first != range.second)
+ {
+ found = range.first->second;
+ if (found->m_lockCount == 0)
+ {
+ if(rope->match(*(found->m_rope)))
+ {
+ // found, but the pointers are all wrong
+ found->m_seg->setTextSourceOffset(layoutArgs.mnMinCharPos);
+ // the switch is done in graphite_layout.cxx
+ //found->m_text->switchLayoutArgs(layoutArgs);
+ found->m_lockCount++;
+ break;
+ }
+ else
+ found = NULL;
+ }
+ else
+ found = NULL;
+ ++(range.first);
+ }
+ delete rope;
+ }
+ return found;
+ };
+ GrSegRecord * cacheSegment(TextSourceAdaptor * adapter, gr::Segment * seg, bool bIsRtl);
+private:
+ GraphiteSegMap m_segMap;
+ GraphiteRopeMap m_ropeMap;
+ const xub_Unicode * m_oldestKey;
+ const xub_Unicode * m_prevKey;
+};
+
+typedef std::hash_map<int, GraphiteSegmentCache *, std::hash<int> > GraphiteCacheMap;
+
+/**
+* GraphiteCacheHandler maps a particular font, style, size to a GraphiteSegmentCache
+*/
+class GraphiteCacheHandler
+{
+public:
+ GraphiteCacheHandler() : m_cacheMap(255) {};
+ ~GraphiteCacheHandler()
+ {
+ GraphiteCacheMap::iterator i = m_cacheMap.begin();
+ while (i != m_cacheMap.end())
+ {
+ GraphiteSegmentCache *r = i->second;
+ delete r;
+ ++i;
+ }
+ m_cacheMap.clear();
+ };
+
+ static GraphiteCacheHandler instance;
+
+ GraphiteSegmentCache * getCache(sal_Int32 & fontHash)
+ {
+ if (m_cacheMap.count(fontHash) > 0)
+ {
+ return m_cacheMap.find(fontHash)->second;
+ }
+ GraphiteSegmentCache *pCache = new GraphiteSegmentCache();
+ m_cacheMap[fontHash] = pCache;
+ return pCache;
+ }
+private:
+ GraphiteCacheMap m_cacheMap;
+};
+
+#endif
+
diff --git a/vcl/inc/vcl/graphite_features.hxx b/vcl/inc/vcl/graphite_features.hxx
new file mode 100644
index 000000000000..6cfe5dfca0fd
--- /dev/null
+++ b/vcl/inc/vcl/graphite_features.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description:
+// Parse a string of features specified as ; separated pairs.
+// e.g.
+// 1001=1&2002=2&fav1=0
+
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/GrFeature.h>
+
+namespace grutils
+{
+
+ class GrFeatureParser
+ {
+ public:
+ enum { MAX_FEATURES = 64 };
+ static const char FEAT_PREFIX;
+ static const char FEAT_SEPARATOR;
+ static const char FEAT_ID_VALUE_SEPARATOR;
+ static const std::string ISO_LANG;
+ GrFeatureParser(gr::Font & font, const std::string features, const std::string lang);
+ GrFeatureParser(gr::Font & font, const std::string lang);
+ GrFeatureParser(const GrFeatureParser & copy);
+ ~GrFeatureParser();
+ size_t getFontFeatures(gr::FeatureSetting settings[MAX_FEATURES]) const;
+ bool parseErrors() { return mbErrors; };
+ static bool isValid(gr::Font & font, gr::FeatureSetting & setting);
+ gr::isocode getLanguage() const { return maLang; };
+ bool hasLanguage() const { return (maLang.rgch[0] != '\0'); }
+ sal_Int32 hashCode() const;
+ private:
+ void setLang(gr::Font & font, const std::string & lang);
+ bool isCharId(const std::string & id, size_t offset, size_t length);
+ int getCharId(const std::string & id, size_t offset, size_t length);
+ int getIntValue(const std::string & id, size_t offset, size_t length);
+ size_t mnNumSettings;
+ gr::isocode maLang;
+ bool mbErrors;
+ gr::FeatureSetting maSettings[64];
+ };
+
+ union FeatId
+ {
+ gr::featid num;
+ unsigned char label[5];
+ };
+}
diff --git a/vcl/inc/vcl/graphite_layout.hxx b/vcl/inc/vcl/graphite_layout.hxx
new file mode 100644
index 000000000000..2ec3bc4c2391
--- /dev/null
+++ b/vcl/inc/vcl/graphite_layout.hxx
@@ -0,0 +1,167 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITELAYOUT_HXX
+#define _SV_GRAPHITELAYOUT_HXX
+// Description: An implementation of the SalLayout interface that uses the
+// Graphite engine.
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+#define GRCACHE 1
+
+// Standard Library
+#include <memory>
+#include <vector>
+#include <utility>
+// Libraries
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/GrConstants.h>
+#include <graphite/GrAppData.h>
+#include <graphite/SegmentAux.h>
+// Platform
+#include <vcl/sallayout.hxx>
+#include <vcl/dllapi.h>
+// Module
+
+// For backwards compatibility with 2.4.x
+#if (SUPD == 680)
+typedef sal_Int32 sal_GlyphId;
+#endif
+
+
+// Module type definitions and forward declarations.
+//
+class TextSourceAdaptor;
+class GraphiteFontAdaptor;
+class GrSegRecord;
+// SAL/VCL types
+class ServerFont;
+// Graphite types
+namespace gr { class Segment; class GlyphIterator; }
+namespace grutils { class GrFeatureParser; }
+
+// This class uses the SIL Graphite engine to provide complex text layout services to the VCL
+// @author tse
+//
+class VCL_DLLPUBLIC GraphiteLayout : public SalLayout
+{
+public:
+ class Glyphs : public std::vector<GlyphItem>
+ {
+ public:
+ typedef std::pair<Glyphs::const_iterator, Glyphs::const_iterator> iterator_pair_t;
+
+ void fill_from(gr::Segment & rSeg, ImplLayoutArgs & rArgs,
+ bool bRtl, long &rWidth, float fScaling,
+ std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char,
+ std::vector<int> & rCharDxs);
+ void move_glyph(Glyphs::iterator, long dx);
+
+ const_iterator cluster_base(const_iterator) const;
+ iterator_pair_t neighbour_clusters(const_iterator) const;
+ private:
+ std::pair<float,float> appendCluster(gr::Segment & rSeg, ImplLayoutArgs & rArgs,
+ bool bRtl, int nFirstCharInCluster, int nNextChar,
+ int nFirstGlyphInCluster, int nNextGlyph, float fScaling,
+ std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char,
+ std::vector<int> & rCharDxs, long & rDXOffset);
+ void append(gr::Segment & rSeg, ImplLayoutArgs & rArgs, gr::GlyphInfo & rGi, float nextGlyphOrigin, float fScaling, std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char, std::vector<int> & rCharDxs, long & rDXOffset, bool bIsBase);
+ };
+
+ mutable Glyphs mvGlyphs;
+ void clear();
+
+private:
+ TextSourceAdaptor * mpTextSrc; // Text source.
+ gr::LayoutEnvironment maLayout;
+ const gr::Font &mrFont;
+ long mnWidth;
+ std::vector<int> mvCharDxs;
+ std::vector<int> mvChar2BaseGlyph;
+ std::vector<int> mvGlyph2Char;
+ float mfScaling;
+ const grutils::GrFeatureParser * mpFeatures;
+
+public:
+ GraphiteLayout(const gr::Font & font, const grutils::GrFeatureParser * features = NULL) throw();
+
+ // used by upper layers
+ virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout
+ // split into two stages to allow dc to be restored on the segment
+#ifdef GRCACHE
+ gr::Segment * CreateSegment(ImplLayoutArgs& rArgs, GrSegRecord ** pRecord = NULL);
+ bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment, GrSegRecord * pSegRecord);
+#else
+ gr::Segment * CreateSegment(ImplLayoutArgs& rArgs);
+ bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment);
+#endif
+
+ virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting positions
+
+ // methods using string indexing
+ virtual int GetTextBreak( long nMaxWidth, long nCharExtra=0, int nFactor=1 ) const;
+ virtual long FillDXArray( sal_Int32* pDXArray ) const;
+ virtual void ApplyDXArray(ImplLayoutArgs &rArgs, std::vector<int> & rDeltaWidth);
+
+ virtual void GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const;
+
+ // methods using glyph indexing
+ virtual int GetNextGlyphs(int nLen, sal_GlyphId* pGlyphIdxAry, ::Point & rPos, int&,
+ sal_Int32* pGlyphAdvAry = 0, int* pCharPosAry = 0 ) const;
+
+ // used by glyph+font+script fallback
+ virtual void MoveGlyph( int nStart, long nNewXPos );
+ virtual void DropGlyph( int nStart );
+ virtual void Simplify( bool bIsBase );
+
+ // Dummy implementation so layout can be shared between Linux/Windows
+ virtual void DrawText(SalGraphics&) const {};
+
+ virtual ~GraphiteLayout() throw();
+ void SetFeatures(grutils::GrFeatureParser * aFeature) { mpFeatures = aFeature; }
+ void SetFontScale(float s) { mfScaling = s; };
+ const TextSourceAdaptor * textSrc() const { return mpTextSrc; };
+ virtual sal_GlyphId getKashidaGlyph(int & width) = 0;
+ void kashidaJustify(std::vector<int> & rDeltaWidth, sal_GlyphId, int width);
+
+ static const int EXTRA_CONTEXT_LENGTH;
+private:
+ int glyph_to_char(Glyphs::iterator);
+ std::pair<int,int> glyph_to_chars(const GlyphItem &) const;
+
+ std::pair<long,long> caret_positions(size_t) const;
+};
+
+
+
+#endif // _SV_GRAPHITELAYOUT_HXX
diff --git a/vcl/inc/vcl/graphite_serverfont.hxx b/vcl/inc/vcl/graphite_serverfont.hxx
new file mode 100644
index 000000000000..d9e6670df79b
--- /dev/null
+++ b/vcl/inc/vcl/graphite_serverfont.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITESERVERFONT_HXX
+#define _SV_GRAPHITESERVERFONT_HXX
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+#ifndef MSC
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_adaptors.hxx>
+
+// Modules
+
+class VCL_DLLPUBLIC GraphiteLayoutImpl : public GraphiteLayout
+{
+public:
+ GraphiteLayoutImpl(const gr::Font & font, const grutils::GrFeatureParser * features, GraphiteFontAdaptor * pFont) throw()
+ : GraphiteLayout(font, features), mpFont(pFont) {};
+ virtual ~GraphiteLayoutImpl() throw() {};
+ virtual sal_GlyphId getKashidaGlyph(int & width);
+private:
+ GraphiteFontAdaptor * mpFont;
+};
+
+// This class implments the server font specific parts.
+// @author tse
+//
+class VCL_DLLPUBLIC GraphiteServerFontLayout : public ServerFontLayout
+{
+private:
+ mutable GraphiteFontAdaptor * mpFont;
+ // mutable so that the DrawOffset/DrawBase can be set
+ mutable GraphiteLayoutImpl maImpl;
+public:
+ GraphiteServerFontLayout(GraphiteFontAdaptor * font) throw();
+
+ virtual bool LayoutText( ImplLayoutArgs& rArgs) { SalLayout::AdjustLayout(rArgs); return maImpl.LayoutText(rArgs); }; // first step of layout
+ virtual void AdjustLayout( ImplLayoutArgs& rArgs)
+ {
+ SalLayout::AdjustLayout(rArgs);
+ maImpl.DrawBase() = maDrawBase;
+ maImpl.DrawOffset() = maDrawOffset;
+ maImpl.AdjustLayout(rArgs);
+ };
+ virtual long GetTextWidth() const { return maImpl.GetTextWidth(); }
+ virtual long FillDXArray( sal_Int32* dxa ) const { return maImpl.FillDXArray(dxa); }
+ virtual int GetTextBreak( long mw, long ce, int f ) const { return maImpl.GetTextBreak(mw, ce, f); }
+ virtual void GetCaretPositions( int as, sal_Int32* cxa ) const { maImpl.GetCaretPositions(as, cxa); }
+
+ // used by display layers
+ virtual int GetNextGlyphs( int l, sal_GlyphId* gia, Point& p, int& s,
+ sal_Int32* gaa = NULL, int* cpa = NULL ) const
+ {
+ maImpl.DrawBase() = maDrawBase;
+ maImpl.DrawOffset() = maDrawOffset;
+ return maImpl.GetNextGlyphs(l, gia, p, s, gaa, cpa);
+ }
+
+ virtual void MoveGlyph( int nStart, long nNewXPos ) { maImpl.MoveGlyph(nStart, nNewXPos); };
+ virtual void DropGlyph( int nStart ) { maImpl.DropGlyph(nStart); };
+ virtual void Simplify( bool bIsBase ) { maImpl.Simplify(bIsBase); };
+
+ virtual ~GraphiteServerFontLayout() throw();
+
+// For use with PspGraphics
+ const sal_Unicode* getTextPtr() const;
+ int getMinCharPos() const { return mnMinCharPos; }
+ int getMaxCharPos() const { return mnEndCharPos; }
+};
+
+
+
+#endif
+#endif //_SV_GRAPHITESERVERFONT_HXX
diff --git a/vcl/inc/vcl/impfont.hxx b/vcl/inc/vcl/impfont.hxx
index 90d8793f513f..e2b1889e8e0e 100644
--- a/vcl/inc/vcl/impfont.hxx
+++ b/vcl/inc/vcl/impfont.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: impfont.hxx,v $
- * $Revision: 1.3.134.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -140,14 +137,15 @@ public:
// - ImplFontCharMap -
// -------------------
+class CmapResult;
+
class VCL_DLLPUBLIC ImplFontCharMap
{
public:
- ImplFontCharMap( int nRangePairs,
- const sal_uInt32* pRangeCodes,
- const int* pStartGlyphs = NULL );
+ explicit ImplFontCharMap( const CmapResult& );
+
+ static ImplFontCharMap* GetDefaultMap( bool bSymbols=false);
-static ImplFontCharMap* GetDefaultMap();
bool IsDefaultMap() const;
bool HasChar( sal_uInt32 ) const;
int CountCharsInRange( sal_uInt32 cMin, sal_uInt32 cMax ) const;
@@ -165,34 +163,46 @@ static ImplFontCharMap* GetDefaultMap();
void AddReference();
void DeReference();
- int GetGlyphIndex( sal_uInt32 );
+ int GetGlyphIndex( sal_uInt32 ) const;
private:
- ~ImplFontCharMap();
+ /*virtual*/ ~ImplFontCharMap();
int ImplFindRangeIndex( sal_uInt32 ) const;
// prevent assignment and copy construction
- ImplFontCharMap( const ImplFontCharMap& );
+ explicit ImplFontCharMap( const ImplFontCharMap& );
void operator=( const ImplFontCharMap& );
private:
const sal_uInt32* mpRangeCodes; // pairs of StartCode/(EndCode+1)
- const int* mpStartGlyphs; // index of the first glyph of the ranges
+ const int* mpStartGlyphs; // range-specific mapper to glyphs
+ const USHORT* mpGlyphIds; // individual glyphid mappings
int mnRangeCount;
int mnCharCount;
int mnRefCount;
};
// CmapResult is a normalized version of the many CMAP formats
-struct CmapResult
+class
+#ifdef UNX
+ VCL_DLLPUBLIC // vcl-plugins need it
+#endif // UNX
+CmapResult
{
- sal_uInt32* mpPairCodes;
- int* mpStartGlyphs;
- int mnPairCount;
- bool mbRecoded;
- bool mbSymbolic;
+public:
+ explicit CmapResult( bool bSymbolic = false,
+ const sal_uInt32* pRangeCodes = NULL, int nRangeCount = 0,
+ const int* pStartGlyphs = 0, const USHORT* pGlyphIds = NULL );
+
+ const sal_uInt32* mpRangeCodes;
+ const int* mpStartGlyphs;
+ const USHORT* mpGlyphIds;
+ int mnRangeCount;
+ bool mbSymbolic;
+ bool mbRecoded;
};
bool ParseCMAP( const unsigned char* pRawData, int nRawLength, CmapResult& );
#endif // _SV_IMPFONT_HXX
+
diff --git a/vcl/inc/vcl/lazydelete.hxx b/vcl/inc/vcl/lazydelete.hxx
index a0acba21fefa..4821492af1f8 100644
--- a/vcl/inc/vcl/lazydelete.hxx
+++ b/vcl/inc/vcl/lazydelete.hxx
@@ -225,7 +225,7 @@ namespace vcl
SomeWindow::Paint()
{
- static vcl::DeleteOnDeinitBase< BitmapEx > aBmp( new BitmapEx( ResId( 1000, myResMgr ) ) );
+ static vcl::DeleteOnDeinit< BitmapEx > aBmp( new BitmapEx( ResId( 1000, myResMgr ) ) );
if( aBmp.get() ) // check whether DeInitVCL has been called already
DrawBitmapEx( Point( 10, 10 ), *aBmp.get() );
@@ -244,7 +244,7 @@ namespace vcl
};
template < typename T >
- class VCL_DLLPUBLIC DeleteOnDeinit : public DeleteOnDeinitBase
+ class DeleteOnDeinit : public DeleteOnDeinitBase
{
T* m_pT;
virtual void doCleanup() { delete m_pT; m_pT = NULL; }
diff --git a/vcl/inc/vcl/outfont.hxx b/vcl/inc/vcl/outfont.hxx
index 86a5e59f6345..88316130cc3a 100644
--- a/vcl/inc/vcl/outfont.hxx
+++ b/vcl/inc/vcl/outfont.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: outfont.hxx,v $
- * $Revision: 1.6.14.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -407,17 +404,5 @@ private:
ImplMultiTextLineInfo& operator=( const ImplMultiTextLineInfo& );
};
-#define SAL_FONTSUBSETINFO_TYPE_TRUETYPE 0
-#define SAL_FONTSUBSETINFO_TYPE_TYPE1 1
-
-struct FontSubsetInfo
-{
- String m_aPSName;
- int m_nFontType;
- int m_nAscent; // all lengths in PS font units
- int m_nDescent;
- int m_nCapHeight;
- Rectangle m_aFontBBox;
-};
-
#endif // _SV_OUTFONT_HXX
+
diff --git a/vcl/inc/vcl/ppdparser.hxx b/vcl/inc/vcl/ppdparser.hxx
index 5fa47d412f26..ed9f91b97d99 100644
--- a/vcl/inc/vcl/ppdparser.hxx
+++ b/vcl/inc/vcl/ppdparser.hxx
@@ -202,7 +202,7 @@ public:
static const PPDParser* getParser( const String& rFile );
static String getPPDPrinterName( const String& rFile );
static void freeAll();
- static void getKnownPPDDrivers( std::list< rtl::OUString >& o_rDrivers );
+ static void getKnownPPDDrivers( std::list< rtl::OUString >& o_rDrivers, bool bRefresh = false );
const String& getFilename() const { return m_aFile; }
diff --git a/vcl/inc/vcl/printergfx.hxx b/vcl/inc/vcl/printergfx.hxx
index 3bb242c802dd..e34a1ce78001 100644
--- a/vcl/inc/vcl/printergfx.hxx
+++ b/vcl/inc/vcl/printergfx.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: printergfx.hxx,v $
- * $Revision: 1.19.18.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -32,6 +29,7 @@
#define _PSPRINT_PRINTERGFX_HXX_
#include "vcl/helper.hxx"
+#include "vcl/sallayout.hxx"
#include "osl/file.hxx"
#include "tools/gen.hxx"
@@ -325,7 +323,7 @@ public:
const sal_Int32* pDeltaArray = NULL);
void drawGlyphs( const Point& rPoint,
- sal_uInt32* pGlyphIds,
+ sal_GlyphId* pGlyphIds,
sal_Unicode* pUnicodes,
sal_Int16 nLen,
sal_Int32* pDeltaArray );
@@ -428,7 +426,7 @@ public:
// for CTL
void DrawGlyphs( const Point& rPoint,
- sal_uInt32* pGlyphIds,
+ sal_GlyphId* pGlyphIds,
sal_Unicode* pUnicodes,
sal_Int16 nLen,
sal_Int32* pDeltaArray );
diff --git a/vcl/inc/vcl/salframe.hxx b/vcl/inc/vcl/salframe.hxx
index 7a99442ebd5b..0e3f4e94a0b3 100644
--- a/vcl/inc/vcl/salframe.hxx
+++ b/vcl/inc/vcl/salframe.hxx
@@ -102,6 +102,8 @@ struct SystemEnvData;
#define SAL_FRAME_STYLE_SYSTEMCHILD ((ULONG)0x08000000)
// floating window
#define SAL_FRAME_STYLE_FLOAT ((ULONG)0x20000000)
+// floating window that needs to be focusable
+#define SAL_FRAME_STYLE_FLOAT_FOCUSABLE ((ULONG)0x04000000)
// toolwindows should be painted with a smaller decoration
#define SAL_FRAME_STYLE_TOOLWINDOW ((ULONG)0x40000000)
// the window containing the intro bitmap, aka splashscreen
diff --git a/vcl/inc/vcl/salgdi.hxx b/vcl/inc/vcl/salgdi.hxx
index 5cf6e70f5114..55f8a0d03deb 100644
--- a/vcl/inc/vcl/salgdi.hxx
+++ b/vcl/inc/vcl/salgdi.hxx
@@ -53,7 +53,7 @@ class ImplFontCharMap;
class SalLayout;
class ImplLayoutArgs;
class Rectangle;
-struct FontSubsetInfo;
+class FontSubsetInfo;
class OutputDevice;
class ServerFontLayout;
struct SystemGraphicsData;
diff --git a/vcl/inc/vcl/salinst.hxx b/vcl/inc/vcl/salinst.hxx
index 221c9e370ea6..f8c148859516 100644
--- a/vcl/inc/vcl/salinst.hxx
+++ b/vcl/inc/vcl/salinst.hxx
@@ -31,6 +31,8 @@
#ifndef _SV_SALINST_HXX
#define _SV_SALINST_HXX
+#include "com/sun/star/uno/Reference.hxx"
+
#include "vcl/sv.h"
#include "vcl/dllapi.h"
@@ -176,6 +178,13 @@ public:
// this is only necessary because PrintFontManager is an exported vcl API and therefore
// needs to be in libvcl while libvclplug_* do not contain exported C++ API
virtual void FillFontPathList( std::list< rtl::OString >& o_rFontPaths );
+
+ // dtrans implementation
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType) = 0;
};
// called from SVMain
diff --git a/vcl/inc/vcl/sallayout.hxx b/vcl/inc/vcl/sallayout.hxx
index 3141381041c8..6934cdc182b6 100755
--- a/vcl/inc/vcl/sallayout.hxx
+++ b/vcl/inc/vcl/sallayout.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: sallayout.hxx,v $
- * $Revision: 1.8.54.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/inc/vcl/settings.hxx b/vcl/inc/vcl/settings.hxx
index a7cd61477519..decb7d01b2d4 100644
--- a/vcl/inc/vcl/settings.hxx
+++ b/vcl/inc/vcl/settings.hxx
@@ -379,6 +379,7 @@ private:
Color maMenuHighlightColor;
Color maMenuHighlightTextColor;
Color maMenuTextColor;
+ Color maMenuBarTextColor;
Color maMonoColor;
Color maRadioCheckTextColor;
Color maShadowColor;
@@ -689,6 +690,10 @@ public:
{ CopyData(); mpData->maMenuTextColor = rColor; }
const Color& GetMenuTextColor() const
{ return mpData->maMenuTextColor; }
+ void SetMenuBarTextColor( const Color& rColor )
+ { CopyData(); mpData->maMenuBarTextColor = rColor; }
+ const Color& GetMenuBarTextColor() const
+ { return mpData->maMenuBarTextColor; }
void SetMenuHighlightColor( const Color& rColor )
{ CopyData(); mpData->maMenuHighlightColor = rColor; }
const Color& GetMenuHighlightColor() const
diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx
index f853fae6c268..1e0c5218d1c5 100644
--- a/vcl/inc/vcl/svapp.hxx
+++ b/vcl/inc/vcl/svapp.hxx
@@ -479,6 +479,20 @@ public:
*/
static const ::rtl::OUString& GetDesktopEnvironment();
+ /** Add a file to the system shells recent document list if there is any.
+ This function may have no effect under Unix because there is no
+ standard API among the different desktop managers.
+
+ @param rFileUrl
+ The file url of the document.
+
+ @param rMimeType
+ The mime content type of the document specified by aFileUrl.
+ If an empty string will be provided "application/octet-stream"
+ will be used.
+ */
+ static void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
+
private:
DECL_STATIC_LINK( Application, PostEventHandler, void* );
diff --git a/vcl/inc/vcl/vclevent.hxx b/vcl/inc/vcl/vclevent.hxx
index 88ad880e26ab..ff0639d70e82 100644
--- a/vcl/inc/vcl/vclevent.hxx
+++ b/vcl/inc/vcl/vclevent.hxx
@@ -146,6 +146,11 @@ class Menu;
#define VCLEVENT_ROADMAP_ITEMSELECTED 1171
#define VCLEVENT_TOOLBOX_FORMATCHANGED 1172 // request new layout
#define VCLEVENT_COMBOBOX_SETTEXT 1173
+// --> OD 2009-04-01 #i92103#
+#define VCLEVENT_LISTBOX_ENTRY_EXPANDED 1174
+#define VCLEVENT_LISTBOX_ENTRY_COLLAPSED 1175
+// <--
+#define VCLEVENT_DROPDOWN_PRE_OPEN 1176
// VclMenuEvent
#define VCLEVENT_MENU_ACTIVATE 1200
diff --git a/vcl/inc/vcl/wintypes.hxx b/vcl/inc/vcl/wintypes.hxx
index f5869eca55e4..968f0e1d255f 100644
--- a/vcl/inc/vcl/wintypes.hxx
+++ b/vcl/inc/vcl/wintypes.hxx
@@ -194,6 +194,7 @@ typedef sal_Int64 WinBits;
#define WB_TOOLTIPWIN ((WinBits)SAL_CONST_INT64(0x800000000))
#define WB_OWNERDRAWDECORATION ((WinBits)SAL_CONST_INT64(0x2000000000))
#define WB_DEFAULTWIN ((WinBits)SAL_CONST_INT64(0x4000000000))
+#define WB_NEEDSFOCUS ((WinBits)SAL_CONST_INT64(0x1000000000))
#define WB_HIDE ((WinBits)SAL_CONST_INT64(0x80000000))
#define WB_HSCROLL WB_HORZ
diff --git a/vcl/os2/inc/salinst.h b/vcl/os2/inc/salinst.h
index 119324c1acd6..ba8dc7ddc43f 100644
--- a/vcl/os2/inc/salinst.h
+++ b/vcl/os2/inc/salinst.h
@@ -96,6 +96,7 @@ public:
virtual void DestroyMenuItem( SalMenuItem* );
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
};
SalFrame* ImplSalCreateFrame( Os2SalInstance* pInst, HWND hWndParent, ULONG nSalFrameStyle );
diff --git a/vcl/os2/source/app/salinst.cxx b/vcl/os2/source/app/salinst.cxx
index a14881c253ee..d4d324ad469c 100644
--- a/vcl/os2/source/app/salinst.cxx
+++ b/vcl/os2/source/app/salinst.cxx
@@ -811,6 +811,10 @@ void* Os2SalInstance::GetConnectionIdentifier( ConnectionIdentifierType& rReturn
return (void*) "";
}
+void Os2SalInstance::AddToRecentDocumentList(const rtl::OUString& /*rFileUrl*/, const rtl::OUString& /*rMimeType*/)
+{
+}
+
// -----------------------------------------------------------------------
SalTimer* Os2SalInstance::CreateSalTimer()
diff --git a/vcl/os2/source/window/salframe.cxx b/vcl/os2/source/window/salframe.cxx
index 8860d68d683e..345573b268c3 100644
--- a/vcl/os2/source/window/salframe.cxx
+++ b/vcl/os2/source/window/salframe.cxx
@@ -2172,6 +2172,7 @@ void Os2SalFrame::UpdateSettings( AllSettings& rSettings )
aStyleSettings.SetDeactiveBorderColor( ImplOS2ColorToSal( WinQuerySysColor( HWND_DESKTOP, SYSCLR_INACTIVEBORDER, 0 ) ) );
aStyleSettings.SetMenuColor( ImplOS2ColorToSal( WinQuerySysColor( HWND_DESKTOP, SYSCLR_MENU, 0 ) ) );
aStyleSettings.SetMenuTextColor( ImplOS2ColorToSal( WinQuerySysColor( HWND_DESKTOP, SYSCLR_MENUTEXT, 0 ) ) );
+ aStyleSettings.SetMenuBarTextColor( ImplOS2ColorToSal( WinQuerySysColor( HWND_DESKTOP, SYSCLR_MENUTEXT, 0 ) ) );
}
aStyleSettings.SetDialogTextColor( aStyleSettings.GetButtonTextColor() );
aStyleSettings.SetRadioCheckTextColor( aStyleSettings.GetButtonTextColor() );
diff --git a/vcl/prj/build.lst b/vcl/prj/build.lst
index 3af135dd760b..908dd1eafd72 100644
--- a/vcl/prj/build.lst
+++ b/vcl/prj/build.lst
@@ -1,4 +1,4 @@
-vc vcl : l10n apple_remote BOOST:boost rsc sot ucbhelper unotools ICU:icu i18npool i18nutil unoil ridljar X11_EXTENSIONS:x11_extensions offuh basegfx basebmp tools transex3 icc SO:print_header cpputools NULL
+vc vcl : l10n apple_remote BOOST:boost rsc sot ucbhelper unotools ICU:icu GRAPHITE:graphite i18npool i18nutil unoil ridljar X11_EXTENSIONS:x11_extensions offuh basegfx basebmp tools transex3 icc SO:print_header cpputools NULL
vc vcl usr1 - all vc_mkout NULL
vc vcl\inc nmake - all vc_inc NULL
vc vcl\source\glyphs nmake - all vc_glyphs vc_inc NULL
@@ -14,13 +14,15 @@ vc vcl\os2\source\app nmake - p vc__appp vc_inc NULL
vc vcl\os2\source\gdi nmake - p vc__gdip vc_inc NULL
vc vcl\os2\source\window nmake - p vc__winp vc_inc NULL
vc vcl\os2\source\src nmake - p vc__srcp vc_inc NULL
-vc vcl\source\components nmake - all vc_components NULL
+vc vcl\source\components nmake - all vc_components vc_inc NULL
vc vcl\win\source\app nmake - w vc__appw vc_inc NULL
vc vcl\win\source\gdi nmake - w vc__gdiw vc_inc NULL
vc vcl\win\source\window nmake - w vc__winw vc_inc NULL
vc vcl\win\source\src nmake - w vc__srcw vc_inc NULL
vc vcl\unx\source\plugadapt nmake - u vc__plug vc_inc NULL
+vc vcl\unx\source\desktopdetect nmake - u vc__desk vc_inc NULL
vc vcl\unx\source\app nmake - u vc__appu vc_inc NULL
+vc vcl\unx\source\dtrans nmake - u vc__dtru vc_inc NULL
vc vcl\unx\source\fontmanager nmake - u vc__ftmu vc_inc NULL
vc vcl\unx\source\gdi nmake - u vc__gdiu vc_inc NULL
vc vcl\unx\source\printer nmake - u vc__prnu vc_inc NULL
@@ -35,6 +37,7 @@ vc vcl\unx\kde nmake - u vc__kde vc_inc NULL
vc vcl\unx\kde4 nmake - u vc__kde4 vc_inc NULL
vc vcl\aqua\source\a11y nmake - u vc__aquy vc_inc NULL
vc vcl\aqua\source\app nmake - u vc__appa vc_inc NULL
+vc vcl\aqua\source\dtrans nmake - u vc__dtra vc_inc NULL
vc vcl\aqua\source\gdi nmake - u vc__gdia vc_inc NULL
vc vcl\aqua\source\res nmake - u vc__resa NULL
vc vcl\aqua\source\window nmake - u vc__wina vc_inc NULL
@@ -42,6 +45,6 @@ vc vcl\mac\source\app nmake - m vc__appm vc_inc NULL
vc vcl\mac\source\gdi nmake - m vc__gdim vc_inc NULL
vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL
vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL
-vc vcl\util nmake - all vc_util vc__plug.u vc__aquy.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL
+vc vcl\util nmake - all vc_util vc__plug.u vc__desk.u vc__aquy.u vc__appa.u vc__dtra.u vc__appm.m vc__appu.u vc__dtru.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL
vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL
vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL
diff --git a/vcl/prj/d.lst b/vcl/prj/d.lst
index 1fb975c129d9..4d36a8f611c5 100644
--- a/vcl/prj/d.lst
+++ b/vcl/prj/d.lst
@@ -1,14 +1,12 @@
mkdir: %COMMON_DEST%\bin%_EXT%\hid
mkdir: %_DEST%\inc%_EXT%\vcl
-mkdir: %_DEST%\inc%_EXT%\vcl\plug
-mkdir: %_DEST%\inc%_EXT%\vcl\plug\vcl
..\%COMMON_OUTDIR%\bin\*.zip %COMMON_DEST%\bin%_EXT%\*.zip
..\%COMMON_OUTDIR%\misc\*.hid %COMMON_DEST%\bin%_EXT%\hid\*.hid
..\%__SRC%\bin\vcl*.res %_DEST%\bin%_EXT%\vcl*.res
..\%__SRC%\bin\vcl?????.dll %_DEST%\bin%_EXT%\vcl?????.dll
..\%__SRC%\bin\vcl?????.sym %_DEST%\bin%_EXT%\vcl?????.sym
-..\%__SRC%\lib\libvcl*.so %_DEST%\lib%_EXT%\libvcl*.so
+..\%__SRC%\lib\lib*.so %_DEST%\lib%_EXT%\lib*.so
..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib
..\%__SRC%\lib\ivcl.lib %_DEST%\lib%_EXT%\ivcl.lib
..\%__SRC%\misc\vcl?????.map %_DEST%\bin%_EXT%\vcl?????.map
@@ -154,3 +152,4 @@ mkdir: %_DEST%\inc%_EXT%\vcl\plug\vcl
..\inc\vcl\ppdparser.hxx %_DEST%\inc%_EXT%\vcl\ppdparser.hxx
..\inc\vcl\helper.hxx %_DEST%\inc%_EXT%\vcl\helper.hxx
..\inc\vcl\strhelper.hxx %_DEST%\inc%_EXT%\vcl\strhelper.hxx
+..\inc\vcl\lazydelete.hxx %_DEST%\inc%_EXT%\vcl\lazydelete.hxx \ No newline at end of file
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 444f1f58c8fb..6aa453563596 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -478,6 +478,7 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
maMenuHighlightColor( rData.maMenuHighlightColor ),
maMenuHighlightTextColor( rData.maMenuHighlightTextColor ),
maMenuTextColor( rData.maMenuTextColor ),
+ maMenuBarTextColor( rData.maMenuBarTextColor ),
maMonoColor( rData.maMonoColor ),
maRadioCheckTextColor( rData.maRadioCheckTextColor ),
maShadowColor( rData.maShadowColor ),
@@ -597,6 +598,7 @@ void ImplStyleData::SetStandardStyles()
maMenuBarColor = Color( COL_LIGHTGRAY );
maMenuBorderColor = Color( COL_LIGHTGRAY );
maMenuTextColor = Color( COL_BLACK );
+ maMenuBarTextColor = Color( COL_BLACK );
maMenuHighlightColor = Color( COL_BLUE );
maMenuHighlightTextColor = Color( COL_WHITE );
maHighlightColor = Color( COL_BLUE );
@@ -1028,6 +1030,7 @@ BOOL StyleSettings::operator ==( const StyleSettings& rSet ) const
(mpData->maMenuBarColor == rSet.mpData->maMenuBarColor) &&
(mpData->maMenuBorderColor == rSet.mpData->maMenuBorderColor) &&
(mpData->maMenuTextColor == rSet.mpData->maMenuTextColor) &&
+ (mpData->maMenuBarTextColor == rSet.mpData->maMenuBarTextColor) &&
(mpData->maMenuHighlightColor == rSet.mpData->maMenuHighlightColor) &&
(mpData->maMenuHighlightTextColor == rSet.mpData->maMenuHighlightTextColor) &&
(mpData->maHighlightColor == rSet.mpData->maHighlightColor) &&
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index 262910d18c82..6057409baa14 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -674,11 +674,11 @@ void Application::MergeSystemSettings( AllSettings& rSettings )
ImplSVData* pSVData = ImplGetSVData();
if ( !pSVData->maAppData.mbSettingsInit )
{
- pWindow->ImplGetFrame()->UpdateSettings( *pSVData->maAppData.mpSettings );
+ // side effect: ImplUpdateGlobalSettings does an ImplGetFrame()->UpdateSettings
pWindow->ImplUpdateGlobalSettings( *pSVData->maAppData.mpSettings );
pSVData->maAppData.mbSettingsInit = TRUE;
}
- pWindow->ImplGetFrame()->UpdateSettings( rSettings );
+ // side effect: ImplUpdateGlobalSettings does an ImplGetFrame()->UpdateSettings
pWindow->ImplUpdateGlobalSettings( rSettings, FALSE );
}
}
@@ -1989,6 +1989,12 @@ const ::rtl::OUString& Application::GetDesktopEnvironment()
return SalGetDesktopEnvironment();
}
+void Application::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType)
+{
+ ImplSVData* pSVData = ImplGetSVData();
+ pSVData->mpDefInst->AddToRecentDocumentList(rFileUrl, rMimeType);
+}
+
BOOL Application::IsAccessibilityEnabled()
{
return FALSE;
diff --git a/vcl/source/components/dtranscomp.cxx b/vcl/source/components/dtranscomp.cxx
new file mode 100644
index 000000000000..58792cd4fbdb
--- /dev/null
+++ b/vcl/source/components/dtranscomp.cxx
@@ -0,0 +1,556 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: fontident.cxx,v $
+ *
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleServiceFactory.hpp"
+#include "com/sun/star/lang/XInitialization.hpp"
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/datatransfer/XTransferable.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboard.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboardEx.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboardListener.hpp"
+#include "com/sun/star/datatransfer/dnd/XDragSource.hpp"
+#include "com/sun/star/datatransfer/dnd/XDropTarget.hpp"
+#include "com/sun/star/datatransfer/dnd/DNDConstants.hpp"
+
+#include "vcl/svapp.hxx"
+#include "vcl/svdata.hxx"
+#include "vcl/salinst.hxx"
+#include "vos/mutex.hxx"
+#include "osl/mutex.hxx"
+
+#include "cppuhelper/compbase1.hxx"
+#include "cppuhelper/compbase2.hxx"
+#include "cppuhelper/compbase3.hxx"
+#include "cppuhelper/implbase1.hxx"
+
+using rtl::OUString;
+using namespace com::sun::star;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+
+// -----------------------------------------------------------------------
+
+namespace vcl
+{
+// generic implementation to satisfy SalInstance
+class GenericClipboard :
+ public cppu::WeakComponentImplHelper3 <
+ datatransfer::clipboard::XClipboardEx,
+ datatransfer::clipboard::XClipboardNotifier,
+ XServiceInfo
+ >
+{
+ osl::Mutex m_aMutex;
+ Reference< ::com::sun::star::datatransfer::XTransferable > m_aContents;
+ Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner > m_aOwner;
+ std::list< Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener > > m_aListeners;
+
+ void fireChangedContentsEvent();
+ void clearContents();
+
+public:
+
+ GenericClipboard() : cppu::WeakComponentImplHelper3<
+ datatransfer::clipboard::XClipboardEx,
+ datatransfer::clipboard::XClipboardNotifier,
+ XServiceInfo
+ >( m_aMutex )
+ {}
+ virtual ~GenericClipboard();
+
+ /*
+ * XServiceInfo
+ */
+
+ virtual rtl::OUString SAL_CALL getImplementationName() throw( RuntimeException );
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( RuntimeException );
+ virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( RuntimeException );
+
+ static rtl::OUString getImplementationName_static();
+ static Sequence< rtl::OUString > getSupportedServiceNames_static();
+
+ /*
+ * XClipboard
+ */
+
+ virtual Reference< ::com::sun::star::datatransfer::XTransferable > SAL_CALL getContents()
+ throw(RuntimeException);
+
+ virtual void SAL_CALL setContents(
+ const Reference< ::com::sun::star::datatransfer::XTransferable >& xTrans,
+ const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
+ throw(RuntimeException);
+
+ virtual ::rtl::OUString SAL_CALL getName()
+ throw(RuntimeException);
+
+ /*
+ * XClipboardEx
+ */
+
+ virtual sal_Int8 SAL_CALL getRenderingCapabilities()
+ throw(RuntimeException);
+
+ /*
+ * XClipboardNotifier
+ */
+ virtual void SAL_CALL addClipboardListener(
+ const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener >& listener )
+ throw(RuntimeException);
+
+ virtual void SAL_CALL removeClipboardListener(
+ const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardListener >& listener )
+ throw(RuntimeException);
+};
+
+GenericClipboard::~GenericClipboard()
+{
+}
+
+rtl::OUString GenericClipboard::getImplementationName_static()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.datatransfer.VCLGenericClipboard" ) );
+}
+
+Sequence< rtl::OUString > GenericClipboard::getSupportedServiceNames_static()
+{
+ Sequence< OUString > aRet(1);
+ aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard");
+ return aRet;
+}
+
+rtl::OUString GenericClipboard::getImplementationName() throw( RuntimeException )
+{
+ return getImplementationName_static();
+}
+
+Sequence< rtl::OUString > GenericClipboard::getSupportedServiceNames() throw( RuntimeException )
+{
+ return getSupportedServiceNames_static();
+}
+
+sal_Bool GenericClipboard::supportsService( const ::rtl::OUString& ServiceName ) throw( RuntimeException )
+{
+ Sequence< OUString > aServices( getSupportedServiceNames() );
+ sal_Int32 nServices = aServices.getLength();
+ for( sal_Int32 i = 0; i < nServices; i++ )
+ {
+ if( aServices[i] == ServiceName )
+ return sal_True;
+ }
+ return sal_False;
+}
+
+Reference< ::com::sun::star::datatransfer::XTransferable > GenericClipboard::getContents() throw( RuntimeException )
+{
+ return m_aContents;
+}
+
+void GenericClipboard::setContents(
+ const Reference< ::com::sun::star::datatransfer::XTransferable >& xTrans,
+ const Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
+ throw( RuntimeException )
+{
+ osl::ClearableMutexGuard aGuard( m_aMutex );
+ Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner );
+ Reference< datatransfer::XTransferable > xOldContents( m_aContents );
+ m_aContents = xTrans;
+ m_aOwner = xClipboardOwner;
+
+ std::list< Reference< datatransfer::clipboard::XClipboardListener > > xListeners( m_aListeners );
+ datatransfer::clipboard::ClipboardEvent aEv;
+ aEv.Contents = m_aContents;
+
+ aGuard.clear();
+
+ if( xOldOwner.is() && xOldOwner != xClipboardOwner )
+ xOldOwner->lostOwnership( this, xOldContents );
+ for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it =
+ xListeners.begin(); it != xListeners.end() ; ++it )
+ {
+ (*it)->changedContents( aEv );
+ }
+}
+
+rtl::OUString GenericClipboard::getName() throw( RuntimeException )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CLIPBOARD" ) );
+}
+
+sal_Int8 GenericClipboard::getRenderingCapabilities() throw( RuntimeException )
+{
+ return 0;
+}
+
+void GenericClipboard::addClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener )
+ throw( RuntimeException )
+{
+ osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ m_aListeners.push_back( listener );
+}
+
+void GenericClipboard::removeClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener )
+ throw( RuntimeException )
+{
+ osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ m_aListeners.remove( listener );
+}
+
+// ------------------------------------------------------------------------
+
+class ClipboardFactory : public ::cppu::WeakComponentImplHelper1<
+ com::sun::star::lang::XSingleServiceFactory
+>
+{
+ osl::Mutex m_aMutex;
+public:
+ ClipboardFactory();
+ virtual ~ClipboardFactory();
+
+ /*
+ * XSingleServiceFactory
+ */
+ virtual Reference< XInterface > SAL_CALL createInstance() throw();
+ virtual Reference< XInterface > SAL_CALL createInstanceWithArguments( const Sequence< Any >& rArgs ) throw();
+};
+
+// ------------------------------------------------------------------------
+
+ClipboardFactory::ClipboardFactory() :
+ cppu::WeakComponentImplHelper1<
+ com::sun::star::lang::XSingleServiceFactory
+>( m_aMutex )
+{
+}
+
+// ------------------------------------------------------------------------
+
+ClipboardFactory::~ClipboardFactory()
+{
+}
+
+// ------------------------------------------------------------------------
+
+Reference< XInterface > ClipboardFactory::createInstance() throw()
+{
+ return createInstanceWithArguments( Sequence< Any >() );
+}
+
+// ------------------------------------------------------------------------
+
+Reference< XInterface > ClipboardFactory::createInstanceWithArguments( const Sequence< Any >& arguments ) throw()
+{
+ vos::OGuard aGuard( Application::GetSolarMutex() );
+ Reference< XInterface > xResult = ImplGetSVData()->mpDefInst->CreateClipboard( arguments );
+ return xResult;
+}
+
+// ------------------------------------------------------------------------
+
+Sequence< OUString > SAL_CALL Clipboard_getSupportedServiceNames()
+{
+ Sequence< OUString > aRet(1);
+ aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard");
+ return aRet;
+}
+
+OUString SAL_CALL Clipboard_getImplementationName()
+{
+ #if defined UNX
+ return OUString( RTL_CONSTASCII_USTRINGPARAM(
+ #if ! defined QUARTZ
+ "com.sun.star.datatransfer.X11ClipboardSupport"
+ #else
+ "com.sun.star.datatransfer.clipboard.AquaClipboard"
+ #endif
+ ) );
+ #else
+ return GenericClipboard::getImplementationName_static();
+ #endif
+}
+
+Reference< XSingleServiceFactory > SAL_CALL Clipboard_createFactory( const Reference< XMultiServiceFactory > & )
+{
+ return Reference< XSingleServiceFactory >( new ClipboardFactory() );
+}
+
+/*
+* generic DragSource dummy
+*/
+class GenericDragSource : public cppu::WeakComponentImplHelper2<
+ datatransfer::dnd::XDragSource,
+ XInitialization
+ >
+{
+ osl::Mutex m_aMutex;
+public:
+ GenericDragSource() : cppu::WeakComponentImplHelper2< datatransfer::dnd::XDragSource, XInitialization >( m_aMutex ) {}
+ virtual ~GenericDragSource();
+
+ // XDragSource
+ virtual sal_Bool SAL_CALL isDragImageSupported() throw();
+ virtual sal_Int32 SAL_CALL getDefaultCursor( sal_Int8 dragAction ) throw();
+ virtual void SAL_CALL startDrag(
+ const datatransfer::dnd::DragGestureEvent& trigger,
+ sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image,
+ const Reference< datatransfer::XTransferable >& transferable,
+ const Reference< datatransfer::dnd::XDragSourceListener >& listener
+ ) throw();
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const Sequence< Any >& arguments ) throw( ::com::sun::star::uno::Exception );
+
+ static Sequence< OUString > getSupportedServiceNames_static()
+ {
+ Sequence< OUString > aRet( 1 );
+ aRet[0] = OUString::createFromAscii( "com.sun.star.datatransfer.dnd.GenericDragSource" );
+ return aRet;
+ }
+
+ static OUString getImplementationName_static()
+ {
+ return OUString::createFromAscii( "com.sun.star.datatransfer.dnd.VclGenericDragSource" );
+ }
+};
+
+GenericDragSource::~GenericDragSource()
+{
+}
+
+sal_Bool GenericDragSource::isDragImageSupported() throw()
+{
+ return sal_False;
+}
+
+sal_Int32 GenericDragSource::getDefaultCursor( sal_Int8 ) throw()
+{
+ return 0;
+}
+
+void GenericDragSource::startDrag( const datatransfer::dnd::DragGestureEvent&,
+ sal_Int8 /*sourceActions*/, sal_Int32 /*cursor*/, sal_Int32 /*image*/,
+ const Reference< datatransfer::XTransferable >&,
+ const Reference< datatransfer::dnd::XDragSourceListener >& listener
+ ) throw()
+{
+ datatransfer::dnd::DragSourceDropEvent aEv;
+ aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_COPY;
+ aEv.DropSuccess = sal_False;
+ listener->dragDropEnd( aEv );
+}
+
+void GenericDragSource::initialize( const Sequence< Any >& ) throw( Exception )
+{
+}
+
+
+Sequence< OUString > SAL_CALL DragSource_getSupportedServiceNames()
+{
+ #if defined UNX
+ static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM(
+ #if ! defined QUARTZ
+ "com.sun.star.datatransfer.dnd.X11DragSource"
+ #else
+ "com.sun.star.datatransfer.dnd.OleDragSource"
+ #endif
+ ) );
+ static Sequence< OUString > aServiceNames( &aServiceName, 1 );
+ return aServiceNames;
+ #else
+ return GenericDragSource::getSupportedServiceNames_static();
+ #endif
+}
+
+OUString SAL_CALL DragSource_getImplementationName()
+{
+ #if defined UNX
+ return OUString( RTL_CONSTASCII_USTRINGPARAM(
+ #if ! defined QUARTZ
+ "com.sun.star.datatransfer.dnd.XdndSupport"
+ #else
+ "com.sun.star.comp.datatransfer.dnd.OleDragSource_V1"
+ #endif
+ ) );
+ #else
+ return GenericDragSource::getImplementationName_static();
+ #endif
+}
+
+Reference< XInterface > SAL_CALL DragSource_createInstance( const Reference< XMultiServiceFactory >& )
+{
+ vos::OGuard aGuard( Application::GetSolarMutex() );
+ Reference< XInterface > xResult = ImplGetSVData()->mpDefInst->CreateDragSource();
+ return xResult;
+}
+
+/*
+* generic DragSource dummy
+*/
+
+class GenericDropTarget : public cppu::WeakComponentImplHelper2<
+ datatransfer::dnd::XDropTarget,
+ XInitialization
+ >
+{
+ osl::Mutex m_aMutex;
+public:
+ GenericDropTarget() : cppu::WeakComponentImplHelper2<
+ datatransfer::dnd::XDropTarget,
+ XInitialization
+ > ( m_aMutex )
+ {}
+ virtual ~GenericDropTarget();
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const Sequence< Any >& args ) throw ( Exception );
+
+ // XDropTarget
+ virtual void SAL_CALL addDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw();
+ virtual void SAL_CALL removeDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw();
+ virtual sal_Bool SAL_CALL isActive() throw();
+ virtual void SAL_CALL setActive( sal_Bool active ) throw();
+ virtual sal_Int8 SAL_CALL getDefaultActions() throw();
+ virtual void SAL_CALL setDefaultActions( sal_Int8 actions ) throw();
+
+ static Sequence< OUString > getSupportedServiceNames_static()
+ {
+ Sequence< OUString > aRet( 1 );
+ aRet[0] = OUString::createFromAscii( "com.sun.star.datatransfer.dnd.GenericDropTarget" );
+ return aRet;
+ }
+
+ static OUString getImplementationName_static()
+ {
+ return OUString::createFromAscii( "com.sun.star.datatransfer.dnd.VclGenericDropTarget" );
+ }
+};
+
+GenericDropTarget::~GenericDropTarget()
+{
+}
+
+void GenericDropTarget::initialize( const Sequence< Any >& ) throw( Exception )
+{
+}
+
+void GenericDropTarget::addDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw()
+{
+}
+
+void GenericDropTarget::removeDropTargetListener( const Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >& ) throw()
+{
+}
+
+sal_Bool GenericDropTarget::isActive() throw()
+{
+ return sal_False;
+}
+
+void GenericDropTarget::setActive( sal_Bool ) throw()
+{
+}
+
+sal_Int8 GenericDropTarget::getDefaultActions() throw()
+{
+ return 0;
+}
+
+void GenericDropTarget::setDefaultActions( sal_Int8) throw()
+{
+}
+
+Sequence< OUString > SAL_CALL DropTarget_getSupportedServiceNames()
+{
+ #if defined UNX
+ static OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM(
+ #if ! defined QUARTZ
+ "com.sun.star.datatransfer.dnd.X11DropTarget"
+ #else
+ "com.sun.star.datatransfer.dnd.OleDropTarget"
+ #endif
+ ) );
+ static Sequence< OUString > aServiceNames( &aServiceName, 1 );
+ return aServiceNames;
+ #else
+ return GenericDropTarget::getSupportedServiceNames_static();
+ #endif
+}
+
+OUString SAL_CALL DropTarget_getImplementationName()
+{
+ #if defined UNX
+ return OUString( RTL_CONSTASCII_USTRINGPARAM(
+ #if ! defined QUARTZ
+ "com.sun.star.datatransfer.dnd.XdndDropTarget"
+ #else
+ "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1"
+ #endif
+ ) );
+ #else
+ return GenericDropTarget::getImplementationName_static();
+ #endif
+}
+
+Reference< XInterface > SAL_CALL DropTarget_createInstance( const Reference< XMultiServiceFactory >& )
+{
+ vos::OGuard aGuard( Application::GetSolarMutex() );
+ Reference< XInterface > xResult = ImplGetSVData()->mpDefInst->CreateDropTarget();
+ return xResult;
+}
+
+
+} // namespace vcl
+
+/*
+* SalInstance generic
+*/
+Reference< XInterface > SalInstance::CreateClipboard( const Sequence< Any >& )
+{
+ return Reference< XInterface >( ( cppu::OWeakObject * )new vcl::GenericClipboard() );
+}
+
+Reference< XInterface > SalInstance::CreateDragSource()
+{
+ return Reference< XInterface >( ( cppu::OWeakObject * )new vcl::GenericDragSource() );
+}
+
+Reference< XInterface > SalInstance::CreateDropTarget()
+{
+ return Reference< XInterface >( ( cppu::OWeakObject * )new vcl::GenericDropTarget() );
+}
+
diff --git a/vcl/source/components/factory.cxx b/vcl/source/components/factory.cxx
index ef2e5c3b85fd..e816c31c613a 100644
--- a/vcl/source/components/factory.cxx
+++ b/vcl/source/components/factory.cxx
@@ -59,11 +59,23 @@ namespace vcl
{
extern Sequence< OUString > SAL_CALL DisplayAccess_getSupportedServiceNames();
extern OUString SAL_CALL DisplayAccess_getImplementationName();
-extern Reference< XInterface > SAL_CALL DisplayAccess_createInstance( const Reference< XMultiServiceFactory > & );
+extern Reference< XInterface > SAL_CALL DisplayAccess_createInstance( const Reference< XMultiServiceFactory > & );
extern Sequence< OUString > SAL_CALL FontIdentificator_getSupportedServiceNames();
extern OUString SAL_CALL FontIdentificator_getImplementationName();
-extern Reference< XInterface > SAL_CALL FontIdentificator_createInstance( const Reference< XMultiServiceFactory > & );
+extern Reference< XInterface > SAL_CALL FontIdentificator_createInstance( const Reference< XMultiServiceFactory > & );
+
+extern Sequence< OUString > SAL_CALL Clipboard_getSupportedServiceNames();
+extern OUString SAL_CALL Clipboard_getImplementationName();
+extern Reference< XSingleServiceFactory > SAL_CALL Clipboard_createFactory( const Reference< XMultiServiceFactory > & );
+
+extern Sequence< OUString > SAL_CALL DragSource_getSupportedServiceNames();
+extern OUString SAL_CALL DragSource_getImplementationName();
+extern Reference< XInterface > SAL_CALL DragSource_createInstance( const Reference< XMultiServiceFactory > & );
+
+extern Sequence< OUString > SAL_CALL DropTarget_getSupportedServiceNames();
+extern OUString SAL_CALL DropTarget_getImplementationName();
+extern Reference< XInterface > SAL_CALL DropTarget_createInstance( const Reference< XMultiServiceFactory > & );
}
extern "C" {
@@ -102,6 +114,26 @@ extern "C" {
aImplName.append( vcl::FontIdentificator_getSupportedServiceNames()[0] );
xKey->createKey( aImplName.makeStringAndClear() );
+ #if defined UNX
+ aImplName.appendAscii( "/" );
+ aImplName.append( vcl::Clipboard_getImplementationName() );
+ aImplName.appendAscii( "/UNO/SERVICES/" );
+ aImplName.append( vcl::Clipboard_getSupportedServiceNames()[0] );
+ xKey->createKey( aImplName.makeStringAndClear() );
+
+ aImplName.appendAscii( "/" );
+ aImplName.append( vcl::DragSource_getImplementationName() );
+ aImplName.appendAscii( "/UNO/SERVICES/" );
+ aImplName.append( vcl::DragSource_getSupportedServiceNames()[0] );
+ xKey->createKey( aImplName.makeStringAndClear() );
+
+ aImplName.appendAscii( "/" );
+ aImplName.append( vcl::DropTarget_getImplementationName() );
+ aImplName.appendAscii( "/UNO/SERVICES/" );
+ aImplName.append( vcl::DropTarget_getSupportedServiceNames()[0] );
+ xKey->createKey( aImplName.makeStringAndClear() );
+ #endif
+
return sal_True;
}
catch( ::com::sun::star::registry::InvalidRegistryException& )
@@ -143,6 +175,22 @@ extern "C" {
xMgr, vcl::FontIdentificator_getImplementationName(), vcl::FontIdentificator_createInstance,
vcl::FontIdentificator_getSupportedServiceNames() );
}
+ else if( vcl::Clipboard_getImplementationName().equalsAscii( pImplementationName ) )
+ {
+ xFactory = vcl::Clipboard_createFactory( xMgr );
+ }
+ else if( vcl::DragSource_getImplementationName().equalsAscii( pImplementationName ) )
+ {
+ xFactory = ::cppu::createSingleFactory(
+ xMgr, vcl::DragSource_getImplementationName(), vcl::DragSource_createInstance,
+ vcl::DragSource_getSupportedServiceNames() );
+ }
+ else if( vcl::DropTarget_getImplementationName().equalsAscii( pImplementationName ) )
+ {
+ xFactory = ::cppu::createSingleFactory(
+ xMgr, vcl::DropTarget_getImplementationName(), vcl::DropTarget_createInstance,
+ vcl::DropTarget_getSupportedServiceNames() );
+ }
if( xFactory.is() )
{
xFactory->acquire();
diff --git a/vcl/source/components/makefile.mk b/vcl/source/components/makefile.mk
index 9158d33bb888..8cc836fe5424 100644
--- a/vcl/source/components/makefile.mk
+++ b/vcl/source/components/makefile.mk
@@ -44,6 +44,7 @@ ENABLE_EXCEPTIONS=TRUE
# --- Files --------------------------------------------------------
SLOFILES= $(SLO)$/display.obj \
+ $(SLO)$/dtranscomp.obj \
$(SLO)$/fontident.obj \
$(SLO)$/factory.obj
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 23235e14f448..71af9b3142c9 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -420,10 +420,9 @@ void Button::ImplDrawAlignedImage( OutputDevice* pDev, Point& rPos,
Image *pImage = &(mpButtonData->maImage);
BitmapEx *pBitmapEx = mpButtonData->mpBitmapEx;
- Color aBackCol;
- if( !!(mpButtonData->maImageHC) && ImplGetCurrentBackgroundColor( aBackCol ) )
+ if( !!(mpButtonData->maImageHC) )
{
- if( aBackCol.IsDark() )
+ if( GetSettings().GetStyleSettings().GetHighContrastMode() )
{
pImage = &(mpButtonData->maImageHC);
pBitmapEx = mpButtonData->mpBitmapExHC;
@@ -2378,14 +2377,10 @@ if ( bNativeOK == FALSE )
// check for HC mode
Image *pImage = &maImage;
- Color aBackCol;
- if( !!maImageHC && ImplGetCurrentBackgroundColor( aBackCol ) )
+ if( !!maImageHC )
{
- if( aBackCol.IsDark() )
+ if( rStyleSettings.GetHighContrastMode() )
pImage = &maImageHC;
- // #99902 no col transform required
- //if( aBackCol.IsBright() )
- // nStyle |= IMAGE_DRAW_COLORTRANSFORM;
}
Point aImagePos( aImageRect.TopLeft() );
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 49c7e5457da7..f83e46e38302 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -287,6 +287,7 @@ BOOL ComboBox::IsAutocompleteEnabled() const
IMPL_LINK( ComboBox, ImplClickBtnHdl, void*, EMPTYARG )
{
+ ImplCallEventListeners( VCLEVENT_DROPDOWN_PRE_OPEN );
mpSubEdit->GrabFocus();
if ( !mpImplLB->GetEntryList()->GetMRUCount() )
ImplUpdateFloatSelection();
@@ -523,6 +524,7 @@ void ComboBox::ToggleDropDown()
ImplUpdateFloatSelection();
else
mpImplLB->SelectEntry( 0 , TRUE );
+ ImplCallEventListeners( VCLEVENT_DROPDOWN_PRE_OPEN );
mpBtn->SetPressed( TRUE );
SetSelection( Selection( 0, SELECTION_MAX ) );
mpFloatWin->StartFloat( TRUE );
@@ -800,14 +802,8 @@ void ComboBox::DataChanged( const DataChangedEvent& rDCEvt )
long ComboBox::PreNotify( NotifyEvent& rNEvt )
{
- long nDone = 0;
-
- if( ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN ) && ( rNEvt.GetWindow() == mpImplLB->GetMainWindow() ) )
- {
- mpSubEdit->GrabFocus();
- }
- return nDone ? nDone : Edit::PreNotify( rNEvt );
+ return Edit::PreNotify( rNEvt );
}
// -----------------------------------------------------------------------
@@ -830,6 +826,7 @@ long ComboBox::Notify( NotifyEvent& rNEvt )
ImplUpdateFloatSelection();
if( ( nKeyCode == KEY_DOWN ) && mpFloatWin && !mpFloatWin->IsInPopupMode() && aKeyEvt.GetKeyCode().IsMod2() )
{
+ ImplCallEventListeners( VCLEVENT_DROPDOWN_PRE_OPEN );
mpBtn->SetPressed( TRUE );
if ( mpImplLB->GetEntryList()->GetMRUCount() )
mpImplLB->SelectEntry( 0 , TRUE );
@@ -886,6 +883,10 @@ long ComboBox::Notify( NotifyEvent& rNEvt )
nDone = 0; // don't eat this event, let the default handling happen (i.e. scroll the context)
}
}
+ else if( ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN ) && ( rNEvt.GetWindow() == mpImplLB->GetMainWindow() ) )
+ {
+ mpSubEdit->GrabFocus();
+ }
return nDone ? nDone : Edit::Notify( rNEvt );
}
diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx
index 1bc6af51f369..3cb6e45f0400 100644
--- a/vcl/source/control/field.cxx
+++ b/vcl/source/control/field.cxx
@@ -503,6 +503,9 @@ void NumericFormatter::ImplLoadRes( const ResId& rResId )
mnFieldValue = mnMin;
mnLastValue = mnFieldValue;
}
+
+ if ( NUMERICFORMATTER_NOTHOUSANDSEP & nMask )
+ SetUseThousandSep( !(BOOL)pMgr->ReadShort() );
}
}
diff --git a/vcl/source/control/fixed.cxx b/vcl/source/control/fixed.cxx
index 0bf440e9c349..f3ec855c2544 100644
--- a/vcl/source/control/fixed.cxx
+++ b/vcl/source/control/fixed.cxx
@@ -804,13 +804,10 @@ void FixedBitmap::ImplDraw( OutputDevice* pDev, ULONG /* nDrawFlags */,
USHORT nStyle = 0;
Bitmap* pBitmap = &maBitmap;
Color aCol;
- if( !!maBitmapHC && ImplGetCurrentBackgroundColor( aCol ) )
+ if( !!maBitmapHC )
{
- if( aCol.IsDark() )
+ if( GetSettings().GetStyleSettings().GetHighContrastMode() )
pBitmap = &maBitmapHC;
- // #99902 no col transform required
- //if( aCol.IsBright() )
- // nStyle |= IMAGE_DRAW_COLORTRANSFORM;
}
if( nStyle & IMAGE_DRAW_COLORTRANSFORM )
@@ -1058,13 +1055,10 @@ void FixedImage::ImplDraw( OutputDevice* pDev, ULONG nDrawFlags,
Image *pImage = &maImage;
Color aCol;
- if( !!maImageHC && ImplGetCurrentBackgroundColor( aCol ) )
+ if( !!maImageHC )
{
- if( aCol.IsDark() )
+ if( GetSettings().GetStyleSettings().GetHighContrastMode() )
pImage = &maImageHC;
- // #99902 no col transform required
- //if( aCol.IsBright() )
- // nStyle |= IMAGE_DRAW_COLORTRANSFORM;
}
// Haben wir ueberhaupt ein Image
diff --git a/vcl/source/control/ilstbox.cxx b/vcl/source/control/ilstbox.cxx
index b3fed3ee7a05..318180aae667 100644
--- a/vcl/source/control/ilstbox.cxx
+++ b/vcl/source/control/ilstbox.cxx
@@ -2901,23 +2901,8 @@ void ImplWin::DrawEntry( BOOL bDrawImage, BOOL bDrawText, BOOL bDrawTextAtImageP
if( !!maImageHC )
{
- // determine backgroundcolor as done in Paint()
- Color aBackCol;
- if( IsEnabled() )
- {
- if( HasFocus() )
- aBackCol = GetSettings().GetStyleSettings().GetHighlightColor();
- else
- aBackCol = GetBackground().GetColor();
- }
- else // Disabled
- aBackCol = GetBackground().GetColor();
-
- if( aBackCol.IsDark() )
+ if( GetSettings().GetStyleSettings().GetHighContrastMode() )
pImage = &maImageHC;
- // #99902 no col transform required
- //if( aBackCol.IsBright() )
- // nStyle |= IMAGE_DRAW_COLORTRANSFORM;
}
if ( !IsZoom() )
diff --git a/vcl/source/control/imgctrl.cxx b/vcl/source/control/imgctrl.cxx
index 6d4777013a73..73b5154d32ac 100644
--- a/vcl/source/control/imgctrl.cxx
+++ b/vcl/source/control/imgctrl.cxx
@@ -93,14 +93,10 @@ void ImageControl::UserDraw( const UserDrawEvent& rUDEvt )
{
USHORT nStyle = 0;
BitmapEx* pBitmap = &maBmp;
- Color aCol;
- if( !!maBmpHC && ImplGetCurrentBackgroundColor( aCol ) )
+ if( !!maBmpHC )
{
- if( aCol.IsDark() )
+ if( GetSettings().GetStyleSettings().GetHighContrastMode() )
pBitmap = &maBmpHC;
- // #99902 no col transform required
- //if( aCol.IsBright() )
- // nStyle |= IMAGE_DRAW_COLORTRANSFORM;
}
if ( !*pBitmap )
diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx
index ce1f4f5ce22a..a3de6c6a937d 100644
--- a/vcl/source/control/lstbox.cxx
+++ b/vcl/source/control/lstbox.cxx
@@ -304,6 +304,7 @@ IMPL_LINK( ListBox, ImplClickBtnHdl, void*, EMPTYARG )
{
if( !mpFloatWin->IsInPopupMode() )
{
+ ImplCallEventListeners( VCLEVENT_DROPDOWN_PRE_OPEN );
mpImplWin->GrabFocus();
mpBtn->SetPressed( TRUE );
mpFloatWin->StartFloat( TRUE );
@@ -364,6 +365,7 @@ void ListBox::ToggleDropDown()
mpFloatWin->EndPopupMode();
else
{
+ ImplCallEventListeners( VCLEVENT_DROPDOWN_PRE_OPEN );
mpImplWin->GrabFocus();
mpBtn->SetPressed( TRUE );
mpFloatWin->StartFloat( TRUE );
@@ -920,6 +922,7 @@ long ListBox::PreNotify( NotifyEvent& rNEvt )
if( mpFloatWin && !mpFloatWin->IsInPopupMode() &&
aKeyEvt.GetKeyCode().IsMod2() )
{
+ ImplCallEventListeners( VCLEVENT_DROPDOWN_PRE_OPEN );
mpBtn->SetPressed( TRUE );
mpFloatWin->StartFloat( FALSE );
ImplCallEventListeners( VCLEVENT_DROPDOWN_OPEN );
diff --git a/vcl/source/fontsubset/cff.cxx b/vcl/source/fontsubset/cff.cxx
new file mode 100644
index 000000000000..e5d83dc0733a
--- /dev/null
+++ b/vcl/source/fontsubset/cff.cxx
@@ -0,0 +1,2482 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <cstdio>
+#include <cstring>
+#include <assert.h>
+
+#include <vcl/fontsubset.hxx>
+
+//#define IGNORE_HINTS
+
+typedef unsigned char U8;
+typedef unsigned short U16;
+typedef long long S64;
+
+typedef sal_Int32 GlyphWidth;
+
+typedef float RealType;
+typedef RealType ValType;
+#include <vector>
+typedef std::vector<ValType> ValVector;
+
+// ====================================================================
+
+static const char* pStringIds[] = {
+/*0*/ ".notdef", "space", "exclam", "quotedbl",
+ "numbersign", "dollar", "percent", "ampersand",
+ "quoteright", "parenleft", "parenright", "asterisk",
+ "plus", "comma", "hyphen", "period",
+/*16*/ "slash", "zero", "one", "two",
+ "three", "four", "five", "six",
+ "seven", "eight", "nine", "colon",
+ "semicolon", "less", "equal", "greater",
+/*32*/ "question", "at", "A", "B",
+ "C", "D", "E", "F",
+ "G", "H", "I", "J",
+ "K", "L", "M", "N",
+/*48*/ "O", "P", "Q", "R",
+ "S", "T", "U", "V",
+ "W", "X", "Y", "Z",
+ "bracketleft", "backslash", "bracketright", "asciicircum",
+/*64*/ "underscore", "quoteleft", "a", "b",
+ "c", "d", "e", "f",
+ "g", "h", "i", "j",
+ "k", "l", "m", "n",
+/*80*/ "o", "p", "q", "r",
+ "s", "t", "u", "v",
+ "w", "x", "y", "z",
+ "braceleft", "bar", "braceright", "asciitilde",
+/*96*/ "exclamdown", "cent", "sterlin", "fraction",
+ "yen", "florin", "section", "currency",
+ "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft",
+ "guilsinglright", "fi", "fl", "endash",
+/*112*/ "dagger", "daggerdbl", "periodcentered", "paragraph",
+ "bullet", "quotesinglbase", "quotedblbase", "quotedblright",
+ "guillemotright", "ellipsis", "perthousand", "questiondown",
+ "grave", "acute", "circumflex", "tilde",
+/*128*/ "macron", "breve", "dotaccent", "dieresis",
+ "ring", "cedilla", "hungarumlaut", "ogonek",
+ "caron", "endash", "AE", "ordfeminine",
+ "Lslash", "Oslash", "OE", "ordmasculine",
+/*144*/ "ae", "dotlessi", "lslash", "oslash",
+ "oe", "germandbls", "onesuperior", "logicalnot",
+ "mu", "trademark", "Eth", "onehalf",
+ "plusminus", "Thorn", "onequarter", "divide",
+/*160*/ "brokenbar", "degree", "thorn", "threequarters",
+ "twosuperior", "registered", "minus", "eth",
+ "multiply", "threesuperior", "copyright", "Aacute",
+ "Acircumflex", "Adieresis", "Agrave", "Aring",
+/*176*/ "Atilde", "Ccedilla", "Eacute", "Ecircumflex",
+ "Edieresis", "Egrave", "Iacute", "Icircumflex",
+ "Idieresis", "Igrave", "Ntilde", "Oacute",
+ "Ocircumflex", "Odieresis", "Ograve", "Otilde",
+/*192*/ "Scaron", "Uacute", "Ucircumflex", "Udieresis",
+ "Ugrave", "Yacute", "Ydieresis", "Zcaron",
+ "aacute", "acircumflex", "adieresis", "agrave",
+ "aring", "atilde", "ccedilla", "eacute",
+/*208*/ "ecircumflex", "edieresis", "egrave", "iacute",
+ "icircumflex", "idieresis", "igrave", "ntilde",
+ "oacute", "ocircumflex", "odieresis", "ograve",
+ "otilde", "scaron", "uacute", "ucircumflex",
+/*224*/ "udieresis", "ugrave", "yacute", "ydieresis",
+ "zcaron", "exclamsmall", "Hungarumlautsmall","dollaroldstyle",
+ "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior",
+ "parenrightsuperior","twodotenleader", "onedotenleader", "zerooldstyle",
+/*240*/ "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle",
+ "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle",
+ "nineoldstile", "commasuperior", "threequartersemdash","periodsuperior",
+ "questionsmall", "asuperior", "bsuperior", "centsuperior",
+/*256*/ "dsuperior", "esuperior", "isuperior", "lsuperior",
+ "msuperior", "nsuperior", "osuperior", "rsuperior",
+ "ssuperior", "tsuperior", "ff", "ffi",
+ "ffl", "parenleftinferior","parenrightinferior","Circumflexsmall",
+/*272*/ "hyphensuperior","Gravesmall", "Asmall", "Bsmall",
+ "Csmall", "Dsmall", "Esmall", "Fsmall",
+ "Gsmall", "Hsmall", "Ismall", "Jsmall",
+ "Ksmall", "Lsmall", "Msmall", "Nsmall",
+/*288*/ "Osmall", "Psmall", "Qsmall", "Rsmall",
+ "Ssmall", "Tsmall", "Usmall", "Vsmall",
+ "Wsmall", "Xsmall", "Ysmall", "Zsmall",
+ "colonmonetary", "onefitted", "rupia", "Tildesmall",
+/*304*/ "exclamdownsmall","centoldstyle", "Lslashsmall", "Scaronsmall",
+ "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall",
+ "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior",
+ "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall",
+/*320*/ "oneeight", "threeeights", "fiveeights", "seveneights",
+ "onethird", "twothirds", "zerosuperior", "foursuperior",
+ "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior",
+ "ninesuperior", "zeroinferior", "oneinferior", "twoinferior",
+/*336*/ "threeinferior","fourinferior", "fiveinferior", "sixinferior",
+ "seveninferior", "eightinferior", "nineinferior", "centinferior",
+ "dollarinferior", "periodinferior", "commainferior", "Agravesmall",
+ "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall",
+/*352*/ "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall",
+ "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall",
+ "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall",
+ "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall",
+/*368*/ "Otildesmall", "Odieressissmall", "OEsmall", "Oslashsmall",
+ "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall",
+ "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000",
+ "001.001", "001.002", "001.003", "Black",
+/*384*/ "Bold", "Book", "Light", "Medium",
+ "Regular", "Roman", "Semibold"
+};
+
+// --------------------------------------------------------------------
+
+#if 0 // TODO: use them
+static const char* pStdEncNames[] = {
+ "ISOAdobe", "Expert", "ExpertSubSet"
+};
+#endif
+
+// --------------------------------------------------------------------
+
+// TOP DICT keywords (also covers PRIV DICT keywords)
+static const char* pDictOps[] = {
+ "sVersion", "sNotice", "sFullName", "sFamilyName",
+ "sWeight", "aFontBBox", "dBlueValues", "dOtherBlues",
+ "dFamilyBlues", "dFamilyOtherBlues", "nStdHW", "nStdVW",
+ "xESC", "nUniqueID", "aXUID", "nCharset",
+ "nEncoding", "nCharStrings", "PPrivate", "nSubrs",
+ "nDefaultWidthX", "nNominalWidthX", NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ "shortint", "longint", "BCD", NULL
+};
+
+// --------------------------------------------------------------------
+
+// TOP DICT escapes (also covers PRIV DICT escapes)
+static const char* pDictEscs[] = {
+ "sCopyright", "bIsFixedPitch", "nItalicAngle", "nUnderlinePosition",
+ "nUnderlineThickness", "nPaintType", "tCharstringType", "aFontMatrix",
+ "nStrokeWidth", "nBlueScale", "nBlueShift", "nBlueFuzz",
+ "dStemSnapH", "dStemSnapV", "bForceBold", NULL,
+ NULL, "nLanguageGroup", "nExpansionFactor", "nInitialRandomSeed",
+ "nSyntheticBase", "sPostScript", "sBaseFontName", "dBaseFontBlend",
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, "rROS", "nCIDFontVersion",
+ "nCIDFontRevision", "nCIDFontType", "nCIDCount", "nUIDBase",
+ "nFDArray", "nFDSelect", "sFontName"
+};
+
+// --------------------------------------------------------------------
+
+static const char* pType1Ops[] = {
+ NULL, "2hstem", NULL, "2vstem",
+ "1vmoveto", "Arlineto", "1hlineto", "1vlineto",
+ "Crrcurveto", "0closepath", "Lcallsubr", "0return",
+ "xT1ESC", "2hsbw", "0endchar", NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, "2rmoveto", "1hmoveto", NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, "4vhcurveto", "4hvcurveto"
+};
+
+// --------------------------------------------------------------------
+
+static const char* pT1EscOps[] = {
+ "0dotsection", "6vstem3", "6hstem3", NULL,
+ NULL, NULL, "5seac", "4sbw",
+ NULL, "1abs", "2add", "2sub",
+ "2div", NULL, NULL, NULL,
+ "Gcallothersubr", "1pop", NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, "2setcurrentpoint"
+};
+
+// --------------------------------------------------------------------
+
+struct TYPE1OP
+{
+ enum OPS
+ {
+ HSTEM=1, VSTEM=3, VMOVETO=4, RLINETO=5,
+ HLINETO=6, VLINETO=7, RCURVETO=8, CLOSEPATH=9,
+ CALLSUBR=10, RETURN=11, T1ESC=12, HSBW=13,
+ ENDCHAR=14, RMOVETO=21, HMOVETO=22, VHCURVETO=30,
+ HVCURVETO=31
+ };
+
+ enum ESCS
+ {
+ DOTSECTION=0, VSTEM3=1, HSTEM3=2, SEAC=6,
+ SBW=7, ABS=9, ADD=10, SUB=11,
+ DIV=12, CALLOTHERSUBR=16, POP=17, SETCURRENTPOINT=33
+ };
+};
+
+// --------------------------------------------------------------------
+
+static const char* pType2Ops[] = {
+ NULL, "hhstem", NULL, "vvstem",
+ "mvmoveto", "Arlineto", "Ehlineto", "Evlineto",
+ "Crrcurveto", NULL, "Lcallsubr", "Xreturn",
+ "xT2ESC", NULL, "eendchar", NULL,
+ NULL, NULL, "Hhstemhm", "Khintmask",
+ "Kcntrmask", "Mrmoveto", "mhmoveto", "Vvstemhm",
+ ".rcurveline", ".rlinecurve", ".vvcurveto", ".hhcurveto",
+ ".shortint", "Gcallgsubr", ".vhcurveto", ".hvcurveto"
+};
+
+// --------------------------------------------------------------------
+
+static const char* pT2EscOps[] = {
+ NULL, NULL, NULL, "2and",
+ "2or", "1not", NULL, NULL,
+ NULL, "1abs", "2add", "2sub",
+ "2div", NULL, "1neg", "2eq",
+ NULL, NULL, "1drop", NULL,
+ "1put", "1get", "4ifelse", "0random",
+ "2mul", NULL, "1sqrt", "1dup",
+ "2exch", "Iindex", "Rroll", NULL,
+ NULL, NULL, "7hflex", "Fflex",
+ "9hflex1", "fflex1"
+};
+
+// --------------------------------------------------------------------
+
+struct TYPE2OP
+{
+ enum OPS
+ {
+ HSTEM=1, VSTEM=3, VMOVETO=4, RLINETO=5,
+ HLINETO=6, VLINETO=7, RCURVETO=8, CALLSUBR=10,
+ RETURN=11, T2ESC=12, ENDCHAR=14, HSTEMHM=18,
+ HINTMASK=19, CNTRMASK=20, RMOVETO=21, HMOVETO=22,
+ VSTEMHM=23, RCURVELINE=24, RLINECURVE=25, VVCURVETO=26,
+ HHCURVETO=27, SHORTINT=28, CALLGSUBR=29, VHCURVETO=30,
+ HVCURVETO=31
+ };
+
+ enum ESCS
+ {
+ AND=3, OR=4, NOT=5, ABS=9,
+ ADD=10, SUB=11, DIV=12, NEG=14,
+ EQ=15, DROP=18, PUT=20, GET=21,
+ IFELSE=22, RANDOM=23, MUL=24, SQRT=26,
+ DUP=27, EXCH=28, INDEX=29, ROLL=30,
+ HFLEX=34, FLEX=35, HFLEX1=36, FLEX1=37
+ };
+};
+
+// ====================================================================
+
+struct CffGlobal
+{
+ explicit CffGlobal();
+
+ int mnNameIdxBase;
+ int mnNameIdxCount;
+ int mnStringIdxBase;
+ int mnStringIdxCount;
+ bool mbCIDFont;
+ int mnCharStrBase;
+ int mnCharStrCount;
+ int mnEncodingBase;
+ int mnCharsetBase;
+ int mnGlobalSubrBase;
+ int mnGlobalSubrCount;
+ int mnGlobalSubrBias;
+ int mnFDSelectBase;
+ int mnFontDictBase;
+ int mnFDAryCount;
+
+ ValVector maFontBBox;
+ ValVector maFontMatrix;
+
+ int mnFontNameSID;
+ int mnFullNameSID;
+ int mnFamilyNameSID;
+};
+
+// ====================================================================
+
+struct CffLocal
+{
+ explicit CffLocal();
+
+ int mnPrivDictBase;
+ int mnPrivDictSize;
+ int mnLocalSubrOffs;
+ int mnLocalSubrBase;
+ int mnLocalSubrCount;
+ int mnLocalSubrBias;
+ int mnNominalWidth;
+ int mnDefaultWidth;
+
+ // ATM hinting related values
+ int mnStemStdHW;
+ int mnStemStdVW;
+ ValVector maStemSnapH;
+ ValVector maStemSnapV;
+ ValVector maBlueValues;
+ ValVector maOtherBlues;
+ ValVector maFamilyBlues;
+ ValVector maFamilyOtherBlues;
+ RealType mfBlueScale;
+ RealType mfBlueShift;
+ RealType mfBlueFuzz;
+ RealType mfExpFactor;
+ int mnLangGroup;
+ bool mbForceBold;
+};
+
+// ====================================================================
+
+class SubsetterContext
+{
+public:
+ virtual ~SubsetterContext( void);
+ virtual bool emitAsType1( class Type1Emitter&,
+ const long* pGlyphIDs, const U8* pEncoding,
+ GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& ) = 0;
+};
+
+// --------------------------------------------------------------------
+
+SubsetterContext::~SubsetterContext( void)
+{}
+
+// ====================================================================
+
+class CffSubsetterContext
+: public SubsetterContext
+, private CffGlobal
+{
+public:
+ static const int NMAXSTACK = 48; // see CFF.appendixB
+ static const int NMAXHINTS = 2*96; // see CFF.appendixB
+ static const int NMAXTRANS = 32; // see CFF.appendixB
+public:
+ explicit CffSubsetterContext( const U8* pBasePtr, int nBaseLen);
+ virtual ~CffSubsetterContext( void);
+
+ void initialCffRead( void);
+ bool emitAsType1( class Type1Emitter&,
+ const long* pGlyphIDs, const U8* pEncoding,
+ GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& );
+
+ // used by charstring converter
+ void setCharStringType( int);
+ void fakeLocalSubrCount( int nLocalSubrs ) { maCffLocal[0].mnLocalSubrCount=nLocalSubrs;}
+ void readCharString( const U8* pTypeOps, int nTypeLen);
+protected:
+ int convert2Type1Ops( CffLocal*, const U8* pType2Ops, int nType2Len, U8* pType1Ops);
+private:
+ void readTypeOp( CffSubsetterContext&);
+ void convertOneTypeOp( void);
+ void convertOneTypeEsc( void);
+ void callType2Subr( bool bGlobal, int nSubrNumber);
+ long getReadOfs( void) const { return (long)(mpReadPtr - mpBasePtr);}
+
+ const U8* mpBasePtr;
+ const U8* mpBaseEnd;
+
+ const U8* mpReadPtr;
+ const U8* mpReadEnd;
+
+ U8* mpWritePtr;
+ bool mbSawError;
+ bool mbNeedClose;
+ bool mbIgnoreHints;
+ long mnCntrMask;
+
+private:
+ int seekIndexData( int nIndexBase, int nDataIndex);
+ void seekIndexEnd( int nIndexBase);
+
+private:
+ const char** mpCharStringOps;
+ const char** mpCharStringEscs;
+
+ CffLocal maCffLocal[16];
+ CffLocal* mpCffLocal;
+
+ void readDictOp( void);
+ RealType readRealVal( void);
+ const char* getString( int nStringID);
+ int getFDSelect( int nGlyphIndex) const;
+ int getGlyphSID( int nGlyphIndex) const;
+ const char* getGlyphName( int nGlyphIndex);
+
+ void readTypeOp( void);
+ void read2push( void);
+ void pop2write( void);
+ void writeType1Val( ValType);
+ void writeTypeOp( int nTypeOp);
+ void writeTypeEsc( int nTypeOp);
+ void writeCurveTo( int nStackPos, int nIX1, int nIY1, int nIX2, int nIY2, int nIX3, int nIY3);
+ void pop2MultiWrite( int nArgsPerTypo, int nTypeOp, int nTypeXor=0);
+ void popAll2Write( int nTypeOp);
+
+public: // TODO: is public really needed?
+ // accessing the value stack
+ // TODO: add more checks
+ void push( ValType nVal) { mnValStack[ mnStackIdx++] = nVal;}
+ ValType popVal( void) { return ((mnStackIdx>0) ? mnValStack[ --mnStackIdx] : 0);}
+ ValType peekVal( void) const { return ((mnStackIdx>0) ? mnValStack[ mnStackIdx-1] : 0);}
+ ValType getVal( int nIndex) const { return mnValStack[ nIndex];}
+ int popInt( void);
+ int peekInt( void) const;
+ int getInt( int nIndex) const;
+ int size( void) const { return mnStackIdx;}
+ bool empty( void) const { return !mnStackIdx;}
+ void clear( void) { mnStackIdx = 0;}
+
+ // accessing the charstring hints
+ void addHints( bool bVerticalHints);
+ int getHorzHintCount( void) const { return (mnHorzHintSize/2);}
+ int getVertHintCount( void) const { return (mnHintSize-mnHorzHintSize)/2;}
+ void getHintPair( int nIndex, ValType* nMin, ValType* nEnd) const;
+
+ // accessing other charstring specifics
+ bool hasCharWidth( void) const { return (mnCharWidth != -1);}
+ int getCharWidth( void) const { return mnCharWidth;}
+ void setNominalWidth( int nWidth) { mpCffLocal->mnNominalWidth = nWidth;}
+ void setDefaultWidth( int nWidth) { mpCffLocal->mnDefaultWidth = nWidth;}
+ void updateWidth( bool bUseFirstVal);
+
+private:
+ // typeop exceution context
+ int mnStackIdx;
+ ValType mnValStack[ NMAXSTACK];
+ ValType mnTransVals[ NMAXTRANS];
+
+ int mnHintSize;
+ int mnHorzHintSize;
+ ValType mnHintStack[ NMAXHINTS];
+
+ int mnCharWidth;
+};
+
+// --------------------------------------------------------------------
+
+CffSubsetterContext::CffSubsetterContext( const U8* pBasePtr, int nBaseLen)
+: mpBasePtr( pBasePtr)
+, mpBaseEnd( pBasePtr+nBaseLen)
+, mnStackIdx(0)
+, mnHintSize(0)
+, mnHorzHintSize(0)
+, mnCharWidth(-1)
+{
+// setCharStringType( 1);
+ // TODO: new CffLocal[ mnFDAryCount];
+ mpCffLocal = &maCffLocal[0];
+}
+
+// --------------------------------------------------------------------
+
+CffSubsetterContext::~CffSubsetterContext( void)
+{
+ // TODO: delete[] maCffLocal;
+}
+
+// --------------------------------------------------------------------
+
+inline int CffSubsetterContext::popInt( void)
+{
+ const ValType aVal = popVal();
+ const int nInt = static_cast<int>(aVal);
+ assert( nInt == aVal);
+ return nInt;
+}
+
+// --------------------------------------------------------------------
+
+inline int CffSubsetterContext::peekInt( void) const
+{
+ const ValType aVal = peekVal();
+ const int nInt = static_cast<int>(aVal);
+ assert( nInt == aVal);
+ return nInt;
+}
+
+// --------------------------------------------------------------------
+
+inline int CffSubsetterContext::getInt( int nIndex) const
+{
+ const ValType aVal = getVal( nIndex);
+ const int nInt = static_cast<int>(aVal);
+ assert( nInt == aVal);
+ return nInt;
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::updateWidth( bool bUseFirstVal)
+{
+#if 1 // TODO: is this still needed?
+ // the first value is not a hint but the charwidth
+ if( hasCharWidth())
+ return;
+#endif
+ if( bUseFirstVal) {
+ mnCharWidth = static_cast<int>(mpCffLocal->mnNominalWidth + mnValStack[0]);
+ // remove bottom stack entry
+ --mnStackIdx;
+ for( int i = 0; i < mnStackIdx; ++i)
+ mnValStack[ i] = mnValStack[ i+1];
+ } else {
+ mnCharWidth = mpCffLocal->mnDefaultWidth;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::addHints( bool bVerticalHints)
+{
+ // the first charstring value may a charwidth instead of a charwidth
+ updateWidth( (mnStackIdx & 1) != 0);
+ // return early (e.g. no implicit hints for hintmask)
+ if( !mnStackIdx)
+ return;
+
+ // copy the remaining values to the hint arrays
+ // assert( (mnStackIdx & 1) == 0); // depends on called subrs
+ if( mnStackIdx & 1) --mnStackIdx;//#######
+ // TODO: if( !bSubr) assert( mnStackIdx >= 2);
+
+ assert( (mnHintSize + mnStackIdx) <= 2*NMAXHINTS);
+
+#ifdef IGNORE_HINTS
+ mnHintSize += mnStackIdx;
+#else
+ ValType nHintOfs = 0;
+ for( int i = 0; i < mnStackIdx; ++i) {
+ nHintOfs += mnValStack[ i ];
+ mnHintStack[ mnHintSize++] = nHintOfs;
+ }
+#endif // IGNORE_HINTS
+ if( !bVerticalHints)
+ mnHorzHintSize = mnHintSize;
+
+ // clear all values from the stack
+ mnStackIdx = 0;
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::getHintPair( int nIndex, ValType* pMin, ValType* pEnd) const
+{
+ nIndex *= 2;
+ assert( nIndex < mnHintSize);
+ assert( nIndex >= 0);
+ const ValType* pHint = &mnHintStack[ nIndex ];
+ *pMin = pHint[0];
+ *pEnd = pHint[1];
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::setCharStringType( int nVal)
+{
+ switch( nVal) {
+ case 1: mpCharStringOps=pType1Ops; mpCharStringEscs=pT1EscOps; break;
+ case 2: mpCharStringOps=pType2Ops; mpCharStringEscs=pT2EscOps; break;
+ default: fprintf( stderr, "Unknown CharstringType=%d\n",nVal); break;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::readCharString( const U8* pTypeOps, int nTypeLen)
+{
+ mnStackIdx = 0;
+ mnHintSize = 0;
+ mnHorzHintSize = 0;
+ mnCharWidth = -1;
+
+ assert( nTypeLen >= 0);
+// assert( nEnd <= getLength());
+ mpReadPtr = pTypeOps;
+ mpReadEnd = mpReadPtr + nTypeLen;
+ // reset the execution context
+ while( mpReadPtr < mpReadEnd)
+ readTypeOp();
+//### assert( tellRel() == nEnd);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::readDictOp( void)
+{
+ ValType nVal = 0;
+ int nInt = 0;
+ const U8 c = *mpReadPtr;
+ if( c <= 21 ) {
+ int nOpId = *(mpReadPtr++);
+ const char* pCmdName;
+ if( nOpId != 12)
+ pCmdName = pDictOps[ nOpId];
+ else {
+ const U8 nExtId = *(mpReadPtr++);
+ pCmdName = pDictEscs[ nExtId];
+ nOpId = 900 + nExtId;
+ }
+
+ //TODO: if( nStackIdx > 0)
+ switch( *pCmdName) {
+ default: fprintf( stderr, "unsupported DictOp.type=\'%c\'\n", *pCmdName); break;
+ case 'b': // bool
+ nInt = popInt();
+ switch( nOpId) {
+ case 915: mpCffLocal->mbForceBold = nInt; break; // "ForceBold"
+ default: break; // TODO: handle more boolean dictops?
+ }
+ break;
+ case 'n': // dict-op number
+ nVal = popVal();
+ nInt = static_cast<int>(nVal);
+ switch( nOpId) {
+ case 10: mpCffLocal->mnStemStdHW = nInt; break; // "StdHW"
+ case 11: mpCffLocal->mnStemStdVW = nInt; break; // "StdVW"
+ case 15: mnCharsetBase = nInt; break; // "charset"
+ case 16: mnEncodingBase = nInt; break; // "nEncoding"
+ case 17: mnCharStrBase = nInt; break; // "nCharStrings"
+ case 19: mpCffLocal->mnLocalSubrOffs = nInt; break;// "nSubrs"
+ case 20: setDefaultWidth( nInt ); break; // "defaultWidthX"
+ case 21: setNominalWidth( nInt ); break; // "nominalWidthX"
+ case 909: mpCffLocal->mfBlueScale = nVal; break; // "BlueScale"
+ case 910: mpCffLocal->mfBlueShift = nVal; break; // "BlueShift"
+ case 911: mpCffLocal->mfBlueFuzz = nVal; break; // "BlueFuzz"
+ case 912: mpCffLocal->mfExpFactor = nVal; break; // "ExpansionFactor"
+ case 917: mpCffLocal->mnLangGroup = nInt; break; // "LanguageGroup"
+ case 936: mnFontDictBase = nInt; break; // "nFDArray"
+ case 937: mnFDSelectBase = nInt; break; // "nFDSelect"
+ default: break; // TODO: handle more numeric dictops?
+ }
+ break;
+ case 'a': { // array
+ switch( nOpId) {
+ case 5: maFontBBox.clear(); break; // "FontBBox"
+ case 907: maFontMatrix.clear(); break; // "FontMatrix"
+ default: break; // TODO: reset other arrays?
+ }
+ for( int i = 0; i < size(); ++i ) {
+ nVal = getVal(i);
+ switch( nOpId) {
+ case 5: maFontBBox.push_back( nVal); break; // "FontBBox"
+ case 907: maFontMatrix.push_back( nVal); break; // "FontMatrix"
+ default: break; // TODO: handle more array dictops?
+ }
+ }
+ clear();
+ } break;
+ case 'd': { // delta array
+ nVal = 0;
+ for( int i = 0; i < size(); ++i ) {
+ nVal += getVal(i);
+ switch( nOpId) {
+ case 6: mpCffLocal->maBlueValues.push_back( nVal); break; // "BlueValues"
+ case 7: mpCffLocal->maOtherBlues.push_back( nVal); break; // "OtherBlues"
+ case 8: mpCffLocal->maFamilyBlues.push_back( nVal); break; // "FamilyBlues"
+ case 9: mpCffLocal->maFamilyOtherBlues.push_back( nVal); break;// "FamilyOtherBlues"
+ case 912: mpCffLocal->maStemSnapH.push_back( nVal); break; // "StemSnapH"
+ case 913: mpCffLocal->maStemSnapV.push_back( nVal); break; // "StemSnapV"
+ default: break; // TODO: handle more delta-array dictops?
+ }
+ }
+ clear();
+ } break;
+ case 's': // stringid (SID)
+ nInt = popInt();
+ switch( nOpId ) {
+ case 2: mnFullNameSID = nInt; break; // "FullName"
+ case 3: mnFamilyNameSID = nInt; break; // "FamilyName"
+ case 938: mnFontNameSID = nInt; break; // "FontName"
+ default: break; // TODO: handle more string dictops?
+ }
+ break;
+ case 'P': // private dict
+ mpCffLocal->mnPrivDictBase = popInt();
+ mpCffLocal->mnPrivDictSize = popInt();
+ break;
+ case 'r': { // ROS operands
+ int nSid1 = popInt();
+ int nSid2 = popInt();
+ (void)nSid1; // TODO: use
+ (void)nSid2; // TODO: use
+ nVal = popVal();
+ mbCIDFont = true;
+ } break;
+ case 't': // CharstringType
+ nInt = popInt();
+ setCharStringType( nInt );
+ break;
+ }
+
+ return;
+ }
+
+ if( (c >= 32) || (c == 28) ) {
+// --mpReadPtr;
+ read2push();
+ } else if( c == 29 ) { // longint
+ ++mpReadPtr; // skip 29
+ int nS32 = mpReadPtr[0] << 24;
+ nS32 += mpReadPtr[1] << 16;
+ nS32 += mpReadPtr[2] << 8;
+ nS32 += mpReadPtr[3] << 0;
+ if( (sizeof(nS32) != 4) && (nS32 & (1<<31)))
+ nS32 |= (~0U) << 31; // assuming 2s complement
+ mpReadPtr += 4;
+ nVal = static_cast<ValType>(nS32);
+ push( nVal );
+ } else if( c == 30) { // real number
+ ++mpReadPtr; // skip 30
+ const RealType fReal = readRealVal();
+ // push value onto stack
+ nVal = fReal;
+ push( nVal);
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::readTypeOp( void)
+{
+ int nVal = 0;
+ const U8 c = *mpReadPtr;
+ if( (c <= 31) && (c != 28) ) {
+ const int nOpId = *(mpReadPtr++);
+ const char* pCmdName;
+ if( nOpId != 12)
+ pCmdName = mpCharStringOps[ nOpId];
+ else {
+ const int nExtId = *(mpReadPtr++);
+ pCmdName = mpCharStringEscs[ nExtId];
+ }
+
+ if( !pCmdName )
+ pCmdName = ".NULL";
+ // handle typeop parameters
+ int nMinStack = -1, nMaxStack = -1;
+ switch( *pCmdName) {
+ default: fprintf( stderr, "unsupported TypeOp.type=\'%c\'\n", *pCmdName); break;
+ case '.': nMinStack = 0; nMaxStack = 999; break;
+ case '0': nMinStack = nMaxStack = 0; break;
+ case '1': nMinStack = nMaxStack = 1; break;
+ case '2': nMinStack = nMaxStack = 2; break;
+ case '4': nMinStack = nMaxStack = 4; break;
+ case '5': nMinStack = nMaxStack = 5; break; // not used for Type2 ops
+ case '6': nMinStack = nMaxStack = 6; break;
+ case '7': nMinStack = nMaxStack = 7; break;
+ case '9': nMinStack = nMaxStack = 9; break;
+ case 'f': nMinStack = nMaxStack = 11; break;
+ case 'F': nMinStack = nMaxStack = 13; break;
+ case 'A': nMinStack = 2; nMaxStack = 999; break;
+ case 'C': nMinStack = 6; nMaxStack = 999; break;
+ case 'E': nMinStack = 1; nMaxStack = 999; break;
+ case 'G': nMinStack = 1; nMaxStack = 999; // global subr
+ nVal = peekInt();
+ // TODO global subr
+ break;
+ case 'L': // local subr
+ nMinStack = 1; nMaxStack = 999;
+ nVal = peekInt();
+ // TODO local subr
+ break;
+ case 'I': // operands for "index"
+#if 0
+ nMinStack = nValStack[ nStackIdx-1];
+ if( nMinStack < 0) nMinStack = 0;
+ nMinStack += 1;
+#else
+ fprintf( stderr, "TODO: Iindex op\n");
+#endif
+ break;
+ case 'R': // operands for "rol"
+#if 0
+ nMinStack = nValStack[ nStackIdx-2];
+#else
+ fprintf( stderr, "TODO: Rrol op\n");
+#endif
+ case 'X': // operands for "return"
+ nMinStack = 0;
+ nMaxStack = /*### (!bInSubrs)? 0 :###*/999;
+ break;
+ case 'H': // "hstemhm"
+ case 'h': // "hstem"
+ addHints( false);
+ nMinStack = nMaxStack = 0;
+ break;
+ case 'V': // "vstemhm"
+ case 'v': // "vstem"
+ addHints( true);
+ nMinStack = nMaxStack = 0;
+ break;
+ case 'K': // "hintmask" or "cntrmask"
+ addHints( true); // implicit vstemhm
+ nMinStack = nMaxStack = 0;
+ break;
+ case 'e': // endchar
+ updateWidth( (size() >= 1) && (size() != 4));
+ nMinStack = nMaxStack = 0;
+ if( size() == 4)
+ fprintf( stderr,"Deprecated SEAC-like endchar is not supported for CFF subsetting!\n"); // TODO: handle deprecated op
+ break;
+ case 'm': // hmoveto or vmoveto
+ updateWidth( size() > 1);
+ nMinStack = 1;
+ nMaxStack = nMinStack;
+ break;
+ case 'M': // rmoveto
+ updateWidth( size() > 2);
+ nMinStack = 2;
+ nMaxStack = nMinStack;
+ break;
+ }
+
+ clear();
+ return;
+ }
+
+ if( (c >= 32) || (c == 28)) {
+// --mpReadPtr;
+ read2push();
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::read2push()
+{
+ ValType aVal = 0;
+
+ const U8*& p = mpReadPtr;
+ const U8 c = *p;
+ if( c == 28 ) {
+ short nS16 = (p[1] << 8) + p[2];
+ if( (sizeof(nS16) != 2) && (nS16 & (1<<15)))
+ nS16 |= (~0U) << 15; // assuming 2s complement
+ aVal = nS16;
+ p += 3;
+ } else if( c <= 246 ) { // -107..+107
+ aVal = static_cast<ValType>(p[0] - 139);
+ p += 1;
+ } else if( c <= 250 ) { // +108..+1131
+ aVal = static_cast<ValType>(((p[0] << 8) + p[1]) - 63124);
+ p += 2;
+ } else if( c <= 254 ) { // -108..-1131
+ aVal = static_cast<ValType>(64148 - ((p[0] << 8) + p[1]));
+ p += 2;
+ } else /*if( c == 255)*/ { // Fixed16.16
+ int nS32 = (p[1] << 24) + (p[2] << 16) + (p[3] << 8) + p[4];
+ if( (sizeof(nS32) != 2) && (nS32 & (1<<31)))
+ nS32 |= (~0U) << 31; // assuming 2s complement
+ aVal = static_cast<ValType>(nS32 * (1.0 / 0x10000));
+ p += 5;
+ }
+
+ push( aVal);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::writeType1Val( ValType aVal)
+{
+ U8* pOut = mpWritePtr;
+
+ int nInt = static_cast<int>(aVal);
+ static const int nOutCharstrType = 1;
+ if( (nInt != aVal) && (nOutCharstrType == 2)) {
+ // numtype==255 means int32 for Type1, but 16.16 for Type2 charstrings!!!
+ *(pOut++) = 255; // Fixed 16.16
+ *(pOut++) = static_cast<U8>(nInt >> 8);
+ *(pOut++) = static_cast<U8>(nInt);
+ nInt = static_cast<int>(aVal * 0x10000) & 0xFFFF;
+ *(pOut++) = static_cast<U8>(nInt >> 8);
+ *(pOut++) = static_cast<U8>(nInt);
+ } else if( (nInt >= -107) && (nInt <= +107)) {
+ *(pOut++) = static_cast<U8>(nInt + 139); // -107..+107
+ } else if( (nInt >= -1131) && (nInt <= +1131)) {
+ if( nInt >= 0)
+ nInt += 63124; // +108..+1131
+ else
+ nInt = 64148 - nInt; // -108..-1131
+ *(pOut++) = static_cast<U8>(nInt >> 8);
+ *(pOut++) = static_cast<U8>(nInt);
+ } else if( nOutCharstrType == 1) {
+ // numtype==255 means int32 for Type1, but 16.16 for Type2 charstrings!!!
+ *(pOut++) = 255;
+ *(pOut++) = static_cast<U8>(nInt >> 24);
+ *(pOut++) = static_cast<U8>(nInt >> 16);
+ *(pOut++) = static_cast<U8>(nInt >> 8);
+ *(pOut++) = static_cast<U8>(nInt);
+ }
+
+ mpWritePtr = pOut;
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::pop2write( void)
+{
+ const ValType aVal = popVal();
+ writeType1Val( aVal);
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::writeTypeOp( int nTypeOp)
+{
+ *(mpWritePtr++) = static_cast<U8>(nTypeOp);
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::writeTypeEsc( int nTypeEsc)
+{
+ *(mpWritePtr++) = TYPE1OP::T1ESC;
+ *(mpWritePtr++) = static_cast<U8>(nTypeEsc);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::pop2MultiWrite( int nArgsPerTypo, int nTypeOp, int nTypeXor)
+{
+ for( int i = 0; i < mnStackIdx;) {
+ for( int j = 0; j < nArgsPerTypo; ++j) {
+ const ValType aVal = mnValStack[i+j];
+ writeType1Val( aVal);
+ }
+ i += nArgsPerTypo;
+ writeTypeOp( nTypeOp);
+ nTypeOp ^= nTypeXor; // for toggling vlineto/hlineto
+ }
+ clear();
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::popAll2Write( int nTypeOp)
+{
+ // pop in reverse order, then write
+ for( int i = 0; i < mnStackIdx; ++i) {
+ const ValType aVal = mnValStack[i];
+ writeType1Val( aVal);
+ }
+ clear();
+ writeTypeOp( nTypeOp);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::writeCurveTo( int nStackPos,
+ int nIX1, int nIY1, int nIX2, int nIY2, int nIX3, int nIY3)
+{
+ // get the values from the stack
+ const ValType nDX1 = nIX1 ? mnValStack[ nStackPos+nIX1 ] : 0;
+ const ValType nDY1 = nIY1 ? mnValStack[ nStackPos+nIY1 ] : 0;
+ const ValType nDX2 = nIX2 ? mnValStack[ nStackPos+nIX2 ] : 0;
+ const ValType nDY2 = nIY2 ? mnValStack[ nStackPos+nIY2 ] : 0;
+ const ValType nDX3 = nIX3 ? mnValStack[ nStackPos+nIX3 ] : 0;
+ const ValType nDY3 = nIY3 ? mnValStack[ nStackPos+nIY3 ] : 0;
+
+ // emit the curveto operator and operands
+ // TODO: determine the most efficient curveto operator
+ // TODO: depending on type1op or type2op target
+ writeType1Val( nDX1 );
+ writeType1Val( nDY1 );
+ writeType1Val( nDX2 );
+ writeType1Val( nDY2 );
+ writeType1Val( nDX3 );
+ writeType1Val( nDY3 );
+ writeTypeOp( TYPE1OP::RCURVETO );
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::convertOneTypeOp( void)
+{
+ const int nType2Op = *(mpReadPtr++);
+
+ int i, nInt; // prevent WAE for declarations inside switch cases
+ // convert each T2op
+ switch( nType2Op) {
+ case TYPE2OP::T2ESC:
+ convertOneTypeEsc();
+ break;
+ case TYPE2OP::HSTEM:
+ case TYPE2OP::VSTEM:
+ addHints( nType2Op == TYPE2OP::VSTEM );
+#ifndef IGNORE_HINTS
+ for( i = 0; i < mnHintSize; i+=2 ) {
+ writeType1Val( mnHintStack[i]);
+ writeType1Val( mnHintStack[i+1] - mnHintStack[i]);
+ writeTypeOp( nType2Op );
+ }
+#endif // IGNORE_HINTS
+ break;
+ case TYPE2OP::HSTEMHM:
+ case TYPE2OP::VSTEMHM:
+ addHints( nType2Op == TYPE2OP::VSTEMHM);
+ break;
+ case TYPE2OP::CNTRMASK:
+ // TODO: replace cntrmask with vstem3/hstem3
+ addHints( true);
+#ifdef IGNORE_HINTS
+ mpReadPtr += (mnHintSize + 15) / 16;
+ mbIgnoreHints = true;
+#else
+ {
+ U8 nMaskBit = 0;
+ U8 nMaskByte = 0;
+ for( i = 0; i < mnHintSize; i+=2, nMaskBit>>=1) {
+ if( !nMaskBit) {
+ nMaskByte = *(mpReadPtr++);
+ nMaskBit = 0x80;
+ }
+ if( !(nMaskByte & nMaskBit))
+ continue;
+ if( i >= 8*(int)sizeof(mnCntrMask))
+ mbIgnoreHints = true;
+ if( mbIgnoreHints)
+ continue;
+ mnCntrMask |= (1U << i);
+ }
+ }
+#endif
+ break;
+ case TYPE2OP::HINTMASK:
+ addHints( true);
+#ifdef IGNORE_HINTS
+ mpReadPtr += (mnHintSize + 15) / 16;
+#else
+ {
+ long nHintMask = 0;
+ int nCntrBits[2] = {0,0};
+ U8 nMaskBit = 0;
+ U8 nMaskByte = 0;
+ for( i = 0; i < mnHintSize; i+=2, nMaskBit>>=1) {
+ if( !nMaskBit) {
+ nMaskByte = *(mpReadPtr++);
+ nMaskBit = 0x80;
+ }
+ if( !(nMaskByte & nMaskBit))
+ continue;
+ if( i >= 8*(int)sizeof(nHintMask))
+ mbIgnoreHints = true;
+ if( mbIgnoreHints)
+ continue;
+ nHintMask |= (1U << i);
+ nCntrBits[ i < mnHorzHintSize] += (mnCntrMask >> i) & 1;
+ }
+
+ mbIgnoreHints |= (nCntrBits[0] && (nCntrBits[0] != 3));
+ mbIgnoreHints |= (nCntrBits[1] && (nCntrBits[1] != 3));
+ if( mbIgnoreHints)
+ break;
+
+ for( i = 0; i < mnHintSize; i+=2) {
+ if( !(nHintMask & (1U << i)))
+ continue;
+ writeType1Val( mnHintStack[i]);
+ writeType1Val( mnHintStack[i+1] - mnHintStack[i]);
+ const bool bHorz = (i < mnHorzHintSize);
+ if( !nCntrBits[ bHorz])
+ writeTypeOp( bHorz ? TYPE1OP::HSTEM : TYPE1OP::VSTEM);
+ else if( !--nCntrBits[ bHorz])
+ writeTypeEsc( bHorz ? TYPE1OP::HSTEM3 : TYPE1OP::VSTEM3);
+ }
+ }
+#endif
+ break;
+ case TYPE2OP::CALLSUBR:
+ case TYPE2OP::CALLGSUBR:
+ {
+ nInt = popInt();
+ const bool bGlobal = (nType2Op == TYPE2OP::CALLGSUBR);
+ callType2Subr( bGlobal, nInt);
+ }
+ break;
+ case TYPE2OP::RETURN:
+ // TODO: check that we are in a subroutine
+ return;
+ case TYPE2OP::VMOVETO:
+ case TYPE2OP::HMOVETO:
+ if( mbNeedClose)
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+ else
+ updateWidth( size() > 1);
+ mbNeedClose = true;
+ pop2MultiWrite( 1, nType2Op);
+ break;
+ case TYPE2OP::VLINETO:
+ case TYPE2OP::HLINETO:
+ pop2MultiWrite( 1, nType2Op,
+ TYPE1OP::VLINETO ^ TYPE1OP::HLINETO);
+ break;
+ case TYPE2OP::RMOVETO:
+ // TODO: convert rmoveto to vlineto/hlineto if possible
+ if( mbNeedClose)
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+ else
+ updateWidth( size() > 2);
+ mbNeedClose = true;
+ pop2MultiWrite( 2, nType2Op);
+ break;
+ case TYPE2OP::RLINETO:
+ // TODO: convert rlineto to vlineto/hlineto if possible
+ pop2MultiWrite( 2, nType2Op);
+ break;
+ case TYPE2OP::RCURVETO:
+ // TODO: convert rcurveto to vh/hv/hh/vv-curveto if possible
+ pop2MultiWrite( 6, nType2Op);
+ break;
+ case TYPE2OP::RCURVELINE:
+ i = 0;
+ while( (i += 6) <= mnStackIdx)
+ writeCurveTo( i, -6, -5, -4, -3, -2, -1 );
+ i -= 6;
+ while( (i += 2) <= mnStackIdx) {
+ writeType1Val( mnValStack[i-2]);
+ writeType1Val( mnValStack[i-1]);
+ writeTypeOp( TYPE2OP::RLINETO);
+ }
+ clear();
+ break;
+ case TYPE2OP::RLINECURVE:
+ i = 0;
+ while( (i += 2) <= mnStackIdx-6) {
+ writeType1Val( mnValStack[i-2]);
+ writeType1Val( mnValStack[i-1]);
+ writeTypeOp( TYPE2OP::RLINETO);
+ }
+ i -= 2;
+ while( (i += 6) <= mnStackIdx)
+ writeCurveTo( i, -6, -5, -4, -3, -2, -1 );
+ clear();
+ break;
+ case TYPE2OP::VHCURVETO:
+ case TYPE2OP::HVCURVETO:
+ {
+ bool bVert = (nType2Op == TYPE2OP::VHCURVETO);
+ i = 0;
+ nInt = 0;
+ if( mnStackIdx & 1 )
+ nInt = static_cast<int>(mnValStack[ --mnStackIdx ]);
+ while( (i += 4) <= mnStackIdx) {
+ // TODO: use writeCurveTo()
+ if( bVert ) writeType1Val( 0 );
+ writeType1Val( mnValStack[i-4] );
+ if( !bVert ) writeType1Val( 0);
+ writeType1Val( mnValStack[i-3] );
+ writeType1Val( mnValStack[i-2] );
+ if( !bVert ) writeType1Val( static_cast<ValType>((i==mnStackIdx) ? nInt : 0) );
+ writeType1Val( mnValStack[i-1] );
+ if( bVert ) writeType1Val( static_cast<ValType>((i==mnStackIdx) ? nInt : 0) );
+ bVert = !bVert;
+ writeTypeOp( TYPE2OP::RCURVETO);
+ }
+ }
+ clear();
+ break;
+ case TYPE2OP::HHCURVETO:
+ i = (mnStackIdx & 1);
+ while( (i += 4) <= mnStackIdx) {
+ if( i != 5)
+ writeCurveTo( i, -4, 0, -3, -2, -1, 0);
+ else
+ writeCurveTo( i, -4, -5, -3, -2, -1, 0);
+ }
+ clear();
+ break;
+ case TYPE2OP::VVCURVETO:
+ i = (mnStackIdx & 1);
+ while( (i += 4) <= mnStackIdx) {
+ if( i != 5)
+ writeCurveTo( i, 0, -4, -3, -2, 0, -1);
+ else
+ writeCurveTo( i, -5, -4, -3, -2, 0, -1);
+ }
+ clear();
+ break;
+ case TYPE2OP::ENDCHAR:
+ if( mbNeedClose)
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+ else
+ updateWidth( size() >= 1);
+ // mbNeedClose = true;
+ writeTypeOp( TYPE1OP::ENDCHAR);
+ break;
+ default:
+ if( ((nType2Op >= 32) && (nType2Op <= 255)) || (nType2Op == 28)) {
+ --mpReadPtr;
+ read2push();
+ } else {
+ popAll2Write( nType2Op);
+ assert( false); // TODO?
+ }
+ break;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::convertOneTypeEsc( void)
+{
+ const int nType2Esc = *(mpReadPtr++);
+ ValType* pTop = &mnValStack[ mnStackIdx-1];
+ // convert each T2op
+ switch( nType2Esc) {
+ case TYPE2OP::AND:
+ assert( mnStackIdx >= 2 );
+ pTop[0] = static_cast<ValType>(static_cast<int>(pTop[0]) & static_cast<int>(pTop[-1]));
+ --mnStackIdx;
+ break;
+ case TYPE2OP::OR:
+ assert( mnStackIdx >= 2 );
+ pTop[0] = static_cast<ValType>(static_cast<int>(pTop[0]) | static_cast<int>(pTop[-1]));
+ --mnStackIdx;
+ break;
+ case TYPE2OP::NOT:
+ assert( mnStackIdx >= 1 );
+ pTop[0] = (pTop[0] == 0);
+ break;
+ case TYPE2OP::ABS:
+ assert( mnStackIdx >= 1 );
+ if( pTop[0] >= 0)
+ break;
+ // fall through
+ case TYPE2OP::NEG:
+ assert( mnStackIdx >= 1 );
+ pTop[0] = -pTop[0];
+ break;
+ case TYPE2OP::ADD:
+ assert( mnStackIdx >= 2 );
+ pTop[0] += pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::SUB:
+ assert( mnStackIdx >= 2 );
+ pTop[0] -= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::MUL:
+ assert( mnStackIdx >= 2 );
+ if( pTop[-1])
+ pTop[0] *= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::DIV:
+ assert( mnStackIdx >= 2 );
+ if( pTop[-1])
+ pTop[0] /= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::EQ:
+ assert( mnStackIdx >= 2 );
+ pTop[0] = (pTop[0] == pTop[-1]);
+ --mnStackIdx;
+ break;
+ case TYPE2OP::DROP:
+ assert( mnStackIdx >= 1 );
+ --mnStackIdx;
+ break;
+ case TYPE2OP::PUT: {
+ assert( mnStackIdx >= 2 );
+ const int nIdx = static_cast<int>(pTop[0]);
+ assert( nIdx >= 0 );
+ assert( nIdx < NMAXTRANS );
+ mnTransVals[ nIdx] = pTop[-1];
+ mnStackIdx -= 2;
+ break;
+ }
+ case TYPE2OP::GET: {
+ assert( mnStackIdx >= 1 );
+ const int nIdx = static_cast<int>(pTop[0]);
+ assert( nIdx >= 0 );
+ assert( nIdx < NMAXTRANS );
+ pTop[0] = mnTransVals[ nIdx ];
+ break;
+ }
+ case TYPE2OP::IFELSE: {
+ assert( mnStackIdx >= 4 );
+ if( pTop[-1] > pTop[0] )
+ pTop[-3] = pTop[-2];
+ mnStackIdx -= 3;
+ break;
+ }
+ case TYPE2OP::RANDOM:
+ pTop[+1] = 1234; // TODO
+ ++mnStackIdx;
+ break;
+ case TYPE2OP::SQRT:
+ // TODO: implement
+ break;
+ case TYPE2OP::DUP:
+ assert( mnStackIdx >= 1 );
+ pTop[+1] = pTop[0];
+ ++mnStackIdx;
+ break;
+ case TYPE2OP::EXCH: {
+ assert( mnStackIdx >= 2 );
+ const ValType nVal = pTop[0];
+ pTop[0] = pTop[-1];
+ pTop[-1] = nVal;
+ break;
+ }
+ case TYPE2OP::INDEX: {
+ assert( mnStackIdx >= 1 );
+ const int nVal = static_cast<int>(pTop[0]);
+ assert( nVal >= 0 );
+ assert( nVal < mnStackIdx-1 );
+ pTop[0] = pTop[-1-nVal];
+ break;
+ }
+ case TYPE2OP::ROLL: {
+ assert( mnStackIdx >= 1 );
+ const int nNum = static_cast<int>(pTop[0]);
+ assert( nNum >= 0);
+ assert( nNum < mnStackIdx-2 );
+ (void)nNum; // TODO: implement
+ const int nOfs = static_cast<int>(pTop[-1]);
+ mnStackIdx -= 2;
+ (void)nOfs;// TODO: implement
+ break;
+ }
+ case TYPE2OP::HFLEX1: {
+ assert( mnStackIdx == 9 );
+ writeCurveTo( mnStackIdx, -9, -8, -7, -6, -5, -6 );
+ writeCurveTo( mnStackIdx, -4, -6, -3, -2, -1, -8 );
+ mnStackIdx -= 9;
+ }
+ break;
+ case TYPE2OP::HFLEX: {
+ assert( mnStackIdx == 7 );
+ writeCurveTo( mnStackIdx, -7, 0, -6, -5, -4, -5 );
+ writeCurveTo( mnStackIdx, -3, -5, -2, 0, -1, 0 );
+ mnStackIdx -= 7;
+ }
+ break;
+ case TYPE2OP::FLEX: {
+ assert( mnStackIdx == 13 );
+ writeCurveTo( mnStackIdx, -13, -12, -11, -10, -9, -8 );
+ writeCurveTo( mnStackIdx, -7, -6, -5, -4, -3, -2 );
+ const ValType nFlexDepth = mnValStack[ mnStackIdx-1 ];
+ (void)nFlexDepth; // ignoring nFlexDepth
+ mnStackIdx -= 13;
+ }
+ break;
+ case TYPE2OP::FLEX1: {
+ assert( mnStackIdx == 11 );
+ // write the first part of the flex1-hinted curve
+ writeCurveTo( mnStackIdx, -11, -10, -9, -8, -7, -6 );
+
+ // determine if nD6 is horizontal or vertical
+ const int i = mnStackIdx;
+ ValType nDeltaX = mnValStack[i-11] + mnValStack[i-9] + mnValStack[i-7] + mnValStack[i-5] + mnValStack[i-3];
+ if( nDeltaX < 0 ) nDeltaX = -nDeltaX;
+ ValType nDeltaY = mnValStack[i-10] + mnValStack[i-8] + mnValStack[i-6] + mnValStack[i-4] + mnValStack[i-2];
+ if( nDeltaY < 0 ) nDeltaY = -nDeltaY;
+ const bool bVertD6 = (nDeltaY > nDeltaX);
+
+ // write the second part of the flex1-hinted curve
+ if( !bVertD6 )
+ writeCurveTo( mnStackIdx, -5, -4, -3, -2, -1, 0);
+ else
+ writeCurveTo( mnStackIdx, -5, -4, -3, -2, 0, -1);
+ mnStackIdx -= 11;
+ }
+ break;
+ default:
+ fprintf( stderr,"unhandled type2esc %d\n", nType2Esc);
+ assert( false);
+ break;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::callType2Subr( bool bGlobal, int nSubrNumber)
+{
+ const U8* const pOldReadPtr = mpReadPtr;
+ const U8* const pOldReadEnd = mpReadEnd;
+
+ int nLen = 0;
+ if( bGlobal ) {
+ nSubrNumber += mnGlobalSubrBias;
+ nLen = seekIndexData( mnGlobalSubrBase, nSubrNumber);
+ } else {
+ nSubrNumber += mpCffLocal->mnLocalSubrBias;
+ nLen = seekIndexData( mpCffLocal->mnLocalSubrBase, nSubrNumber);
+ }
+
+ while( mpReadPtr < mpReadEnd)
+ convertOneTypeOp();
+
+ mpReadPtr = pOldReadPtr;
+ mpReadEnd = pOldReadEnd;
+}
+
+// --------------------------------------------------------------------
+
+static const int MAX_T1OPS_SIZE = 81920; // TODO: use dynamic value
+
+int CffSubsetterContext::convert2Type1Ops( CffLocal* pCffLocal, const U8* const pT2Ops, int nT2Len, U8* const pT1Ops)
+{
+ mpCffLocal = pCffLocal;
+
+ // prepare the charstring conversion
+ mpWritePtr = pT1Ops;
+#if 1 // TODO: update caller
+ U8 aType1Ops[ MAX_T1OPS_SIZE];
+ if( !pT1Ops)
+ mpWritePtr = aType1Ops;
+ *const_cast<U8**>(&pT1Ops) = mpWritePtr;
+#else
+ assert( pT1Ops);
+#endif
+
+ // prepend random seed for T1crypt
+ *(mpWritePtr++) = 0x48;
+ *(mpWritePtr++) = 0x44;
+ *(mpWritePtr++) = 0x55;
+ *(mpWritePtr++) = ' ';
+#if 1 // convert the Type2 charstring to Type1
+ mpReadPtr = pT2Ops;
+ mpReadEnd = pT2Ops + nT2Len;
+ // prepend "hsbw" or "sbw"
+ // TODO: only emit hsbw when charwidth is known
+ // TODO: remove charwidth from T2 stack
+ writeType1Val( 0); // TODO: aSubsetterContext.getLeftSideBearing();
+ writeType1Val( 1000/*###getCharWidth()###*/);
+ writeTypeOp( TYPE1OP::HSBW);
+mbSawError = false;
+mbNeedClose = false;
+mbIgnoreHints = false;
+mnHintSize=mnHorzHintSize=mnStackIdx=0; mnCharWidth=-1;//#######
+mnCntrMask = 0;
+ while( mpReadPtr < mpReadEnd)
+ convertOneTypeOp();
+// if( bActivePath)
+// writeTypeOp( TYPE1OP::CLOSEPATH);
+// if( bSubRoutine)
+// writeTypeOp( TYPE1OP::RETURN);
+if( mbSawError) {
+ mpWritePtr = pT1Ops+4;
+ // create an "idiotproof" charstring
+ writeType1Val( 0);
+ writeType1Val( 800);
+ writeTypeOp( TYPE1OP::HSBW);
+ writeType1Val( 50);
+ writeTypeOp( TYPE1OP::HMOVETO);
+ writeType1Val( 650);
+ writeType1Val( 100);
+ writeTypeOp( TYPE1OP::RLINETO);
+ writeType1Val( -350);
+ writeType1Val( 700);
+ writeTypeOp( TYPE1OP::RLINETO);
+#if 0
+ writeType1Val( -300);
+ writeType1Val( -800);
+ writeTypeOp( TYPE1OP::RLINETO);
+#else
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+#endif
+ writeTypeOp( TYPE1OP::ENDCHAR);
+}
+#else // useful for manually encoding charstrings
+ mpWritePtr = pT1Ops;
+ mpWritePtr += sprintf( (char*)mpWritePtr, "OOo_\x8b\x8c\x0c\x10\x0b");
+#endif
+ const int nType1Len = mpWritePtr - pT1Ops;
+
+ // encrypt the Type1 charstring
+ int nRDCryptR = 4330; // TODO: mnRDCryptSeed;
+ for( U8* p = pT1Ops; p < mpWritePtr; ++p) {
+ *p ^= (nRDCryptR >> 8);
+ nRDCryptR = (*(U8*)p + nRDCryptR) * 52845 + 22719;
+ }
+
+ return nType1Len;
+}
+
+// --------------------------------------------------------------------
+
+RealType CffSubsetterContext::readRealVal()
+{
+ // TODO: more thorough number validity test
+ bool bComma = false;
+ int nExpVal = 0;
+ int nExpSign = 0;
+ S64 nNumber = 0;
+ RealType fReal = +1.0;
+ for(;;){
+ const U8 c = *(mpReadPtr++); // read nibbles
+ // parse high nibble
+ const U8 nH = c >> 4U;
+ if( nH <= 9) {
+ nNumber = nNumber * 10 + nH;
+ --nExpVal;
+ } else if( nH == 10) { // comma
+ nExpVal = 0;
+ bComma = true;
+ } else if( nH == 11) { // +exp
+ fReal *= nNumber;
+ nExpSign = +1;
+ nNumber = 0;
+ } else if( nH == 12) { // -exp
+ fReal *= nNumber;
+ nExpSign = -1;
+ nNumber = 0;
+ } else if( nH == 13) { // reserved
+ // TODO: ignore or error?
+ } else if( nH == 14) // minus
+ fReal = -fReal;
+ else if( nH == 15) // end
+ break;
+ // parse low nibble
+ const U8 nL = c & 0x0F;
+ if( nL <= 9) {
+ nNumber = nNumber * 10 + nL;
+ --nExpVal;
+ } else if( nL == 10) { // comma
+ nExpVal = 0;
+ bComma = true;
+ } else if( nL == 11) { // +exp
+ fReal *= nNumber;
+ nNumber = 0;
+ nExpSign = +1;
+ } else if( nL == 12) { // -exp
+ fReal *= nNumber;
+ nNumber = 0;
+ nExpSign = -1;
+ } else if( nL == 13) { // reserved
+ // TODO: ignore or error?
+ } else if( nL == 14) // minus
+ fReal = -fReal;
+ else if( nL == 15) // end
+ break;
+ }
+
+ // merge exponents
+ if( !bComma)
+ nExpVal = 0;
+ if( !nExpSign) { fReal *= nNumber;}
+ else if( nExpSign > 0) { nExpVal += static_cast<int>(nNumber);}
+ else if( nExpSign < 0) { nExpVal -= static_cast<int>(nNumber);}
+
+ // apply exponents
+ if( !nExpVal) { /*nothing to apply*/}
+ else if( nExpVal > 0) { while( --nExpVal >= 0) fReal *= 10.0;}
+ else if( nExpVal < 0) { while( ++nExpVal <= 0) fReal /= 10.0;}
+ return fReal;
+}
+
+// --------------------------------------------------------------------
+
+// prepare to access an element inside a CFF/CID index table
+int CffSubsetterContext::seekIndexData( int nIndexBase, int nDataIndex)
+{
+ assert( (nIndexBase > 0) && (mpBasePtr + nIndexBase + 3 <= mpBaseEnd));
+ if( nDataIndex < 0)
+ return -1;
+ mpReadPtr = mpBasePtr + nIndexBase;
+ const int nDataCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ if( nDataIndex >= nDataCount)
+ return -1;
+ const int nDataOfsSz = mpReadPtr[2];
+ mpReadPtr += 3 + (nDataOfsSz * nDataIndex);
+ int nOfs1 = 0;
+ switch( nDataOfsSz) {
+ default: fprintf( stderr, "\tINVALID nDataOfsSz=%d\n\n", nDataOfsSz); return -1;
+ case 1: nOfs1 = mpReadPtr[0]; break;
+ case 2: nOfs1 = (mpReadPtr[0]<<8) + mpReadPtr[1]; break;
+ case 3: nOfs1 = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2]; break;
+ case 4: nOfs1 = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break;
+ }
+ mpReadPtr += nDataOfsSz;
+
+ int nOfs2 = 0;
+ switch( nDataOfsSz) {
+ case 1: nOfs2 = mpReadPtr[0]; break;
+ case 2: nOfs2 = (mpReadPtr[0]<<8) + mpReadPtr[1]; break;
+ case 3: nOfs2 = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2]; break;
+ case 4: nOfs2 = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break;
+ }
+
+ mpReadPtr = mpBasePtr + (nIndexBase + 2) + nDataOfsSz * (nDataCount + 1) + nOfs1;
+ mpReadEnd = mpReadPtr + (nOfs2 - nOfs1);
+ assert( nOfs1 >= 0);
+ assert( nOfs2 >= nOfs1);
+ assert( mpReadPtr <= mpBaseEnd);
+ assert( mpReadEnd <= mpBaseEnd);
+ return (nOfs2 - nOfs1);
+}
+
+// --------------------------------------------------------------------
+
+// skip over a CFF/CID index table
+void CffSubsetterContext::seekIndexEnd( int nIndexBase)
+{
+ assert( (nIndexBase > 0) && (mpBasePtr + nIndexBase + 3 <= mpBaseEnd));
+ mpReadPtr = mpBasePtr + nIndexBase;
+ const int nDataCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ const int nDataOfsSz = mpReadPtr[2];
+ mpReadPtr += 3 + nDataOfsSz * nDataCount;
+ assert( mpReadPtr <= mpBaseEnd);
+ int nEndOfs = 0;
+ switch( nDataOfsSz) {
+ default: fprintf( stderr, "\tINVALID nDataOfsSz=%d\n\n", nDataOfsSz); return;
+ case 1: nEndOfs = mpReadPtr[0]; break;
+ case 2: nEndOfs = (mpReadPtr[0]<<8) + mpReadPtr[1]; break;
+ case 3: nEndOfs = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2];break;
+ case 4: nEndOfs = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break;
+ }
+ mpReadPtr += nDataOfsSz;
+ mpReadPtr += nEndOfs - 1;
+ mpReadEnd = mpBaseEnd;
+ assert( nEndOfs >= 0);
+ assert( mpReadEnd <= mpBaseEnd);
+}
+
+// ====================================================================
+
+// initialize FONTDICT specific values
+CffLocal::CffLocal( void)
+: mnPrivDictBase( 0)
+, mnPrivDictSize( 0)
+, mnLocalSubrOffs( 0)
+, mnLocalSubrBase( 0)
+, mnLocalSubrCount( 0)
+, mnLocalSubrBias( 0)
+, mnNominalWidth( 0)
+, mnDefaultWidth( 0)
+, mnStemStdHW( 0)
+, mnStemStdVW( 0)
+, mfBlueScale( 0.0)
+, mfBlueShift( 0.0)
+, mfBlueFuzz( 0.0)
+, mfExpFactor( 0.0)
+, mnLangGroup( 0)
+, mbForceBold( false)
+{
+ maStemSnapH.clear();
+ maStemSnapV.clear();
+ maBlueValues.clear();
+ maOtherBlues.clear();
+ maFamilyBlues.clear();
+ maFamilyOtherBlues.clear();
+}
+
+// --------------------------------------------------------------------
+
+CffGlobal::CffGlobal( void)
+: mnNameIdxBase( 0)
+, mnNameIdxCount( 0)
+, mnStringIdxBase( 0)
+, mnStringIdxCount( 0)
+, mbCIDFont( false)
+, mnCharStrBase( 0)
+, mnCharStrCount( 0)
+, mnEncodingBase( 0)
+, mnCharsetBase( 0)
+, mnGlobalSubrBase( 0)
+, mnGlobalSubrCount( 0)
+, mnGlobalSubrBias( 0)
+, mnFDSelectBase( 0)
+, mnFontDictBase( 0)
+, mnFDAryCount( 1)
+, mnFontNameSID( 0)
+, mnFullNameSID( 0)
+, mnFamilyNameSID( 0)
+{
+ maFontBBox.clear();
+ // TODO; maFontMatrix.clear();
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::initialCffRead( void)
+{
+ // get the CFFHeader
+ mpReadPtr = mpBasePtr;
+ const U8 nVerMajor = *(mpReadPtr++);
+ const U8 nVerMinor = *(mpReadPtr++);
+ const U8 nHeaderSize = *(mpReadPtr++);
+ const U8 nOffsetSize = *(mpReadPtr++);
+ // TODO: is the version number useful for anything else?
+ assert( (nVerMajor == 1) && (nVerMinor == 0));
+ (void)(nVerMajor + nVerMinor + nOffsetSize); // avoid compiler warnings
+
+ // prepare access to the NameIndex
+ mnNameIdxBase = nHeaderSize;
+ mpReadPtr = mpBasePtr + nHeaderSize;
+ mnNameIdxCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ seekIndexEnd( mnNameIdxBase);
+
+ // get the TopDict index
+ const long nTopDictBase = getReadOfs();
+ const int nTopDictCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ if( nTopDictCount) {
+ for( int i = 0; i < nTopDictCount; ++i) {
+ seekIndexData( nTopDictBase, i);
+ while( mpReadPtr < mpReadEnd)
+ readDictOp();
+ assert( mpReadPtr == mpReadEnd);
+ }
+ }
+
+ // prepare access to the String index
+ mnStringIdxBase = getReadOfs();
+ mnStringIdxCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ seekIndexEnd( mnStringIdxBase);
+
+ // prepare access to the GlobalSubr index
+ mnGlobalSubrBase = getReadOfs();
+ mnGlobalSubrCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ mnGlobalSubrBias = (mnGlobalSubrCount<1240)?107:(mnGlobalSubrCount<33900)?1131:32768;
+ // skip past the last GlobalSubr entry
+// seekIndexEnd( mnGlobalSubrBase);
+
+ // get/skip the Encodings (we got mnEncodingBase from TOPDICT)
+// seekEncodingsEnd( mnEncodingBase);
+ // get/skip the Charsets (we got mnCharsetBase from TOPDICT)
+// seekCharsetsEnd( mnCharStrBase);
+ // get/skip FDSelect (CID only) data
+
+ // prepare access to the CharStrings index (we got the base from TOPDICT)
+ mpReadPtr = mpBasePtr + mnCharStrBase;
+ mnCharStrCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+// seekIndexEnd( mnCharStrBase);
+
+ // read the FDArray index (CID only)
+ if( mbCIDFont) {
+// assert( mnFontDictBase == tellRel());
+ mpReadPtr = mpBasePtr + mnFontDictBase;
+ mnFDAryCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ assert( mnFDAryCount < (int)(sizeof(maCffLocal)/sizeof(*maCffLocal)));
+
+ // read FDArray details to get access to the PRIVDICTs
+ for( int i = 0; i < mnFDAryCount; ++i) {
+ mpCffLocal = &maCffLocal[i];
+ seekIndexData( mnFontDictBase, i);
+ while( mpReadPtr < mpReadEnd)
+ readDictOp();
+ assert( mpReadPtr == mpReadEnd);
+ }
+ }
+
+ for( int i = 0; i < mnFDAryCount; ++i) {
+ mpCffLocal = &maCffLocal[i];
+
+ // get the PrivateDict index
+ // (we got mnPrivDictSize and mnPrivDictBase from TOPDICT or FDArray)
+ if( mpCffLocal->mnPrivDictSize != 0) {
+ assert( mpCffLocal->mnPrivDictSize > 0);
+ // get the PrivDict data
+ mpReadPtr = mpBasePtr + mpCffLocal->mnPrivDictBase;
+ mpReadEnd = mpReadPtr + mpCffLocal->mnPrivDictSize;
+ assert( mpReadEnd <= mpBaseEnd);
+ // read PrivDict details
+ while( mpReadPtr < mpReadEnd)
+ readDictOp();
+ }
+
+ // prepare access to the LocalSubrs (we got mnLocalSubrOffs from PRIVDICT)
+ if( mpCffLocal->mnLocalSubrOffs) {
+ // read LocalSubrs summary
+ mpCffLocal->mnLocalSubrBase = mpCffLocal->mnPrivDictBase + mpCffLocal->mnLocalSubrOffs;
+ mpReadPtr = mpBasePtr + mpCffLocal->mnLocalSubrBase;
+ const int nSubrCount = (mpReadPtr[0] << 8) + mpReadPtr[1];
+ mpCffLocal->mnLocalSubrCount = nSubrCount;
+ mpCffLocal->mnLocalSubrBias = (nSubrCount<1240)?107:(nSubrCount<33900)?1131:32768;
+// seekIndexEnd( mpCffLocal->mnLocalSubrBase);
+ }
+ }
+
+ // ignore the Notices info
+}
+
+// --------------------------------------------------------------------
+
+// get a cstring from a StringID
+const char* CffSubsetterContext::getString( int nStringID)
+{
+ // get a standard string if possible
+ const static int nStdStrings = sizeof(pStringIds)/sizeof(*pStringIds);
+ if( (nStringID >= 0) && (nStringID < nStdStrings))
+ return pStringIds[ nStringID];
+
+ // else get the string from the StringIndex table
+ const U8* pReadPtr = mpReadPtr;
+ const U8* pReadEnd = mpReadEnd;
+ nStringID -= nStdStrings;
+ int nLen = seekIndexData( mnStringIdxBase, nStringID);
+ // assert( nLen >= 0);
+ // TODO: just return the undecorated name
+ // TODO: get rid of static char buffer
+ static char aNameBuf[ 2560];
+ if( nLen < 0) {
+ sprintf( aNameBuf, "name[%d].notfound!", nStringID);
+ } else {
+ const int nMaxLen = sizeof(aNameBuf) - 1;
+ if( nLen >= nMaxLen)
+ nLen = nMaxLen;
+ for( int i = 0; i < nLen; ++i)
+ aNameBuf[i] = *(mpReadPtr++);
+ aNameBuf[ nLen] = '\0';
+ }
+ mpReadPtr = pReadPtr;
+ mpReadEnd = pReadEnd;
+ return aNameBuf;
+}
+
+// --------------------------------------------------------------------
+
+// access a CID's FDSelect table
+int CffSubsetterContext::getFDSelect( int nGlyphIndex) const
+{
+ assert( nGlyphIndex >= 0);
+ assert( nGlyphIndex < mnCharStrCount);
+ if( !mbCIDFont)
+ return 0;
+
+ const U8* pReadPtr = mpBasePtr + mnFDSelectBase;
+ const U8 nFDSelFormat = *(pReadPtr++);
+ switch( nFDSelFormat) {
+ case 0: { // FDSELECT format 0
+ pReadPtr += nGlyphIndex;
+ const U8 nFDIdx = *(pReadPtr++);
+ return nFDIdx;
+ } //break;
+ case 3: { // FDSELECT format 3
+ const U16 nRangeCount = (pReadPtr[0]<<8) + pReadPtr[1];
+ assert( nRangeCount > 0);
+ assert( nRangeCount <= mnCharStrCount);
+ U16 nPrev = (pReadPtr[2]<<8) + pReadPtr[3];
+ assert( nPrev == 0);
+ pReadPtr += 4;
+ // TODO? binary search
+ for( int i = 0; i < nRangeCount; ++i) {
+ const U8 nFDIdx = pReadPtr[0];
+ const U16 nNext = (pReadPtr[1]<<8) + pReadPtr[2];
+ assert( nPrev < nNext);
+ if( nGlyphIndex < nNext)
+ return nFDIdx;
+ pReadPtr += 3;
+ nPrev = nNext;
+ }
+ } break;
+ default: // invalid FDselect format
+ fprintf( stderr, "invalid CFF.FdselType=%d\n", nFDSelFormat);
+ break;
+ }
+
+ assert( false);
+ return -1;
+}
+
+// --------------------------------------------------------------------
+
+int CffSubsetterContext::getGlyphSID( int nGlyphIndex) const
+{
+ if( nGlyphIndex == 0)
+ return 0; // ".notdef"
+ assert( nGlyphIndex >= 0);
+ assert( nGlyphIndex < mnCharStrCount);
+ if( (nGlyphIndex < 0) || (nGlyphIndex >= mnCharStrCount))
+ return -1;
+
+ // get the SID/CID from the Charset table
+ const U8* pReadPtr = mpBasePtr + mnCharsetBase;
+ const U8 nCSetFormat = *(pReadPtr++);
+ int nGlyphsToSkip = nGlyphIndex - 1;
+ switch( nCSetFormat) {
+ case 0: // charset format 0
+ pReadPtr += 2 * nGlyphsToSkip;
+ nGlyphsToSkip = 0;
+ break;
+ case 1: // charset format 1
+ while( nGlyphsToSkip >= 0) {
+ const int nLeft = pReadPtr[2];
+ if( nGlyphsToSkip <= nLeft)
+ break;
+ nGlyphsToSkip -= nLeft + 1;
+ pReadPtr += 3;
+ }
+ break;
+ case 2: // charset format 2
+ while( nGlyphsToSkip >= 0) {
+ const int nLeft = (pReadPtr[2]<<8) + pReadPtr[3];
+ if( nGlyphsToSkip <= nLeft)
+ break;
+ nGlyphsToSkip -= nLeft + 1;
+ pReadPtr += 4;
+ }
+ break;
+ default:
+ fprintf( stderr, "ILLEGAL CFF-Charset format %d\n", nCSetFormat);
+ return -2;
+ }
+
+ int nSID = (pReadPtr[0]<<8) + pReadPtr[1];
+ nSID += nGlyphsToSkip;
+ // NOTE: for CID-fonts the resulting SID is interpreted as CID
+ return nSID;
+}
+
+// --------------------------------------------------------------------
+
+// NOTE: the result becomes invalid with the next call to this method
+const char* CffSubsetterContext::getGlyphName( int nGlyphIndex)
+{
+ // the first glyph is always the .notdef glyph
+ const char* pGlyphName = ".notdef";
+ if( nGlyphIndex == 0)
+ return pGlyphName;
+
+ // prepare a result buffer
+ // TODO: get rid of static buffer
+ static char aDefaultGlyphName[64];
+ pGlyphName = aDefaultGlyphName;
+
+ // get the glyph specific name
+ const int nSID = getGlyphSID( nGlyphIndex);
+ if( nSID < 0) // default glyph name
+ sprintf( aDefaultGlyphName, "gly%03d", nGlyphIndex);
+ else if( mbCIDFont) // default glyph name in CIDs
+ sprintf( aDefaultGlyphName, "cid%03d", nSID);
+ else { // glyph name from string table
+ const char* pSidName = getString( nSID);
+ // check validity of glyph name
+ if( pSidName) {
+ const char* p = pSidName;
+ while( (*p >= '0') && (*p <= 'z')) ++p;
+ if( (p >= pSidName+1) && (*p == '\0'))
+ pGlyphName = pSidName;
+ }
+ // if needed invent a fallback name
+ if( pGlyphName != pSidName)
+ sprintf( aDefaultGlyphName, "bad%03d", nSID);
+ }
+
+ return pGlyphName;
+}
+
+// --------------------------------------------------------------------
+
+class Type1Emitter
+{
+public:
+ explicit Type1Emitter( const char* pOutFileName, bool bPfbSubset = true);
+ explicit Type1Emitter( FILE* pOutFile, bool bPfbSubset = true);
+ /*virtual*/ ~Type1Emitter( void);
+ void setSubsetName( const char* );
+
+ void emitRawData( const char* pData, int nLength) const;
+ void emitAllRaw( void);
+ void emitAllHex( void);
+ void emitAllCrypted( void);
+ int tellPos( void) const;
+ void updateLen( int nTellPos, int nLength);
+ void emitValVector( const char* pLineHead, const char* pLineTail, const ValVector&);
+private:
+ FILE* mpFileOut;
+ bool mbCloseOutfile;
+ char maBuffer[MAX_T1OPS_SIZE]; // TODO: dynamic allocation
+ int mnEECryptR;
+public:
+ char* mpPtr;
+
+ char maSubsetName[256];
+ bool mbPfbSubset;
+ int mnHexLineCol;
+};
+
+// --------------------------------------------------------------------
+
+Type1Emitter::Type1Emitter( const char* pPfbFileName, bool bPfbSubset)
+: mpFileOut( NULL)
+, mbCloseOutfile( true)
+, mnEECryptR( 55665) // default eexec seed, TODO: mnEECryptSeed
+, mpPtr( maBuffer)
+, mbPfbSubset( bPfbSubset)
+, mnHexLineCol( 0)
+{
+ mpFileOut = fopen( pPfbFileName, "wb");
+ maSubsetName[0] = '\0';
+}
+
+// --------------------------------------------------------------------
+
+Type1Emitter::Type1Emitter( FILE* pOutFile, bool bPfbSubset)
+: mpFileOut( pOutFile)
+, mbCloseOutfile( false)
+, mnEECryptR( 55665) // default eexec seed, TODO: mnEECryptSeed
+, mpPtr( maBuffer)
+, mbPfbSubset( bPfbSubset)
+, mnHexLineCol( 0)
+{
+ maSubsetName[0] = '\0';
+}
+
+// --------------------------------------------------------------------
+
+Type1Emitter::~Type1Emitter( void)
+{
+ if( !mpFileOut)
+ return;
+ if( mbCloseOutfile )
+ fclose( mpFileOut);
+ mpFileOut = NULL;
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::setSubsetName( const char* pSubsetName)
+{
+ maSubsetName[0] = '\0';
+ if( pSubsetName)
+ strncpy( maSubsetName, pSubsetName, sizeof(maSubsetName));
+ maSubsetName[sizeof(maSubsetName)-1] = '\0';
+}
+
+// --------------------------------------------------------------------
+
+int Type1Emitter::tellPos( void) const
+{
+ int nTellPos = ftell( mpFileOut);
+ return nTellPos;
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::updateLen( int nTellPos, int nLength)
+{
+ // update PFB segment header length
+ U8 cData[4];
+ cData[0] = static_cast<U8>(nLength >> 0);
+ cData[1] = static_cast<U8>(nLength >> 8);
+ cData[2] = static_cast<U8>(nLength >> 16);
+ cData[3] = static_cast<U8>(nLength >> 24);
+ const int nCurrPos = ftell( mpFileOut);
+ fseek( mpFileOut, nTellPos, SEEK_SET);
+ fwrite( cData, 1, sizeof(cData), mpFileOut);
+ fseek( mpFileOut, nCurrPos, SEEK_SET);
+}
+
+// --------------------------------------------------------------------
+
+inline void Type1Emitter::emitRawData( const char* pData, int nLength) const
+{
+ fwrite( pData, 1, nLength, mpFileOut);
+}
+
+// --------------------------------------------------------------------
+
+inline void Type1Emitter::emitAllRaw( void)
+{
+ // writeout raw data
+ assert( (mpPtr - maBuffer) < (int)sizeof(maBuffer));
+ emitRawData( maBuffer, mpPtr - maBuffer);
+ // reset the raw buffer
+ mpPtr = maBuffer;
+}
+
+// --------------------------------------------------------------------
+
+inline void Type1Emitter::emitAllHex( void)
+{
+ assert( (mpPtr - maBuffer) < (int)sizeof(maBuffer));
+ for( const char* p = maBuffer; p < mpPtr;) {
+ // convert binary chunk to hex
+ char aHexBuf[0x4000];
+ char* pOut = aHexBuf;
+ while( (p < mpPtr) && (pOut < aHexBuf+sizeof(aHexBuf)-4)) {
+ // convert each byte to hex
+ char cNibble = (*p >> 4) & 0x0F;
+ cNibble += (cNibble < 10) ? '0' : 'A'-10;
+ *(pOut++) = cNibble;
+ cNibble = *(p++) & 0x0F;
+ cNibble += (cNibble < 10) ? '0' : 'A'-10;
+ *(pOut++) = cNibble;
+ // limit the line length
+ if( (++mnHexLineCol & 0x3F) == 0)
+ *(pOut++) = '\n';
+ }
+ // writeout hex-converted chunk
+ emitRawData( aHexBuf, pOut-aHexBuf);
+ }
+ // reset the raw buffer
+ mpPtr = maBuffer;
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::emitAllCrypted( void)
+{
+ // apply t1crypt
+ for( char* p = maBuffer; p < mpPtr; ++p) {
+ *p ^= (mnEECryptR >> 8);
+ mnEECryptR = (*(U8*)p + mnEECryptR) * 52845 + 22719;
+ }
+
+ // emit the t1crypt result
+ if( mbPfbSubset)
+ emitAllRaw();
+ else
+ emitAllHex();
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::emitValVector( const char* pLineHead, const char* pLineTail,
+ const ValVector& rVector)
+{
+ // ignore empty vectors
+ if( rVector.empty())
+ return;
+
+ // emit the line head
+ mpPtr += sprintf( mpPtr, pLineHead);
+ // emit the vector values
+ ValVector::value_type aVal = 0;
+ for( ValVector::const_iterator it = rVector.begin();;) {
+ aVal = *it;
+ if( ++it == rVector.end() )
+ break;
+ mpPtr += sprintf( mpPtr, "%g ", aVal);
+ }
+ // emit the last value
+ mpPtr += sprintf( mpPtr, "%g", aVal);
+ // emit the line tail
+ mpPtr += sprintf( mpPtr, pLineTail);
+}
+
+// --------------------------------------------------------------------
+
+bool CffSubsetterContext::emitAsType1( Type1Emitter& rEmitter,
+ const long* pReqGlyphIDs, const U8* pReqEncoding,
+ GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rFSInfo)
+{
+ // prepare some fontdirectory details
+ static const int nUniqueIdBase = 4100000; // using private-interchange UniqueIds
+ static int nUniqueId = nUniqueIdBase;
+ ++nUniqueId;
+
+ char* pFontName = rEmitter.maSubsetName;
+ if( !*pFontName ) {
+ if( mnFontNameSID) {
+ // get the fontname directly if available
+ strncpy( pFontName, getString( mnFontNameSID), sizeof(rEmitter.maSubsetName));
+ } else if( mnFullNameSID) {
+ // approximate fontname as fullname-whitespace
+ const char* pI = getString( mnFullNameSID);
+ char* pO = pFontName;
+ const char* pLimit = pFontName + sizeof(rEmitter.maSubsetName) - 1;
+ while( pO < pLimit) {
+ const char c = *(pI++);
+ if( c != ' ')
+ *(pO++) = c;
+ if( !c)
+ break;
+ }
+ *pO = '\0';
+ } else {
+ // fallback name of last resort
+ strncpy( pFontName, "DummyName", sizeof(rEmitter.maSubsetName));
+ }
+ }
+ const char* pFullName = pFontName;
+ const char* pFamilyName = pFontName;
+
+ char*& pOut = rEmitter.mpPtr; // convenience reference, TODO: cleanup
+
+ // create a PFB+Type1 header
+ if( rEmitter.mbPfbSubset ) {
+ static const char aPfbHeader[] = "\x80\x01\x00\x00\x00\x00";
+ rEmitter.emitRawData( aPfbHeader, sizeof(aPfbHeader)-1);
+ }
+
+ pOut += sprintf( pOut, "%%!FontType1-1.0: %s 001.003\n", rEmitter.maSubsetName);
+ // emit TOPDICT
+#if 0 // improve PS Type1 caching?
+ nOfs += sprintf( &aT1Str[nOfs],
+ "FontDirectory/%s known{/%s findfont dup/UniqueID known{dup\n"
+ "/UniqueID get %d eq exch/FontType get 1 eq and}{pop false}ifelse\n"
+ "{save true}{false}ifelse}\n{false}ifelse\n",
+ pFamilyName, pFamilyName, nUniqueId);
+#endif
+ pOut += sprintf( pOut,
+ "11 dict begin\n" // TODO: dynamic entry count for TOPDICT
+ "/FontType 1 def\n"
+ "/PaintType 0 def\n");
+ pOut += sprintf( pOut, "/FontName /%s def\n", rEmitter.maSubsetName);
+ pOut += sprintf( pOut, "/UniqueID %d def\n", nUniqueId);
+ // emit FontMatrix
+ if( maFontMatrix.size() == 6)
+ rEmitter.emitValVector( "/FontMatrix [", "]readonly def\n", maFontMatrix);
+ else // emit default FontMatrix if needed
+ pOut += sprintf( pOut, "/FontMatrix [0.001 0 0 0.001 0 0]readonly def\n");
+ // emit FontBBox
+ if( maFontBBox.size() == 4)
+ rEmitter.emitValVector( "/FontBBox {", "}readonly def\n", maFontBBox);
+ else // emit default FontBBox if needed
+ pOut += sprintf( pOut, "/FontBBox {0 0 999 999}readonly def\n");
+ // emit FONTINFO into TOPDICT
+ pOut += sprintf( pOut,
+ "/FontInfo 2 dict dup begin\n" // TODO: check fontinfo entry count
+ " /FullName (%s) readonly def\n"
+ " /FamilyName (%s) readonly def\n"
+ "end readonly def\n",
+ pFullName, pFamilyName);
+#if 0 // TODO: use an standard Type1 encoding if possible
+ pOut += sprintf( pOut,
+ "/Encoding StandardEncoding def\n");
+#else
+ pOut += sprintf( pOut,
+ "/Encoding 256 array\n"
+ "0 1 255 {1 index exch /.notdef put} for\n");
+ for( int i = 1; (i < nGlyphCount) && (i < 256); ++i) {
+ const char* pGlyphName = getGlyphName( pReqGlyphIDs[i]);
+ pOut += sprintf( pOut, "dup %d /%s put\n", pReqEncoding[i], pGlyphName);
+ }
+ pOut += sprintf( pOut, "readonly def\n");
+#endif
+ pOut += sprintf( pOut,
+ // TODO: more topdict entries
+ "currentdict end\n"
+ "currentfile eexec\n");
+
+ // emit PFB header
+ rEmitter.emitAllRaw();
+ if( rEmitter.mbPfbSubset) {
+ // update PFB header segment
+ const int nPfbHeaderLen = rEmitter.tellPos() - 6;
+ rEmitter.updateLen( 2, nPfbHeaderLen);
+
+ // prepare start of eexec segment
+ rEmitter.emitRawData( "\x80\x02\x00\x00\x00\x00", 6); // segment start
+ }
+ const int nEExecSegTell = rEmitter.tellPos();
+
+ // which always starts with a privdict
+ // count the privdict entries
+ int nPrivEntryCount = 9;
+#if !defined(IGNORE_HINTS)
+ // emit blue hints only if non-default values
+ nPrivEntryCount += !mpCffLocal->maOtherBlues.empty();
+ nPrivEntryCount += !mpCffLocal->maFamilyBlues.empty();
+ nPrivEntryCount += !mpCffLocal->maFamilyOtherBlues.empty();
+ nPrivEntryCount += (mpCffLocal->mfBlueScale != 0.0);
+ nPrivEntryCount += (mpCffLocal->mfBlueShift != 0.0);
+ nPrivEntryCount += (mpCffLocal->mfBlueFuzz != 0.0);
+ // emit stem hints only if non-default values
+ nPrivEntryCount += (mpCffLocal->mnStemStdHW != 0);
+ nPrivEntryCount += (mpCffLocal->mnStemStdVW != 0);
+ nPrivEntryCount += !mpCffLocal->maStemSnapH.empty();
+ nPrivEntryCount += !mpCffLocal->maStemSnapV.empty();
+ // emit other hints only if non-default values
+ nPrivEntryCount += (mpCffLocal->mfExpFactor != 0.0);
+ nPrivEntryCount += (mpCffLocal->mnLangGroup != 0);
+ nPrivEntryCount += (mpCffLocal->mnLangGroup == 1);
+ nPrivEntryCount += (mpCffLocal->mbForceBold != false);
+#endif // IGNORE_HINTS
+ // emit the privdict header
+ pOut += sprintf( pOut,
+ "\110\104\125 "
+ "dup\n/Private %d dict dup begin\n"
+ "/RD{string currentfile exch readstring pop}executeonly def\n"
+ "/ND{noaccess def}executeonly def\n"
+ "/NP{noaccess put}executeonly def\n"
+ "/MinFeature{16 16}ND\n"
+ "/password 5839 def\n", // TODO: mnRDCryptSeed?
+ nPrivEntryCount);
+
+#if defined(IGNORE_HINTS)
+ pOut += sprintf( pOut, "/BlueValues []ND\n"); // BlueValues are mandatory
+#else
+ // emit blue hint related privdict entries
+ if( !mpCffLocal->maBlueValues.empty())
+ rEmitter.emitValVector( "/BlueValues [", "]ND\n", mpCffLocal->maBlueValues);
+ else
+ pOut += sprintf( pOut, "/BlueValues []ND\n"); // default to empty BlueValues
+ rEmitter.emitValVector( "/OtherBlues [", "]ND\n", mpCffLocal->maOtherBlues);
+ rEmitter.emitValVector( "/FamilyBlues [", "]ND\n", mpCffLocal->maFamilyBlues);
+ rEmitter.emitValVector( "/FamilyOtherBlues [", "]ND\n", mpCffLocal->maFamilyOtherBlues);
+
+ if( mpCffLocal->mfBlueScale)
+ pOut += sprintf( pOut, "/BlueScale %.6f def\n", mpCffLocal->mfBlueScale);
+ if( mpCffLocal->mfBlueShift) // default BlueShift==7
+ pOut += sprintf( pOut, "/BlueShift %.1f def\n", mpCffLocal->mfBlueShift);
+ if( mpCffLocal->mfBlueFuzz) // default BlueFuzz==1
+ pOut += sprintf( pOut, "/BlueFuzz %.1f def\n", mpCffLocal->mfBlueFuzz);
+
+ // emit stem hint related privdict entries
+ if( mpCffLocal->mnStemStdHW)
+ pOut += sprintf( pOut, "/StdHW [%d] def\n", mpCffLocal->mnStemStdHW);
+ if( mpCffLocal->mnStemStdVW)
+ pOut += sprintf( pOut, "/StdVW [%d] def\n", mpCffLocal->mnStemStdVW);
+ rEmitter.emitValVector( "/StemSnapH [", "]ND\n", mpCffLocal->maStemSnapH);
+ rEmitter.emitValVector( "/StemSnapV [", "]ND\n", mpCffLocal->maStemSnapV);
+
+ // emit other hints
+ if( mpCffLocal->mbForceBold)
+ pOut += sprintf( pOut, "/ForceBold true def\n");
+ if( mpCffLocal->mnLangGroup != 0)
+ pOut += sprintf( pOut, "/LanguageGroup %d def\n", mpCffLocal->mnLangGroup);
+ if( mpCffLocal->mnLangGroup == 1) // compatibility with ancient printers
+ pOut += sprintf( pOut, "/RndStemUp false def\n");
+ if( mpCffLocal->mfExpFactor)
+ pOut += sprintf( pOut, "/ExpansionFactor %.2f def\n", mpCffLocal->mfExpFactor);
+#endif // IGNORE_HINTS
+
+ // emit remaining privdict entries
+ pOut += sprintf( pOut, "/UniqueID %d def\n", nUniqueId);
+ // TODO?: more privdict entries?
+
+ static const char aOtherSubrs[] =
+ "/OtherSubrs\n"
+ "% Dummy code for faking flex hints\n"
+ "[ {} {} {} {systemdict /internaldict known not {pop 3}\n"
+ "{1183615869 systemdict /internaldict get exec\n"
+ "dup /startlock known\n"
+ "{/startlock get exec}\n"
+ "{dup /strtlck known\n"
+ "{/strtlck get exec}\n"
+ "{pop 3}\nifelse}\nifelse}\nifelse\n} executeonly\n"
+ "] ND\n";
+ memcpy( pOut, aOtherSubrs, sizeof(aOtherSubrs)-1);
+ pOut += sizeof(aOtherSubrs)-1;
+
+ // emit used GlobalSubr charstrings
+ // these are the just the default subrs
+ static const char aSubrs[] =
+ "/Subrs 5 array\n"
+ "dup 0 15 RD \x5F\x3D\x6B\xAC\x3C\xBD\x74\x3D\x3E\x17\xA0\x86\x58\x08\x85 NP\n"
+ "dup 1 9 RD \x5F\x3D\x6B\xD8\xA6\xB5\x68\xB6\xA2 NP\n"
+ "dup 2 9 RD \x5F\x3D\x6B\xAC\x39\x46\xB9\x43\xF9 NP\n"
+ "dup 3 5 RD \x5F\x3D\x6B\xAC\xB9 NP\n"
+ "dup 4 12 RD \x5F\x3D\x6B\xAC\x3E\x5D\x48\x54\x62\x76\x39\x03 NP\n"
+ "ND\n";
+ memcpy( pOut, aSubrs, sizeof(aSubrs)-1);
+ pOut += sizeof(aSubrs)-1;
+
+ // TODO: emit more GlobalSubr charstrings?
+ // TODO: emit used LocalSubr charstrings?
+
+ // emit the CharStrings for the requested glyphs
+ pOut += sprintf( pOut,
+ "2 index /CharStrings %d dict dup begin\n", nGlyphCount);
+ rEmitter.emitAllCrypted();
+ for( int i = 0; i < nGlyphCount; ++i) {
+ const int nGlyphId = pReqGlyphIDs[i];
+ assert( (nGlyphId >= 0) && (nGlyphId < mnCharStrCount));
+ // get privdict context matching to the glyph
+ const int nFDSelect = getFDSelect( nGlyphId);
+ mpCffLocal = &maCffLocal[ nFDSelect];
+ // convert the Type2op charstring to its Type1op counterpart
+ const int nT2Len = seekIndexData( mnCharStrBase, nGlyphId);
+ assert( nT2Len > 0);
+ U8 aType1Ops[ MAX_T1OPS_SIZE]; // TODO: dynamic allocation
+ const int nT1Len = convert2Type1Ops( mpCffLocal, mpReadPtr, nT2Len, aType1Ops);
+ // get the glyph name
+ const char* pGlyphName = getGlyphName( nGlyphId);
+ // emit the encrypted Type1op charstring
+ pOut += sprintf( pOut, "/%s %d RD ", pGlyphName, nT1Len);
+ memcpy( pOut, aType1Ops, nT1Len);
+ pOut += nT1Len;
+ pOut += sprintf( pOut, " ND\n");
+ rEmitter.emitAllCrypted();
+ // provide individual glyphwidths if requested
+ if( pGlyphWidths )
+ pGlyphWidths[i] = getCharWidth();
+ }
+ pOut += sprintf( pOut, "end end\nreadonly put\nput\n");
+ pOut += sprintf( pOut, "dup/FontName get exch definefont pop\n");
+ pOut += sprintf( pOut, "mark currentfile closefile\n");
+ rEmitter.emitAllCrypted();
+
+ // mark stop of eexec encryption
+ if( rEmitter.mbPfbSubset) {
+ const int nEExecLen = rEmitter.tellPos() - nEExecSegTell;
+ rEmitter.updateLen( nEExecSegTell-4, nEExecLen);
+ }
+
+ // create PFB footer
+ static const char aPfxFooter[] = "\x80\x01\x14\x02\x00\x00\n" // TODO: check segment len
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "cleartomark\n"
+ "\x80\x03";
+ if( rEmitter.mbPfbSubset)
+ rEmitter.emitRawData( aPfxFooter, sizeof(aPfxFooter)-1);
+ else
+ rEmitter.emitRawData( aPfxFooter+6, sizeof(aPfxFooter)-9);
+
+ // provide details to the subset requesters, TODO: move into own method?
+ // note: Top and Bottom are flipped between Type1 and VCL
+ rFSInfo.m_aFontBBox = Rectangle( Point( static_cast<long>(maFontBBox[0]), static_cast<long>(maFontBBox[1]) ),
+ Point( static_cast<long>(maFontBBox[2]), static_cast<long>(maFontBBox[3]) ) );
+ // PDF-Spec says the values below mean the ink bounds!
+ // TODO: use better approximations for these ink bounds
+ rFSInfo.m_nAscent = +rFSInfo.m_aFontBBox.Bottom(); // for capital letters
+ rFSInfo.m_nDescent = -rFSInfo.m_aFontBBox.Top(); // for all letters
+ rFSInfo.m_nCapHeight = rFSInfo.m_nAscent; // for top-flat capital letters
+
+ rFSInfo.m_nFontType = rEmitter.mbPfbSubset ? FontSubsetInfo::TYPE1_PFB : FontSubsetInfo::TYPE1_PFA;
+ rFSInfo.m_aPSName = String( rEmitter.maSubsetName, RTL_TEXTENCODING_UTF8 );
+
+ return true;
+}
+
+// ====================================================================
+
+bool FontSubsetInfo::CreateFontSubsetFromCff( GlyphWidth* pOutGlyphWidths )
+{
+ CffSubsetterContext aCff( mpInFontBytes, mnInByteLength);
+ aCff.initialCffRead();
+
+ // emit Type1 subset from the CFF input
+ // TODO: also support CFF->CFF subsetting (when PDF-export and PS-printing need it)
+ const bool bPfbSubset = (0 != (mnReqFontTypeMask & FontSubsetInfo::TYPE1_PFB));
+ Type1Emitter aType1Emitter( mpOutFile, bPfbSubset);
+ aType1Emitter.setSubsetName( mpReqFontName);
+ bool bRC = aCff.emitAsType1( aType1Emitter,
+ mpReqGlyphIds, mpReqEncodedIds,
+ pOutGlyphWidths, mnReqGlyphCount, *this);
+ return bRC;
+}
+
+// ====================================================================
+
diff --git a/vcl/source/fontsubset/fontsubset.cxx b/vcl/source/fontsubset/fontsubset.cxx
new file mode 100644
index 000000000000..84f548d0a32f
--- /dev/null
+++ b/vcl/source/fontsubset/fontsubset.cxx
@@ -0,0 +1,185 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <vcl/fontsubset.hxx>
+#include <sft.hxx>
+#include <tools/debug.hxx>
+
+// ====================================================================
+
+FontSubsetInfo::FontSubsetInfo()
+: m_nAscent( 0)
+, m_nDescent( 0)
+, m_nCapHeight( 0)
+, m_nFontType( FontSubsetInfo::NO_FONT)
+, mpInFontBytes( NULL)
+, mnInByteLength( 0)
+, meInFontType( FontSubsetInfo::NO_FONT)
+, mpSftTTFont( NULL)
+{}
+
+// --------------------------------------------------------------------
+
+FontSubsetInfo::~FontSubsetInfo()
+{}
+
+// --------------------------------------------------------------------
+
+// prepare subsetting for fonts where the input font file is mapped
+bool FontSubsetInfo::LoadFont(
+ FontSubsetInfo::FontType eInFontType,
+ const unsigned char* pInFontBytes, int nInByteLength)
+{
+ DBG_ASSERT( (mpSftTTFont == NULL), "Subset from SFT and from mapped font-file requested");
+ meInFontType = eInFontType;
+ mpInFontBytes = pInFontBytes;
+ mnInByteLength = nInByteLength;
+ return (mnInByteLength > 0);
+}
+
+// --------------------------------------------------------------------
+
+// prepare subsetting for fonts that are known to the SFT-parser
+bool FontSubsetInfo::LoadFont( vcl::_TrueTypeFont* pSftTTFont )
+{
+ DBG_ASSERT( (mpInFontBytes == NULL), "Subset from SFT and from mapped font-file requested");
+ mpSftTTFont = pSftTTFont;
+ meInFontType = ANY_SFNT;
+ return (mpSftTTFont == NULL);
+}
+
+// --------------------------------------------------------------------
+
+bool FontSubsetInfo::CreateFontSubset(
+ int nReqFontTypeMask,
+ FILE* pOutFile, const char* pReqFontName,
+ const long* pReqGlyphIds, const sal_uInt8* pReqEncodedIds, int nReqGlyphCount,
+ sal_Int32* pOutGlyphWidths)
+{
+ // prepare request details needed by all underlying subsetters
+ mnReqFontTypeMask = nReqFontTypeMask;
+ mpOutFile = pOutFile;
+ mpReqFontName = pReqFontName;
+ mpReqGlyphIds = pReqGlyphIds;
+ mpReqEncodedIds = pReqEncodedIds;
+ mnReqGlyphCount = nReqGlyphCount;
+
+ // TODO: move the glyphid/encid/notdef reshuffling from the callers to here
+
+ // dispatch to underlying subsetters
+ bool bOK = false;
+
+ // TODO: better match available input-type to possible subset-types
+ switch( meInFontType) {
+ case SFNT_TTF:
+ case SFNT_CFF:
+ case ANY_SFNT:
+ bOK = CreateFontSubsetFromSfnt( pOutGlyphWidths);
+ break;
+ case CFF_FONT:
+ bOK = CreateFontSubsetFromCff( pOutGlyphWidths);
+ break;
+ case TYPE1_PFA:
+ case TYPE1_PFB:
+ case ANY_TYPE1:
+ bOK = CreateFontSubsetFromType1( pOutGlyphWidths);
+ break;
+ // fall trough
+ case NO_FONT:
+ // fall trough
+ default:
+ DBG_ERROR( "unhandled type in CreateFontSubset()");
+ break;
+ }
+
+ return bOK;
+}
+
+// --------------------------------------------------------------------
+
+// TODO: move function to sft.cxx to replace dummy implementation
+bool FontSubsetInfo::CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths )
+{
+ // handle SFNT_CFF fonts
+ int nCffLength = 0;
+ const sal_uInt8* pCffBytes = NULL;
+ if( GetSfntTable( mpSftTTFont, O_CFF, &pCffBytes, &nCffLength))
+ {
+ LoadFont( CFF_FONT, pCffBytes, nCffLength);
+ const bool bOK = CreateFontSubsetFromCff( pOutGlyphWidths);
+ return bOK;
+ }
+
+ // handle SFNT_TTF fonts
+ // by forwarding the subset request to AG's sft subsetter
+#if 1 // TODO: remove conversion tp 16bit glyphids when sft-subsetter has been updated
+ sal_uInt16 aShortGlyphIds[256];
+ for( int i = 0; i < mnReqGlyphCount; ++i)
+ aShortGlyphIds[i] = (sal_uInt16)mpReqGlyphIds[i];
+ // remove const_cast when sft-subsetter is const-correct
+ sal_uInt8* pEncArray = const_cast<sal_uInt8*>( mpReqEncodedIds );
+#endif
+ int nSFTErr = vcl::SF_BADARG;
+ if( (mnReqFontTypeMask & TYPE42_FONT) != 0 )
+ {
+ nSFTErr = CreateT42FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName,
+ aShortGlyphIds, pEncArray, mnReqGlyphCount );
+ }
+ else if( (mnReqFontTypeMask & TYPE3_FONT) != 0 )
+ {
+ nSFTErr = CreateT3FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName,
+ aShortGlyphIds, pEncArray, mnReqGlyphCount,
+ 0 /* 0 = horizontal, 1 = vertical */ );
+ }
+ else if( (mnReqFontTypeMask & SFNT_TTF) != 0 )
+ {
+ // TODO: use CreateTTFromTTGlyphs()
+ // TODO: move functionality from callers here
+ }
+
+ return (nSFTErr != vcl::SF_OK);
+}
+
+// --------------------------------------------------------------------
+
+// TODO: replace dummy implementation
+bool FontSubsetInfo::CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths)
+{
+#if 0
+ // TODO: replace dummy implementation when someone needs this
+#else
+ (void)pOutGlyphWidths;
+ fprintf(stderr,"CreateFontSubsetFromType1: replace dummy implementation\n");
+#endif
+ return false;
+}
+
+// ====================================================================
+
diff --git a/vcl/source/fontsubset/makefile.mk b/vcl/source/fontsubset/makefile.mk
index b7d719f3c912..95cc12bccfaa 100644
--- a/vcl/source/fontsubset/makefile.mk
+++ b/vcl/source/fontsubset/makefile.mk
@@ -40,6 +40,8 @@ ENABLE_EXCEPTIONS=true
SLOFILES=\
$(SLO)$/list.obj \
$(SLO)$/sft.obj \
+ $(SLO)$/cff.obj \
+ $(SLO)$/fontsubset.obj \
$(SLO)$/xlat.obj \
$(SLO)$/ttcr.obj \
$(SLO)$/gsub.obj
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 7744b2f9a59c..0accc42af968 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -25,6 +25,9 @@
*
************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
/*
* Sun Font Tools
*
@@ -131,6 +134,7 @@ static const sal_uInt32 TTFontClassTag = 0x74746663; /* 'ttfc' */
static const sal_uInt32 T_true = 0x74727565; /* 'true' */
static const sal_uInt32 T_ttcf = 0x74746366; /* 'ttcf' */
+static const sal_uInt32 T_otto = 0x4f54544f; /* 'OTTO' */
/* standard TrueType table tags */
#define T_maxp 0x6D617870
@@ -150,6 +154,7 @@ static const sal_uInt32 T_ttcf = 0x74746366; /* 'ttcf' */
#define T_prep 0x70726570
#define T_fpgm 0x6670676D
#define T_gsub 0x47535542
+#define T_CFF 0x43464620
#define LAST_URANGE_BIT 69
const char *ulcodes[LAST_URANGE_BIT+2] = {
@@ -416,7 +421,7 @@ _inline const char *UnicodeRangeName(sal_uInt16 bit)
return ulcodes[bit];
}
-_inline sal_uInt8 *getTable(TrueTypeFont *ttf, sal_uInt32 ord)
+_inline const sal_uInt8* getTable( TrueTypeFont *ttf, sal_uInt32 ord)
{
return (sal_uInt8*)ttf->tables[ord];
}
@@ -496,7 +501,7 @@ static void HexFmtBlockWrite(HexFmt *_this, const void *ptr, sal_uInt32 size)
/* fills the aw and lsb entries of the TTGlyphMetrics structure from hmtx table -*/
static void GetMetrics(TrueTypeFont *ttf, sal_uInt32 glyphID, TTGlyphMetrics *metrics)
{
- sal_uInt8 *table = getTable(ttf, O_hmtx);
+ const sal_uInt8* table = getTable( ttf, O_hmtx );
metrics->aw = metrics->lsb = metrics->ah = metrics->tsb = 0;
if (!table || !ttf->numberOfHMetrics) return;
@@ -510,7 +515,8 @@ static void GetMetrics(TrueTypeFont *ttf, sal_uInt32 glyphID, TTGlyphMetrics *me
}
table = getTable(ttf, O_vmtx);
- if (!table || !ttf->numOfLongVerMetrics) return;
+ if( !table || !ttf->numOfLongVerMetrics )
+ return;
if (glyphID < ttf->numOfLongVerMetrics) {
metrics->ah = GetUInt16(table, 4 * glyphID, 1);
@@ -526,19 +532,21 @@ static int GetTTGlyphOutline(TrueTypeFont *, sal_uInt32 , ControlPoint **, TTGly
/* returns the number of control points, allocates the pointArray */
static int GetSimpleTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics) /*FOLD02*/
{
- sal_uInt8 *table = getTable(ttf, O_glyf);
- sal_uInt8 *ptr, *p, flag, n;
- sal_Int16 numberOfContours;
- sal_uInt16 t, instLen, lastPoint=0;
+ const sal_uInt8* table = getTable( ttf, O_glyf );
+ sal_uInt8 flag, n;
+ sal_uInt16 t, lastPoint=0;
int i, j, z;
*pointArray = 0;
/* printf("GetSimpleTTOutline(%d)\n", glyphID); */
- if (glyphID >= ttf->nglyphs) return 0; /*- glyph is not present in the font */
- ptr = table + ttf->goffsets[glyphID];
- if ((numberOfContours = GetInt16(ptr, 0, 1)) <= 0) return 0; /*- glyph is not simple */
+ if( glyphID >= ttf->nglyphs ) /*- glyph is not present in the font */
+ return 0;
+ const sal_uInt8* ptr = table + ttf->goffsets[glyphID];
+ const sal_Int16 numberOfContours = GetInt16(ptr, 0, 1);
+ if( numberOfContours <= 0 ) /*- glyph is not simple */
+ return 0;
if (metrics) { /*- GetCompoundTTOutline() calls this function with NULL metrics -*/
metrics->xMin = GetInt16(ptr, 2, 1);
@@ -554,8 +562,8 @@ static int GetSimpleTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoin
if ((t = GetUInt16(ptr, 10+i*2, 1)) > lastPoint) lastPoint = t;
}
- instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1);
- p = ptr + 10 + 2 * numberOfContours + 2 + instLen;
+ sal_uInt16 instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1);
+ const sal_uInt8* p = ptr + 10 + 2 * numberOfContours + 2 + instLen;
ControlPoint* pa = (ControlPoint*)calloc(lastPoint+1, sizeof(ControlPoint));
i = 0;
@@ -617,8 +625,7 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo
{
sal_uInt16 flags, index;
sal_Int16 e, f, numberOfContours;
- sal_uInt8 *table = getTable(ttf, O_glyf);
- sal_uInt8 *ptr;
+ const sal_uInt8* table = getTable( ttf, O_glyf );
std::vector<ControlPoint> myPoints;
ControlPoint *nextComponent, *pa;
int i, np;
@@ -627,13 +634,12 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo
*pointArray = 0;
/* printf("GetCompoundTTOutline(%d)\n", glyphID); */
- if (glyphID >= ttf->nglyphs) { /*- incorrect glyphID */
+ if (glyphID >= ttf->nglyphs) /*- incorrect glyphID */
return 0;
- }
- ptr = table + ttf->goffsets[glyphID];
- if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) { /*- glyph is not compound */
+
+ const sal_uInt8* ptr = table + ttf->goffsets[glyphID];
+ if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) /*- glyph is not compound */
return 0;
- }
if (metrics) {
metrics->xMin = GetInt16(ptr, 2, 1);
@@ -819,9 +825,8 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo
*/
static int GetTTGlyphOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics, std::vector< sal_uInt32 >* glyphlist)
{
- sal_uInt8 *ptr, *table = getTable(ttf, O_glyf);
+ const sal_uInt8 *table = getTable( ttf, O_glyf );
sal_Int16 numberOfContours;
- int length;
int res;
*pointArray = 0;
@@ -831,8 +836,8 @@ static int GetTTGlyphOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint
if (glyphID >= ttf->nglyphs) return -1; /**/
- ptr = table + ttf->goffsets[glyphID];
- length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID];
+ const sal_uInt8* ptr = table + ttf->goffsets[glyphID];
+ int length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID];
if (length == 0) { /*- empty glyphs still have hmtx and vmtx metrics values */
if (metrics) GetMetrics(ttf, glyphID, metrics);
@@ -1005,15 +1010,15 @@ static int BSplineToPSPath(ControlPoint *srcA, int srcCount, PSPathElement **pat
/*- Extracts a string from the name table and allocates memory for it -*/
-static char *nameExtract(sal_uInt8 *name, int nTableSize, int n, int dbFlag, sal_uInt16** ucs2result )
+static char *nameExtract( const sal_uInt8* name, int nTableSize, int n, int dbFlag, sal_uInt16** ucs2result )
{
int i;
char *res;
- sal_uInt8 *ptr = name + GetUInt16(name, 4, 1) + GetUInt16(name + 6, 12 * n + 10, 1);
+ const sal_uInt8* ptr = name + GetUInt16(name, 4, 1) + GetUInt16(name + 6, 12 * n + 10, 1);
int len = GetUInt16(name+6, 12 * n + 8, 1);
// sanity check
- if( ! len || ptr >= (name+nTableSize-len) )
+ if( (len <= 0) || ((ptr+len) > (name+nTableSize)) )
{
if( ucs2result )
*ucs2result = NULL;
@@ -1043,7 +1048,8 @@ static char *nameExtract(sal_uInt8 *name, int nTableSize, int n, int dbFlag, sal
return res;
}
-static int findname(sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, sal_uInt16 encodingID, sal_uInt16 languageID, sal_uInt16 nameID)
+static int findname( const sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID,
+ sal_uInt16 encodingID, sal_uInt16 languageID, sal_uInt16 nameID )
{
int l = 0, r = n-1, i;
sal_uInt32 t1, t2;
@@ -1085,7 +1091,7 @@ static int findname(sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, sal_uI
static void GetNames(TrueTypeFont *t)
{
- sal_uInt8 *table = getTable(t, O_name);
+ const sal_uInt8* table = getTable( t, O_name );
int nTableSize = getTableSize(t, O_name);
sal_uInt16 n = GetUInt16(table, 2, 1);
@@ -1107,6 +1113,11 @@ static void GetNames(TrueTypeFont *t)
// some symbol fonts like Marlett have a 3,0 name!
t->psname = nameExtract(table, nTableSize, r, 1, NULL);
}
+ // for embedded font in Ghostscript PDFs
+ if ( ! t->psname && (r = findname(table, n, 2, 2, 0, 6)) != -1)
+ {
+ t->psname = nameExtract(table, nTableSize, r, 0, NULL);
+ }
if ( ! t->psname )
{
if ( t->fname )
@@ -1374,7 +1385,7 @@ static sal_uInt32 getGlyph12(const sal_uInt8 *pCmap, sal_uInt32 cChar) {
static void FindCmap(TrueTypeFont *ttf)
{
- sal_uInt8 *table = getTable(ttf, O_cmap);
+ const sal_uInt8* table = getTable(ttf, O_cmap);
sal_uInt32 table_size = getTableSize(ttf, O_cmap);
sal_uInt16 ncmaps = GetUInt16(table, 2, 1);
unsigned int i;
@@ -1468,24 +1479,20 @@ static void FindCmap(TrueTypeFont *ttf)
static void GetKern(TrueTypeFont *ttf)
{
- sal_uInt8 *table = getTable(ttf, O_kern);
- sal_uInt8 *ptr;
- sal_uInt32 i;
- /*
- sal_uInt16 v1;
- sal_uInt32 v2;
- */
+ const sal_uInt8* table = getTable(ttf, O_kern);
+ const sal_uInt8 *ptr;
- if (!table) goto badtable;
+ if( !table )
+ goto badtable;
if (GetUInt16(table, 0, 1) == 0) { /* Traditional Microsoft style table with USHORT version and nTables fields */
ttf->nkern = GetUInt16(table, 2, 1);
- ttf->kerntables = (sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8 *));
+ ttf->kerntables = (const sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8 *));
assert(ttf->kerntables != 0);
memset(ttf->kerntables, 0, ttf->nkern * sizeof(sal_uInt8 *));
ttf->kerntype = KT_MICROSOFT;
ptr = table + 4;
- for (i=0; i < ttf->nkern; i++) {
+ for( unsigned i = 0; i < ttf->nkern; ++i) {
ttf->kerntables[i] = ptr;
ptr += GetUInt16(ptr, 2, 1);
/* sanity check */
@@ -1500,12 +1507,12 @@ static void GetKern(TrueTypeFont *ttf)
if (GetUInt32(table, 0, 1) == 0x00010000) { /* MacOS style kern tables: fixed32 version and sal_uInt32 nTables fields */
ttf->nkern = GetUInt32(table, 4, 1);
- ttf->kerntables = (sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8*));
+ ttf->kerntables = (const sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8*));
assert(ttf->kerntables != 0);
memset(ttf->kerntables, 0, ttf->nkern * sizeof(sal_uInt8 *));
ttf->kerntype = KT_APPLE_NEW;
ptr = table + 8;
- for (i = 0; i < ttf->nkern; i++) {
+ for( unsigned i = 0; i < ttf->nkern; ++i) {
ttf->kerntables[i] = ptr;
ptr += GetUInt32(ptr, 0, 1);
/* sanity check; there are some fonts that are broken in this regard */
@@ -1717,7 +1724,9 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
if ((version == 0x00010000) || (version == T_true)) {
tdoffset = 0;
- } else if (version == T_ttcf) { /*- TrueType collection */
+ } else if (version == T_otto) { /* PS-OpenType font */
+ tdoffset = 0;
+ } else if (version == T_ttcf) { /* TrueType collection */
if (GetUInt32(t->ptr, 4, 1) != 0x00010000) {
CloseTTFont(t);
return SF_TTFORMAT;
@@ -1743,7 +1752,7 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
if( t->ntables >= 128 )
return SF_TTFORMAT;
- t->tables = (sal_uInt8**)calloc(NUM_TAGS, sizeof(sal_uInt8*));
+ t->tables = (const sal_uInt8**)calloc(NUM_TAGS, sizeof(sal_uInt8*));
assert(t->tables != 0);
t->tlens = (sal_uInt32*)calloc(NUM_TAGS, sizeof(sal_uInt32));
assert(t->tlens != 0);
@@ -1773,6 +1782,7 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
case T_prep: nIndex = O_prep; break;
case T_fpgm: nIndex = O_fpgm; break;
case T_gsub: nIndex = O_gsub; break;
+ case T_CFF: nIndex = O_CFF; break;
default: nIndex = -1; break;
}
if( nIndex >= 0 ) {
@@ -1817,11 +1827,12 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
if( (sal_uInt8*)t->tables[i] < t->ptr )
{
- t->tlens[i] = 0;
- t->tables[i] = NULL;
#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "font file %s has bad table offset (tagnum=%d)\n", t->fname, i );
+ if( t->tables[i] )
+ fprintf( stderr, "font file %s has bad table offset %d (tagnum=%d)\n", t->fname, (sal_uInt8*)t->tables[i]-t->ptr, i );
#endif
+ t->tlens[i] = 0;
+ t->tables[i] = NULL;
}
else if( (sal_uInt8*)t->tables[i] + t->tlens[i] > t->ptr + t->fsize )
{
@@ -1839,15 +1850,15 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
and read the basic font properties */
/* The following tables are absolutely required:
- * maxp, head, glyf, loca, name, cmap
+ * maxp, head, name, cmap
*/
- if (!(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_glyf) && getTable(t, O_loca) && getTable(t, O_name) && getTable(t, O_cmap) )) {
+ if( !(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_name) && getTable(t, O_cmap)) ) {
CloseTTFont(t);
return SF_TTFORMAT;
}
- sal_uInt8* table = getTable(t, O_maxp);
+ const sal_uInt8* table = getTable(t, O_maxp);
t->nglyphs = GetUInt16(table, 4, 1);
table = getTable(t, O_head);
@@ -1859,16 +1870,24 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
return SF_TTFORMAT;
}
- k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1;
- if (k < (int)t->nglyphs) t->nglyphs = k; /* Hack for broken Chinese fonts */
-
- table = getTable(t, O_loca);
+ if( getTable(t, O_glyf) && getTable(t, O_loca) ) { /* TTF or TTF-OpenType */
+ k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1;
+ if( k < (int)t->nglyphs ) /* Hack for broken Chinese fonts */
+ t->nglyphs = k;
- t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32));
- assert(t->goffsets != 0);
+ table = getTable(t, O_loca);
+ t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32));
+ assert(t->goffsets != 0);
- for (i = 0; i <= (int)t->nglyphs; i++) {
- t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : (sal_uInt32)GetUInt16(table, i << 1, 1) << 1;
+ for( i = 0; i <= (int)t->nglyphs; ++i )
+ t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : (sal_uInt32)GetUInt16(table, i << 1, 1) << 1;
+ } else if( getTable(t, O_CFF) ) { /* PS-OpenType */
+ t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32));
+ /* TODO: implement to get subsetting */
+ assert(t->goffsets != 0);
+ } else {
+ CloseTTFont(t);
+ return SF_TTFORMAT;
}
table = getTable(t, O_hhea);
@@ -1919,11 +1938,13 @@ int GetTTGlyphPoints(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **point
int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, std::vector< sal_uInt32 >& glyphlist)
{
- sal_uInt8 *ptr, *glyf = getTable(ttf, O_glyf);
int n = 1;
- if (glyphID >= ttf->nglyphs) return 0;
- ptr = glyf + ttf->goffsets[glyphID];
+ if( glyphID >= ttf->nglyphs )
+ return 0;
+
+ const sal_uInt8* glyf = getTable(ttf, O_glyf);
+ const sal_uInt8* ptr = glyf + ttf->goffsets[glyphID];
glyphlist.push_back( glyphID );
@@ -1964,7 +1985,7 @@ int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, /*FO
ControlPoint *pa;
PSPathElement *path;
int i, j, r, n;
- sal_uInt8 *table = getTable(ttf, O_head);
+ const sal_uInt8* table = getTable(ttf, O_head);
TTGlyphMetrics metrics;
int UPEm = ttf->unitsPerEm;
@@ -2123,7 +2144,6 @@ int CreateTTFromTTGlyphs(TrueTypeFont *ttf,
{
TrueTypeCreator *ttcr;
TrueTypeTable *head=0, *hhea=0, *maxp=0, *cvt=0, *prep=0, *glyf=0, *fpgm=0, *cmap=0, *name=0, *post = 0, *os2 = 0;
- sal_uInt8 *p;
int i;
int res;
@@ -2173,7 +2193,7 @@ int CreateTTFromTTGlyphs(TrueTypeFont *ttf,
maxp = TrueTypeTableNew_maxp(getTable(ttf, O_maxp), getTableSize(ttf, O_maxp));
/** hhea **/
- p = getTable(ttf, O_hhea);
+ const sal_uInt8* p = getTable(ttf, O_hhea);
if (p) {
hhea = TrueTypeTableNew_hhea(GetUInt16(p, 4, 1), GetUInt16(p, 6, 1), GetUInt16(p, 8, 1), GetUInt16(p, 18, 1), GetUInt16(p, 20, 1));
} else {
@@ -2356,12 +2376,10 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf,
{
TrueTypeCreator *ttcr;
TrueTypeTable *head=0, *hhea=0, *maxp=0, *cvt=0, *prep=0, *glyf=0, *fpgm=0;
- sal_uInt8 *p;
int i;
int res;
sal_uInt32 ver, rev;
- sal_uInt8 *headP;
sal_uInt8 *sfntP;
sal_uInt32 sfntLen;
@@ -2374,7 +2392,8 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf,
TrueTypeCreatorNewEmpty(T_true, &ttcr);
/* head */
- headP = p = getTable(ttf, O_head);
+ const sal_uInt8* p = getTable(ttf, O_head);
+ const sal_uInt8* headP = p;
assert(p != 0);
head = TrueTypeTableNew_head(GetUInt32(p, 4, 1), GetUInt16(p, 16, 1), GetUInt16(p, 18, 1), p+20, GetUInt16(p, 44, 1), GetUInt16(p, 46, 1), GetInt16(p, 48, 1));
ver = GetUInt32(p, 0, 1);
@@ -2551,13 +2570,21 @@ int GetTTGlyphCount( TrueTypeFont* ttf )
return ttf->nglyphs;
}
+bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex,
+ const sal_uInt8** ppRawBytes, int* pRawLength )
+{
+ if( (nSubtableIndex < 0) || (nSubtableIndex >= NUM_TAGS) )
+ return false;
+ *pRawLength = ttf->tlens[ nSubtableIndex ];
+ *ppRawBytes = ttf->tables[ nSubtableIndex ];
+ bool bOk = (*pRawLength > 0) && (ppRawBytes != NULL);
+ return bOk;
+}
+
TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, int mode)
{
- sal_uInt8* pTable;
- int i;
- sal_uInt16 glyphID;
+ const sal_uInt8* pTable;
sal_uInt32 n;
- int UPEm = ttf->unitsPerEm;
int nTableSize;
if (mode == 0) {
@@ -2576,9 +2603,10 @@ TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *gly
TTSimpleGlyphMetrics* res = (TTSimpleGlyphMetrics*)calloc(nGlyphs, sizeof(TTSimpleGlyphMetrics));
assert(res != 0);
- for (i=0; i<nGlyphs; i++) {
+ const int UPEm = ttf->unitsPerEm;
+ for( int i = 0; i < nGlyphs; ++i) {
int nAdvOffset, nLsbOffset;
- glyphID = glyphArray[i];
+ sal_uInt16 glyphID = glyphArray[i];
if (glyphID < n) {
nAdvOffset = 4 * glyphID;
@@ -2629,7 +2657,6 @@ TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont * ttf, sal_uInt16 firs
void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
{
- sal_uInt8 *table;
int UPEm = ttf->unitsPerEm;
memset(info, 0, sizeof(TTGlobalFontInfo));
@@ -2641,7 +2668,7 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
info->psname = ttf->psname;
info->symbolEncoded = (ttf->cmapType == CMAP_MS_Symbol);
- table = getTable(ttf, O_OS2);
+ const sal_uInt8* table = getTable(ttf, O_OS2);
if (table) {
info->weight = GetUInt16(table, 4, 1);
info->width = GetUInt16(table, 6, 1);
@@ -2670,6 +2697,8 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
}
memcpy(info->panose, table + 32, 10);
info->typeFlags = GetUInt16( table, 8, 1 );
+ if( getTable(ttf, O_CFF) )
+ info->typeFlags |= TYPEFLAG_PS_OPENTYPE;
}
table = getTable(ttf, O_post);
@@ -2718,17 +2747,15 @@ void KernGlyphs(TrueTypeFont *ttf, sal_uInt16 *glyphs, int nglyphs, int wmode, K
GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
{
- sal_uInt8 *glyf = getTable(ttf, O_glyf);
- sal_uInt8 *hmtx = getTable(ttf, O_hmtx);
- sal_uInt32 length;
- ControlPoint *cp;
+ const sal_uInt8* glyf = getTable(ttf, O_glyf);
+ const sal_uInt8* hmtx = getTable(ttf, O_hmtx);
int i, n, m;
if( glyphID >= ttf->nglyphs )
return 0;
/* #127161# check the glyph offsets */
- length = getTableSize( ttf, O_glyf );
+ sal_uInt32 length = getTableSize( ttf, O_glyf );
if( length < ttf->goffsets[ glyphID+1 ] )
return 0;
@@ -2737,7 +2764,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
GlyphData* d = (GlyphData*)malloc(sizeof(GlyphData)); assert(d != 0);
if (length > 0) {
- sal_uInt8 *srcptr = glyf + ttf->goffsets[glyphID];
+ const sal_uInt8* srcptr = glyf + ttf->goffsets[glyphID];
d->ptr = (sal_uInt8*)malloc((length + 1) & ~1); assert(d->ptr != 0);
memcpy( d->ptr, srcptr, length );
d->compflag = (GetInt16( srcptr, 0, 1 ) < 0);
@@ -2750,6 +2777,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
d->nbytes = (sal_uInt16)((length + 1) & ~1);
/* now calculate npoints and ncontours */
+ ControlPoint *cp;
n = GetTTGlyphPoints(ttf, glyphID, &cp);
if (n != -1) {
m = 0;
@@ -2778,18 +2806,16 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr)
{
- sal_uInt8 *table = getTable(ttf, O_name);
+ const sal_uInt8* table = getTable(ttf, O_name);
int nTableSize = getTableSize(ttf, O_name );
sal_uInt16 n = GetUInt16(table, 2, 1);
- sal_uInt8* rec_string = NULL;
int nStrBase = GetUInt16(table, 4, 1);
- NameRecord *rec;
int i;
*nr = 0;
if (n == 0) return 0;
- rec = (NameRecord*)calloc(n, sizeof(NameRecord));
+ NameRecord* rec = (NameRecord*)calloc(n, sizeof(NameRecord));
for (i = 0; i < n; i++) {
int nStrOffset = GetUInt16(table + 6, 10 + 12 * i, 1);
@@ -2805,7 +2831,7 @@ int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr)
continue;
}
- rec_string = table + nStrBase + nStrOffset;
+ const sal_uInt8* rec_string = table + nStrBase + nStrOffset;
// sanity check
if( rec_string > (sal_uInt8*)ttf->ptr && rec_string < ((sal_uInt8*)ttf->ptr + ttf->fsize - rec[i].slen ) )
{
diff --git a/vcl/source/fontsubset/ttcr.cxx b/vcl/source/fontsubset/ttcr.cxx
index 7f9ae796142b..ebd00c1e7c50 100644
--- a/vcl/source/fontsubset/ttcr.cxx
+++ b/vcl/source/fontsubset/ttcr.cxx
@@ -32,10 +32,6 @@
*
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#if OSL_DEBUG_LEVEL == 0
# ifndef NDEBUG
# define NDEBUG
@@ -45,6 +41,7 @@
#include "ttcr.hxx"
#include "list.h"
+#include "string.h"
@@ -96,7 +93,7 @@ _inline sal_uInt32 mkTag(sal_uInt8 a, sal_uInt8 b, sal_uInt8 c, sal_uInt8 d) {
}
/*- Data access macros for data stored in big-endian or little-endian format */
-_inline sal_Int16 GetInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_Int16 GetInt16( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_Int16 t;
assert(ptr != 0);
@@ -110,7 +107,7 @@ _inline sal_Int16 GetInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendia
return t;
}
-_inline sal_uInt16 GetUInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_uInt16 GetUInt16( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_uInt16 t;
assert(ptr != 0);
@@ -124,7 +121,7 @@ _inline sal_uInt16 GetUInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigend
return t;
}
-_inline sal_Int32 GetInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_Int32 GetInt32( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_Int32 t;
assert(ptr != 0);
@@ -140,7 +137,7 @@ _inline sal_Int32 GetInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendi
return t;
}
-_inline sal_uInt32 GetUInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_uInt32 GetUInt32( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_uInt32 t;
assert(ptr != 0);
@@ -968,7 +965,7 @@ static struct {
TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag,
sal_uInt32 nbytes,
- sal_uInt8 *ptr)
+ const sal_uInt8* ptr)
{
TrueTypeTable* table = (TrueTypeTable*)smalloc(sizeof(TrueTypeTable));
tdata_generic* pdata = (tdata_generic*)smalloc(sizeof(tdata_generic));
@@ -991,7 +988,7 @@ TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag,
TrueTypeTable *TrueTypeTableNew_head(sal_uInt32 fontRevision,
sal_uInt16 flags,
sal_uInt16 unitsPerEm,
- sal_uInt8 *created,
+ const sal_uInt8* created,
sal_uInt16 macStyle,
sal_uInt16 lowestRecPPEM,
sal_Int16 fontDirectionHint)
@@ -1064,7 +1061,7 @@ TrueTypeTable *TrueTypeTableNew_loca(void)
return table;
}
-TrueTypeTable *TrueTypeTableNew_maxp(sal_uInt8 *maxp, int size)
+TrueTypeTable *TrueTypeTableNew_maxp( const sal_uInt8* maxp, int size)
{
TrueTypeTable* table = (TrueTypeTable*)smalloc(sizeof(TrueTypeTable));
table->data = ttmalloc(TABLESIZE_maxp);
diff --git a/vcl/source/fontsubset/ttcr.hxx b/vcl/source/fontsubset/ttcr.hxx
index 5b47f09d552a..04c617efc944 100644
--- a/vcl/source/fontsubset/ttcr.hxx
+++ b/vcl/source/fontsubset/ttcr.hxx
@@ -138,7 +138,7 @@ namespace vcl
*/
TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag,
sal_uInt32 nbytes,
- sal_uInt8 *ptr);
+ const sal_uInt8* ptr);
/**
* Creates a new 'head' table for a TrueType font.
@@ -149,7 +149,7 @@ namespace vcl
TrueTypeTable *TrueTypeTableNew_head(sal_uInt32 fontRevision,
sal_uInt16 flags,
sal_uInt16 unitsPerEm,
- sal_uInt8 *created,
+ const sal_uInt8 *created,
sal_uInt16 macStyle,
sal_uInt16 lowestRecPPEM,
sal_Int16 fontDirectionHint);
@@ -177,7 +177,7 @@ namespace vcl
* size specifies the size of existing maxp table for
* error-checking purposes
*/
- TrueTypeTable *TrueTypeTableNew_maxp(sal_uInt8 *maxp, int size);
+ TrueTypeTable *TrueTypeTableNew_maxp( const sal_uInt8* maxp, int size);
/**
* Creates a new empty 'glyf' table.
diff --git a/vcl/source/fontsubset/u2big5.inc b/vcl/source/fontsubset/u2big5.inc
deleted file mode 100644
index 951b65cffc25..000000000000
--- a/vcl/source/fontsubset/u2big5.inc
+++ /dev/null
@@ -1,1756 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// TODO: use generic RTL_TEXTENCODING_BIG5 to get rid of this file
-
-sal_uInt16pair xlat_1_3[13798] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A2, 0xA246},
- {0x00A3, 0xA247},{0x00A5, 0xA244},{0x00A7, 0xA1B1},{0x00B0, 0xA258},{0x00B1, 0xA1D3},{0x00B7, 0xA150},{0x00D7, 0xA1D1},{0x00F7, 0xA1D2},
- {0x02C7, 0xA3BE},{0x02C9, 0xA3BC},{0x02CA, 0xA3BD},{0x02CB, 0xA3BF},{0x02D9, 0xA3BB},{0x0391, 0xA344},{0x0392, 0xA345},{0x0393, 0xA346},
- {0x0394, 0xA347},{0x0395, 0xA348},{0x0396, 0xA349},{0x0397, 0xA34A},{0x0398, 0xA34B},{0x0399, 0xA34C},{0x039A, 0xA34D},{0x039B, 0xA34E},
- {0x039C, 0xA34F},{0x039D, 0xA350},{0x039E, 0xA351},{0x039F, 0xA352},{0x03A0, 0xA353},{0x03A1, 0xA354},{0x03A3, 0xA355},{0x03A4, 0xA356},
- {0x03A5, 0xA357},{0x03A6, 0xA358},{0x03A7, 0xA359},{0x03A8, 0xA35A},{0x03A9, 0xA35B},{0x03B1, 0xA35C},{0x03B2, 0xA35D},{0x03B3, 0xA35E},
- {0x03B4, 0xA35F},{0x03B5, 0xA360},{0x03B6, 0xA361},{0x03B7, 0xA362},{0x03B8, 0xA363},{0x03B9, 0xA364},{0x03BA, 0xA365},{0x03BB, 0xA366},
- {0x03BC, 0xA367},{0x03BD, 0xA368},{0x03BE, 0xA369},{0x03BF, 0xA36A},{0x03C0, 0xA36B},{0x03C1, 0xA36C},{0x03C3, 0xA36D},{0x03C4, 0xA36E},
- {0x03C5, 0xA36F},{0x03C6, 0xA370},{0x03C7, 0xA371},{0x03C8, 0xA372},{0x03C9, 0xA373},{0x0401, 0xC7B3},{0x0414, 0xC7B1},{0x0415, 0xC7B2},
- {0x0416, 0xC7B4},{0x0417, 0xC7B5},{0x0418, 0xC7B6},{0x0419, 0xC7B7},{0x041A, 0xC7B8},{0x041B, 0xC7B9},{0x041C, 0xC7BA},{0x0423, 0xC7BB},
- {0x0424, 0xC7BC},{0x0425, 0xC7BD},{0x0426, 0xC7BE},{0x0427, 0xC7BF},{0x0428, 0xC7C0},{0x0429, 0xC7C1},{0x042A, 0xC7C2},{0x042B, 0xC7C3},
- {0x042C, 0xC7C4},{0x042D, 0xC7C5},{0x042E, 0xC7C6},{0x042F, 0xC7C7},{0x0430, 0xC7C8},{0x0431, 0xC7C9},{0x0432, 0xC7CA},{0x0433, 0xC7CB},
- {0x0434, 0xC7CC},{0x0435, 0xC7CD},{0x0436, 0xC7CF},{0x0437, 0xC7D0},{0x0438, 0xC7D1},{0x0439, 0xC7D2},{0x043A, 0xC7D3},{0x043B, 0xC7D4},
- {0x043C, 0xC7D5},{0x043D, 0xC7D6},{0x043E, 0xC7D7},{0x043F, 0xC7D8},{0x0440, 0xC7D9},{0x0441, 0xC7DA},{0x0442, 0xC7DB},{0x0443, 0xC7DC},
- {0x0444, 0xC7DD},{0x0445, 0xC7DE},{0x0446, 0xC7DF},{0x0447, 0xC7E0},{0x0448, 0xC7E1},{0x0449, 0xC7E2},{0x044A, 0xC7E3},{0x044B, 0xC7E4},
- {0x044C, 0xC7E5},{0x044D, 0xC7E6},{0x044E, 0xC7E7},{0x044F, 0xC7E8},{0x0451, 0xC7CE},{0x2013, 0xA156},{0x2014, 0xA158},{0x2018, 0xA1A5},
- {0x2019, 0xA1A6},{0x201C, 0xA1A7},{0x201D, 0xA1A8},{0x2022, 0xA145},{0x2025, 0xA14C},{0x2026, 0xA14B},{0x2032, 0xA1AC},{0x2035, 0xA1AB},
- {0x203B, 0xA1B0},{0x203E, 0xA1C2},{0x2103, 0xA24A},{0x2105, 0xA1C1},{0x2109, 0xA24B},{0x2160, 0xA2B9},{0x2161, 0xA2BA},{0x2162, 0xA2BB},
- {0x2163, 0xA2BC},{0x2164, 0xA2BD},{0x2165, 0xA2BE},{0x2166, 0xA2BF},{0x2167, 0xA2C0},{0x2168, 0xA2C1},{0x2169, 0xA2C2},{0x2190, 0xA1F6},
- {0x2191, 0xA1F4},{0x2192, 0xA1F7},{0x2193, 0xA1F5},{0x2196, 0xA1F8},{0x2197, 0xA1F9},{0x2198, 0xA1FB},{0x2199, 0xA1FA},{0x221A, 0xA1D4},
- {0x221E, 0xA1DB},{0x221F, 0xA1E8},{0x2220, 0xA1E7},{0x2223, 0xA1FD},{0x2225, 0xA1FC},{0x2229, 0xA1E4},{0x222A, 0xA1E5},{0x222B, 0xA1EC},
- {0x222E, 0xA1ED},{0x2234, 0xA1EF},{0x2235, 0xA1EE},{0x223C, 0xA1E3},{0x2252, 0xA1DC},{0x2260, 0xA1DA},{0x2261, 0xA1DD},{0x2266, 0xA1D8},
- {0x2267, 0xA1D9},{0x22A5, 0xA1E6},{0x22BF, 0xA1E9},{0x2460, 0xC7E9},{0x2461, 0xC7EA},{0x2462, 0xC7EB},{0x2463, 0xC7EC},{0x2464, 0xC7ED},
- {0x2465, 0xC7EE},{0x2466, 0xC7EF},{0x2467, 0xC7F0},{0x2468, 0xC7F1},{0x2469, 0xC7F2},{0x2474, 0xC7F3},{0x2475, 0xC7F4},{0x2476, 0xC7F5},
- {0x2477, 0xC7F6},{0x2478, 0xC7F7},{0x2479, 0xC7F8},{0x247A, 0xC7F9},{0x247B, 0xC7FA},{0x247C, 0xC7FB},{0x247D, 0xC7FC},{0x2500, 0xA277},
- {0x2502, 0xA278},{0x250C, 0xA27A},{0x2510, 0xA27B},{0x2514, 0xA27C},{0x2518, 0xA27D},{0x251C, 0xA275},{0x2524, 0xA274},{0x252C, 0xA273},
- {0x2534, 0xA272},{0x253C, 0xA271},{0x2550, 0xA2A4},{0x255E, 0xA2A5},{0x2561, 0xA2A7},{0x256A, 0xA2A6},{0x256D, 0xA27E},{0x256E, 0xA2A1},
- {0x256F, 0xA2A3},{0x2570, 0xA2A2},{0x2571, 0xA2AC},{0x2572, 0xA2AD},{0x2573, 0xA2AE},{0x2581, 0xA262},{0x2582, 0xA263},{0x2583, 0xA264},
- {0x2584, 0xA265},{0x2585, 0xA266},{0x2586, 0xA267},{0x2587, 0xA268},{0x2588, 0xA269},{0x2589, 0xA270},{0x258A, 0xA26F},{0x258B, 0xA26E},
- {0x258C, 0xA26D},{0x258D, 0xA26C},{0x258E, 0xA26B},{0x258F, 0xA26A},{0x2594, 0xA276},{0x2595, 0xA279},{0x25A0, 0xA1BD},{0x25A1, 0xA1BC},
- {0x25B2, 0xA1B6},{0x25B3, 0xA1B5},{0x25BC, 0xA1BF},{0x25BD, 0xA1BE},{0x25C6, 0xA1BB},{0x25C7, 0xA1BA},{0x25CB, 0xA1B3},{0x25CE, 0xA1B7},
- {0x25CF, 0xA1B4},{0x25E2, 0xA2A8},{0x25E3, 0xA2A9},{0x25E4, 0xA2AB},{0x25E5, 0xA2AA},{0x2605, 0xA1B9},{0x2606, 0xA1B8},{0x2609, 0xA1F3},
- {0x2640, 0xA1F0},{0x2641, 0xA1F2},{0x2642, 0xA1F1},{0x3000, 0xA140},{0x3001, 0xA142},{0x3002, 0xA143},{0x3003, 0xA1B2},{0x3005, 0xC6A4},
- {0x3008, 0xA171},{0x3009, 0xA172},{0x300A, 0xA16D},{0x300B, 0xA16E},{0x300C, 0xA175},{0x300D, 0xA176},{0x300E, 0xA179},{0x300F, 0xA17A},
- {0x3010, 0xA169},{0x3011, 0xA16A},{0x3012, 0xA245},{0x3014, 0xA165},{0x3015, 0xA166},{0x301D, 0xA1A9},{0x301E, 0xA1AA},{0x3021, 0xA2C3},
- {0x3022, 0xA2C4},{0x3023, 0xA2C5},{0x3024, 0xA2C6},{0x3025, 0xA2C7},{0x3026, 0xA2C8},{0x3027, 0xA2C9},{0x3028, 0xA2CA},{0x3029, 0xA2CB},
- {0x3041, 0xC6A5},{0x3042, 0xC6A6},{0x3043, 0xC6A7},{0x3044, 0xC6A8},{0x3045, 0xC6A9},{0x3046, 0xC6AA},{0x3047, 0xC6AB},{0x3048, 0xC6AC},
- {0x3049, 0xC6AD},{0x304A, 0xC6AE},{0x304B, 0xC6AF},{0x304C, 0xC6B0},{0x304D, 0xC6B1},{0x304E, 0xC6B2},{0x304F, 0xC6B3},{0x3050, 0xC6B4},
- {0x3051, 0xC6B5},{0x3052, 0xC6B6},{0x3053, 0xC6B7},{0x3054, 0xC6B8},{0x3055, 0xC6B9},{0x3056, 0xC6BA},{0x3057, 0xC6BB},{0x3058, 0xC6BC},
- {0x3059, 0xC6BD},{0x305A, 0xC6BE},{0x305B, 0xC6BF},{0x305C, 0xC6C0},{0x305D, 0xC6C1},{0x305E, 0xC6C2},{0x305F, 0xC6C3},{0x3060, 0xC6C4},
- {0x3061, 0xC6C5},{0x3062, 0xC6C6},{0x3063, 0xC6C7},{0x3064, 0xC6C8},{0x3065, 0xC6C9},{0x3066, 0xC6CA},{0x3067, 0xC6CB},{0x3068, 0xC6CC},
- {0x3069, 0xC6CD},{0x306A, 0xC6CE},{0x306B, 0xC6CF},{0x306C, 0xC6D0},{0x306D, 0xC6D1},{0x306E, 0xC6D2},{0x306F, 0xC6D3},{0x3070, 0xC6D4},
- {0x3071, 0xC6D5},{0x3072, 0xC6D6},{0x3073, 0xC6D7},{0x3074, 0xC6D8},{0x3075, 0xC6D9},{0x3076, 0xC6DA},{0x3077, 0xC6DB},{0x3078, 0xC6DC},
- {0x3079, 0xC6DD},{0x307A, 0xC6DE},{0x307B, 0xC6DF},{0x307C, 0xC6E0},{0x307D, 0xC6E1},{0x307E, 0xC6E2},{0x307F, 0xC6E3},{0x3080, 0xC6E4},
- {0x3081, 0xC6E5},{0x3082, 0xC6E6},{0x3083, 0xC6E7},{0x3084, 0xC6E8},{0x3085, 0xC6E9},{0x3086, 0xC6EA},{0x3087, 0xC6EB},{0x3088, 0xC6EC},
- {0x3089, 0xC6ED},{0x308A, 0xC6EE},{0x308B, 0xC6EF},{0x308C, 0xC6F0},{0x308D, 0xC6F1},{0x308E, 0xC6F2},{0x308F, 0xC6F3},{0x3090, 0xC6F4},
- {0x3091, 0xC6F5},{0x3092, 0xC6F6},{0x3093, 0xC6F7},{0x309D, 0xC6A2},{0x309E, 0xC6A3},{0x30A1, 0xC6F8},{0x30A2, 0xC6F9},{0x30A3, 0xC6FA},
- {0x30A4, 0xC6FB},{0x30A5, 0xC6FC},{0x30A6, 0xC6FD},{0x30A7, 0xC6FE},{0x30A8, 0xC740},{0x30A9, 0xC741},{0x30AA, 0xC742},{0x30AB, 0xC743},
- {0x30AC, 0xC744},{0x30AD, 0xC745},{0x30AE, 0xC746},{0x30AF, 0xC747},{0x30B0, 0xC748},{0x30B1, 0xC749},{0x30B2, 0xC74A},{0x30B3, 0xC74B},
- {0x30B4, 0xC74C},{0x30B5, 0xC74D},{0x30B6, 0xC74E},{0x30B7, 0xC74F},{0x30B8, 0xC750},{0x30B9, 0xC751},{0x30BA, 0xC752},{0x30BB, 0xC753},
- {0x30BC, 0xC754},{0x30BD, 0xC755},{0x30BE, 0xC756},{0x30BF, 0xC757},{0x30C0, 0xC758},{0x30C1, 0xC759},{0x30C2, 0xC75A},{0x30C3, 0xC75B},
- {0x30C4, 0xC75C},{0x30C5, 0xC75D},{0x30C6, 0xC75E},{0x30C7, 0xC75F},{0x30C8, 0xC760},{0x30C9, 0xC761},{0x30CA, 0xC762},{0x30CB, 0xC763},
- {0x30CC, 0xC764},{0x30CD, 0xC765},{0x30CE, 0xC766},{0x30CF, 0xC767},{0x30D0, 0xC768},{0x30D1, 0xC769},{0x30D2, 0xC76A},{0x30D3, 0xC76B},
- {0x30D4, 0xC76C},{0x30D5, 0xC76D},{0x30D6, 0xC76E},{0x30D7, 0xC76F},{0x30D8, 0xC770},{0x30D9, 0xC771},{0x30DA, 0xC772},{0x30DB, 0xC773},
- {0x30DC, 0xC774},{0x30DD, 0xC775},{0x30DE, 0xC776},{0x30DF, 0xC777},{0x30E0, 0xC778},{0x30E1, 0xC779},{0x30E2, 0xC77A},{0x30E3, 0xC77B},
- {0x30E4, 0xC77C},{0x30E5, 0xC77D},{0x30E6, 0xC77E},{0x30E7, 0xC7A1},{0x30E8, 0xC7A2},{0x30E9, 0xC7A3},{0x30EA, 0xC7A4},{0x30EB, 0xC7A5},
- {0x30EC, 0xC7A6},{0x30ED, 0xC7A7},{0x30EE, 0xC7A8},{0x30EF, 0xC7A9},{0x30F0, 0xC7AA},{0x30F1, 0xC7AB},{0x30F2, 0xC7AC},{0x30F3, 0xC7AD},
- {0x30F4, 0xC7AE},{0x30F5, 0xC7AF},{0x30F6, 0xC7B0},{0x30FE, 0xC6A1},{0x3105, 0xA374},{0x3106, 0xA375},{0x3107, 0xA376},{0x3108, 0xA377},
- {0x3109, 0xA378},{0x310A, 0xA379},{0x310B, 0xA37A},{0x310C, 0xA37B},{0x310D, 0xA37C},{0x310E, 0xA37D},{0x310F, 0xA37E},{0x3110, 0xA3A1},
- {0x3111, 0xA3A2},{0x3112, 0xA3A3},{0x3113, 0xA3A4},{0x3114, 0xA3A5},{0x3115, 0xA3A6},{0x3116, 0xA3A7},{0x3117, 0xA3A8},{0x3118, 0xA3A9},
- {0x3119, 0xA3AA},{0x311A, 0xA3AB},{0x311B, 0xA3AC},{0x311C, 0xA3AD},{0x311D, 0xA3AE},{0x311E, 0xA3AF},{0x311F, 0xA3B0},{0x3120, 0xA3B1},
- {0x3121, 0xA3B2},{0x3122, 0xA3B3},{0x3123, 0xA3B4},{0x3124, 0xA3B5},{0x3125, 0xA3B6},{0x3126, 0xA3B7},{0x3127, 0xA3B8},{0x3128, 0xA3B9},
- {0x3129, 0xA3BA},{0x32A3, 0xA1C0},{0x338E, 0xA255},{0x338F, 0xA256},{0x339C, 0xA250},{0x339D, 0xA251},{0x339E, 0xA252},{0x33A1, 0xA254},
- {0x33C4, 0xA257},{0x33CE, 0xA253},{0x33D1, 0xA1EB},{0x33D2, 0xA1EA},{0x33D5, 0xA24F},{0x4E00, 0xA440},{0x4E01, 0xA442},{0x4E03, 0xA443},
- {0x4E07, 0xC945},{0x4E08, 0xA456},{0x4E09, 0xA454},{0x4E0A, 0xA457},{0x4E0B, 0xA455},{0x4E0C, 0xC946},{0x4E0D, 0xA4A3},{0x4E0E, 0xC94F},
- {0x4E0F, 0xC94D},{0x4E10, 0xA4A2},{0x4E11, 0xA4A1},{0x4E14, 0xA542},{0x4E15, 0xA541},{0x4E16, 0xA540},{0x4E18, 0xA543},{0x4E19, 0xA4FE},
- {0x4E1E, 0xA5E0},{0x4E1F, 0xA5E1},{0x4E26, 0xA8C3},{0x4E2B, 0xA458},{0x4E2D, 0xA4A4},{0x4E2E, 0xC950},{0x4E30, 0xA4A5},{0x4E31, 0xC963},
- {0x4E32, 0xA6EA},{0x4E33, 0xCBB1},{0x4E38, 0xA459},{0x4E39, 0xA4A6},{0x4E3B, 0xA544},{0x4E3C, 0xC964},{0x4E42, 0xC940},{0x4E43, 0xA444},
- {0x4E45, 0xA45B},{0x4E47, 0xC947},{0x4E48, 0xA45C},{0x4E4B, 0xA4A7},{0x4E4D, 0xA545},{0x4E4E, 0xA547},{0x4E4F, 0xA546},{0x4E52, 0xA5E2},
- {0x4E53, 0xA5E3},{0x4E56, 0xA8C4},{0x4E58, 0xADBC},{0x4E59, 0xA441},{0x4E5C, 0xC941},{0x4E5D, 0xA445},{0x4E5E, 0xA45E},{0x4E5F, 0xA45D},
- {0x4E69, 0xA5E4},{0x4E73, 0xA8C5},{0x4E7E, 0xB0AE},{0x4E7F, 0xD44B},{0x4E82, 0xB6C3},{0x4E83, 0xDCB1},{0x4E84, 0xDCB2},{0x4E86, 0xA446},
- {0x4E88, 0xA4A9},{0x4E8B, 0xA8C6},{0x4E8C, 0xA447},{0x4E8D, 0xC948},{0x4E8E, 0xA45F},{0x4E91, 0xA4AA},{0x4E92, 0xA4AC},{0x4E93, 0xC951},
- {0x4E94, 0xA4AD},{0x4E95, 0xA4AB},{0x4E99, 0xA5E5},{0x4E9B, 0xA8C7},{0x4E9E, 0xA8C8},{0x4E9F, 0xAB45},{0x4EA1, 0xA460},{0x4EA2, 0xA4AE},
- {0x4EA4, 0xA5E6},{0x4EA5, 0xA5E8},{0x4EA6, 0xA5E7},{0x4EA8, 0xA6EB},{0x4EAB, 0xA8C9},{0x4EAC, 0xA8CA},{0x4EAD, 0xAB46},{0x4EAE, 0xAB47},
- {0x4EB3, 0xADBD},{0x4EB6, 0xDCB3},{0x4EB9, 0xF6D6},{0x4EBA, 0xA448},{0x4EC0, 0xA4B0},{0x4EC1, 0xA4AF},{0x4EC2, 0xC952},{0x4EC3, 0xA4B1},
- {0x4EC4, 0xA4B7},{0x4EC6, 0xA4B2},{0x4EC7, 0xA4B3},{0x4EC8, 0xC954},{0x4EC9, 0xC953},{0x4ECA, 0xA4B5},{0x4ECB, 0xA4B6},{0x4ECD, 0xA4B4},
- {0x4ED4, 0xA54A},{0x4ED5, 0xA54B},{0x4ED6, 0xA54C},{0x4ED7, 0xA54D},{0x4ED8, 0xA549},{0x4ED9, 0xA550},{0x4EDA, 0xC96A},{0x4EDC, 0xC966},
- {0x4EDD, 0xC969},{0x4EDE, 0xA551},{0x4EDF, 0xA561},{0x4EE1, 0xC968},{0x4EE3, 0xA54E},{0x4EE4, 0xA54F},{0x4EE5, 0xA548},{0x4EE8, 0xC965},
- {0x4EE9, 0xC967},{0x4EF0, 0xA5F5},{0x4EF1, 0xC9B0},{0x4EF2, 0xA5F2},{0x4EF3, 0xA5F6},{0x4EF4, 0xC9BA},{0x4EF5, 0xC9AE},{0x4EF6, 0xA5F3},
- {0x4EF7, 0xC9B2},{0x4EFB, 0xA5F4},{0x4EFD, 0xA5F7},{0x4EFF, 0xA5E9},{0x4F00, 0xC9B1},{0x4F01, 0xA5F8},{0x4F02, 0xC9B5},{0x4F04, 0xC9B9},
- {0x4F05, 0xC9B6},{0x4F08, 0xC9B3},{0x4F09, 0xA5EA},{0x4F0A, 0xA5EC},{0x4F0B, 0xA5F9},{0x4F0D, 0xA5EE},{0x4F0E, 0xC9AB},{0x4F0F, 0xA5F1},
- {0x4F10, 0xA5EF},{0x4F11, 0xA5F0},{0x4F12, 0xC9BB},{0x4F13, 0xC9B8},{0x4F14, 0xC9AF},{0x4F15, 0xA5ED},{0x4F18, 0xC9AC},{0x4F19, 0xA5EB},
- {0x4F1D, 0xC9B4},{0x4F22, 0xC9B7},{0x4F2C, 0xC9AD},{0x4F2D, 0xCA66},{0x4F2F, 0xA742},{0x4F30, 0xA6F4},{0x4F33, 0xCA67},{0x4F34, 0xA6F1},
- {0x4F36, 0xA744},{0x4F38, 0xA6F9},{0x4F3A, 0xA6F8},{0x4F3B, 0xCA5B},{0x4F3C, 0xA6FC},{0x4F3D, 0xA6F7},{0x4F3E, 0xCA60},{0x4F3F, 0xCA68},
- {0x4F41, 0xCA64},{0x4F43, 0xA6FA},{0x4F46, 0xA6FD},{0x4F47, 0xA6EE},{0x4F48, 0xA747},{0x4F49, 0xCA5D},{0x4F4C, 0xCBBD},{0x4F4D, 0xA6EC},
- {0x4F4E, 0xA743},{0x4F4F, 0xA6ED},{0x4F50, 0xA6F5},{0x4F51, 0xA6F6},{0x4F52, 0xCA62},{0x4F53, 0xCA5E},{0x4F54, 0xA6FB},{0x4F55, 0xA6F3},
- {0x4F56, 0xCA5A},{0x4F57, 0xA6EF},{0x4F58, 0xCA65},{0x4F59, 0xA745},{0x4F5A, 0xA748},{0x4F5B, 0xA6F2},{0x4F5C, 0xA740},{0x4F5D, 0xA746},
- {0x4F5E, 0xA6F0},{0x4F5F, 0xCA63},{0x4F60, 0xA741},{0x4F61, 0xCA69},{0x4F62, 0xCA5C},{0x4F63, 0xA6FE},{0x4F64, 0xCA5F},{0x4F67, 0xCA61},
- {0x4F69, 0xA8D8},{0x4F6A, 0xCBBF},{0x4F6B, 0xCBCB},{0x4F6C, 0xA8D0},{0x4F6E, 0xCBCC},{0x4F6F, 0xA8CB},{0x4F70, 0xA8D5},{0x4F73, 0xA8CE},
- {0x4F74, 0xCBB9},{0x4F75, 0xA8D6},{0x4F76, 0xCBB8},{0x4F77, 0xCBBC},{0x4F78, 0xCBC3},{0x4F79, 0xCBC1},{0x4F7A, 0xA8DE},{0x4F7B, 0xA8D9},
- {0x4F7C, 0xCBB3},{0x4F7D, 0xCBB5},{0x4F7E, 0xA8DB},{0x4F7F, 0xA8CF},{0x4F80, 0xCBB6},{0x4F81, 0xCBC2},{0x4F82, 0xCBC9},{0x4F83, 0xA8D4},
- {0x4F84, 0xCBBB},{0x4F85, 0xCBB4},{0x4F86, 0xA8D3},{0x4F87, 0xCBB7},{0x4F88, 0xA8D7},{0x4F89, 0xCBBA},{0x4F8B, 0xA8D2},{0x4F8D, 0xA8CD},
- {0x4F8F, 0xA8DC},{0x4F90, 0xCBC4},{0x4F91, 0xA8DD},{0x4F92, 0xCBC8},{0x4F94, 0xCBC6},{0x4F95, 0xCBCA},{0x4F96, 0xA8DA},{0x4F97, 0xCBBE},
- {0x4F98, 0xCBB2},{0x4F9A, 0xCBC0},{0x4F9B, 0xA8D1},{0x4F9C, 0xCBC5},{0x4F9D, 0xA8CC},{0x4F9E, 0xCBC7},{0x4FAE, 0xAB56},{0x4FAF, 0xAB4A},
- {0x4FB2, 0xCDE0},{0x4FB3, 0xCDE8},{0x4FB5, 0xAB49},{0x4FB6, 0xAB51},{0x4FB7, 0xAB5D},{0x4FB9, 0xCDEE},{0x4FBA, 0xCDEC},{0x4FBB, 0xCDE7},
- {0x4FBF, 0xAB4B},{0x4FC0, 0xCDED},{0x4FC1, 0xCDE3},{0x4FC2, 0xAB59},{0x4FC3, 0xAB50},{0x4FC4, 0xAB58},{0x4FC5, 0xCDDE},{0x4FC7, 0xCDEA},
- {0x4FC9, 0xCDE1},{0x4FCA, 0xAB54},{0x4FCB, 0xCDE2},{0x4FCD, 0xCDDD},{0x4FCE, 0xAB5B},{0x4FCF, 0xAB4E},{0x4FD0, 0xAB57},{0x4FD1, 0xAB4D},
- {0x4FD3, 0xCDDF},{0x4FD4, 0xCDE4},{0x4FD6, 0xCDEB},{0x4FD7, 0xAB55},{0x4FD8, 0xAB52},{0x4FD9, 0xCDE6},{0x4FDA, 0xAB5A},{0x4FDB, 0xCDE9},
- {0x4FDC, 0xCDE5},{0x4FDD, 0xAB4F},{0x4FDE, 0xAB5C},{0x4FDF, 0xAB53},{0x4FE0, 0xAB4C},{0x4FE1, 0xAB48},{0x4FEC, 0xCDEF},{0x4FEE, 0xADD7},
- {0x4FEF, 0xADC1},{0x4FF1, 0xADD1},{0x4FF3, 0xADD6},{0x4FF4, 0xD0D0},{0x4FF5, 0xD0CF},{0x4FF6, 0xD0D4},{0x4FF7, 0xD0D5},{0x4FF8, 0xADC4},
- {0x4FFA, 0xADCD},{0x4FFE, 0xADDA},{0x5000, 0xADCE},{0x5005, 0xD0C9},{0x5006, 0xADC7},{0x5007, 0xD0CA},{0x5009, 0xADDC},{0x500B, 0xADD3},
- {0x500C, 0xADBE},{0x500D, 0xADBF},{0x500E, 0xD0DD},{0x500F, 0xB0BF},{0x5011, 0xADCC},{0x5012, 0xADCB},{0x5013, 0xD0CB},{0x5014, 0xADCF},
- {0x5015, 0xD45B},{0x5016, 0xADC6},{0x5017, 0xD0D6},{0x5018, 0xADD5},{0x5019, 0xADD4},{0x501A, 0xADCA},{0x501B, 0xD0CE},{0x501C, 0xD0D7},
- {0x501E, 0xD0C8},{0x501F, 0xADC9},{0x5020, 0xD0D8},{0x5021, 0xADD2},{0x5022, 0xD0CC},{0x5023, 0xADC0},{0x5025, 0xADC3},{0x5026, 0xADC2},
- {0x5027, 0xD0D9},{0x5028, 0xADD0},{0x5029, 0xADC5},{0x502A, 0xADD9},{0x502B, 0xADDB},{0x502C, 0xD0D3},{0x502D, 0xADD8},{0x502F, 0xD0DB},
- {0x5030, 0xD0CD},{0x5031, 0xD0DC},{0x5033, 0xD0D1},{0x5035, 0xD0DA},{0x5037, 0xD0D2},{0x503C, 0xADC8},{0x5040, 0xD463},{0x5041, 0xD457},
- {0x5043, 0xB0B3},{0x5045, 0xD45C},{0x5046, 0xD462},{0x5047, 0xB0B2},{0x5048, 0xD455},{0x5049, 0xB0B6},{0x504A, 0xD459},{0x504B, 0xD452},
- {0x504C, 0xB0B4},{0x504D, 0xD456},{0x504E, 0xB0B9},{0x504F, 0xB0BE},{0x5051, 0xD467},{0x5053, 0xD451},{0x5055, 0xB0BA},{0x5057, 0xD466},
- {0x505A, 0xB0B5},{0x505B, 0xD458},{0x505C, 0xB0B1},{0x505D, 0xD453},{0x505E, 0xD44F},{0x505F, 0xD45D},{0x5060, 0xD450},{0x5061, 0xD44E},
- {0x5062, 0xD45A},{0x5063, 0xD460},{0x5064, 0xD461},{0x5065, 0xB0B7},{0x5068, 0xD85B},{0x5069, 0xD45E},{0x506A, 0xD44D},{0x506B, 0xD45F},
- {0x506D, 0xB0C1},{0x506E, 0xD464},{0x506F, 0xB0C0},{0x5070, 0xD44C},{0x5072, 0xD454},{0x5073, 0xD465},{0x5074, 0xB0BC},{0x5075, 0xB0BB},
- {0x5076, 0xB0B8},{0x5077, 0xB0BD},{0x507A, 0xB0AF},{0x507D, 0xB0B0},{0x5080, 0xB3C8},{0x5082, 0xD85E},{0x5083, 0xD857},{0x5085, 0xB3C5},
- {0x5087, 0xD85F},{0x508B, 0xD855},{0x508C, 0xD858},{0x508D, 0xB3C4},{0x508E, 0xD859},{0x5091, 0xB3C7},{0x5092, 0xD85D},{0x5094, 0xD853},
- {0x5095, 0xD852},{0x5096, 0xB3C9},{0x5098, 0xB3CA},{0x5099, 0xB3C6},{0x509A, 0xB3CB},{0x509B, 0xD851},{0x509C, 0xD85C},{0x509D, 0xD85A},
- {0x509E, 0xD854},{0x50A2, 0xB3C3},{0x50A3, 0xD856},{0x50AC, 0xB6CA},{0x50AD, 0xB6C4},{0x50AE, 0xDCB7},{0x50AF, 0xB6CD},{0x50B0, 0xDCBD},
- {0x50B1, 0xDCC0},{0x50B2, 0xB6C6},{0x50B3, 0xB6C7},{0x50B4, 0xDCBA},{0x50B5, 0xB6C5},{0x50B6, 0xDCC3},{0x50B7, 0xB6CB},{0x50B8, 0xDCC4},
- {0x50BA, 0xDCBF},{0x50BB, 0xB6CC},{0x50BD, 0xDCB4},{0x50BE, 0xB6C9},{0x50BF, 0xDCB5},{0x50C1, 0xDCBE},{0x50C2, 0xDCBC},{0x50C4, 0xDCB8},
- {0x50C5, 0xB6C8},{0x50C6, 0xDCB6},{0x50C7, 0xB6CE},{0x50C8, 0xDCBB},{0x50C9, 0xDCC2},{0x50CA, 0xDCB9},{0x50CB, 0xDCC1},{0x50CE, 0xB9B6},
- {0x50CF, 0xB9B3},{0x50D1, 0xB9B4},{0x50D3, 0xE0F9},{0x50D4, 0xE0F1},{0x50D5, 0xB9B2},{0x50D6, 0xB9AF},{0x50D7, 0xE0F2},{0x50DA, 0xB9B1},
- {0x50DB, 0xE0F5},{0x50DD, 0xE0F7},{0x50E0, 0xE0FE},{0x50E3, 0xE0FD},{0x50E4, 0xE0F8},{0x50E5, 0xB9AE},{0x50E6, 0xE0F0},{0x50E7, 0xB9AC},
- {0x50E8, 0xE0F3},{0x50E9, 0xB9B7},{0x50EA, 0xE0F6},{0x50EC, 0xE0FA},{0x50ED, 0xB9B0},{0x50EE, 0xB9AD},{0x50EF, 0xE0FC},{0x50F0, 0xE0FB},
- {0x50F1, 0xB9B5},{0x50F3, 0xE0F4},{0x50F5, 0xBBF8},{0x50F6, 0xE4EC},{0x50F8, 0xE4E9},{0x50F9, 0xBBF9},{0x50FB, 0xBBF7},{0x50FD, 0xE4F0},
- {0x50FE, 0xE4ED},{0x50FF, 0xE4E6},{0x5100, 0xBBF6},{0x5102, 0xBBFA},{0x5103, 0xE4E7},{0x5104, 0xBBF5},{0x5105, 0xBBFD},{0x5106, 0xE4EA},
- {0x5107, 0xE4EB},{0x5108, 0xBBFB},{0x5109, 0xBBFC},{0x510A, 0xE4F1},{0x510B, 0xE4EE},{0x510C, 0xE4EF},{0x5110, 0xBEAA},{0x5111, 0xE8F8},
- {0x5112, 0xBEA7},{0x5113, 0xE8F5},{0x5114, 0xBEA9},{0x5115, 0xBEAB},{0x5117, 0xE8F6},{0x5118, 0xBEA8},{0x511A, 0xE8F7},{0x511C, 0xE8F4},
- {0x511F, 0xC076},{0x5120, 0xECBD},{0x5121, 0xC077},{0x5122, 0xECBB},{0x5124, 0xECBC},{0x5125, 0xECBA},{0x5126, 0xECB9},{0x5129, 0xECBE},
- {0x512A, 0xC075},{0x512D, 0xEFB8},{0x512E, 0xEFB9},{0x5130, 0xE4E8},{0x5131, 0xEFB7},{0x5132, 0xC078},{0x5133, 0xC35F},{0x5134, 0xF1EB},
- {0x5135, 0xF1EC},{0x5137, 0xC4D7},{0x5138, 0xC4D8},{0x5139, 0xF5C1},{0x513A, 0xF5C0},{0x513B, 0xC56C},{0x513C, 0xC56B},{0x513D, 0xF7D0},
- {0x513F, 0xA449},{0x5140, 0xA461},{0x5141, 0xA4B9},{0x5143, 0xA4B8},{0x5144, 0xA553},{0x5145, 0xA552},{0x5146, 0xA5FC},{0x5147, 0xA5FB},
- {0x5148, 0xA5FD},{0x5149, 0xA5FA},{0x514B, 0xA74A},{0x514C, 0xA749},{0x514D, 0xA74B},{0x5152, 0xA8E0},{0x5154, 0xA8DF},{0x5155, 0xA8E1},
- {0x5157, 0xAB5E},{0x5159, 0xA259},{0x515A, 0xD0DE},{0x515B, 0xA25A},{0x515C, 0xB0C2},{0x515D, 0xA25C},{0x515E, 0xA25B},{0x515F, 0xD860},
- {0x5161, 0xA25D},{0x5162, 0xB9B8},{0x5163, 0xA25E},{0x5165, 0xA44A},{0x5167, 0xA4BA},{0x5168, 0xA5FE},{0x5169, 0xA8E2},{0x516B, 0xA44B},
- {0x516C, 0xA4BD},{0x516D, 0xA4BB},{0x516E, 0xA4BC},{0x5171, 0xA640},{0x5175, 0xA74C},{0x5176, 0xA8E4},{0x5177, 0xA8E3},{0x5178, 0xA8E5},
- {0x517C, 0xADDD},{0x5180, 0xBEAC},{0x5187, 0xC94E},{0x5189, 0xA554},{0x518A, 0xA555},{0x518D, 0xA641},{0x518F, 0xCA6A},{0x5191, 0xAB60},
- {0x5192, 0xAB5F},{0x5193, 0xD0E0},{0x5194, 0xD0DF},{0x5195, 0xB0C3},{0x5197, 0xA4BE},{0x5198, 0xC955},{0x519E, 0xCBCD},{0x51A0, 0xAB61},
- {0x51A2, 0xADE0},{0x51A4, 0xADDE},{0x51A5, 0xADDF},{0x51AA, 0xBEAD},{0x51AC, 0xA556},{0x51B0, 0xA642},{0x51B1, 0xC9BC},{0x51B6, 0xA74D},
- {0x51B7, 0xA74E},{0x51B9, 0xCA6B},{0x51BC, 0xCBCE},{0x51BD, 0xA8E6},{0x51BE, 0xCBCF},{0x51C4, 0xD0E2},{0x51C5, 0xD0E3},{0x51C6, 0xADE3},
- {0x51C8, 0xD0E4},{0x51CA, 0xD0E1},{0x51CB, 0xADE4},{0x51CC, 0xADE2},{0x51CD, 0xADE1},{0x51CE, 0xD0E5},{0x51D0, 0xD468},{0x51D4, 0xD861},
- {0x51D7, 0xDCC5},{0x51D8, 0xE140},{0x51DC, 0xBBFE},{0x51DD, 0xBEAE},{0x51DE, 0xE8F9},{0x51E0, 0xA44C},{0x51E1, 0xA45A},{0x51F0, 0xB0C4},
- {0x51F1, 0xB3CD},{0x51F3, 0xB9B9},{0x51F5, 0xC942},{0x51F6, 0xA4BF},{0x51F8, 0xA559},{0x51F9, 0xA557},{0x51FA, 0xA558},{0x51FD, 0xA8E7},
- {0x5200, 0xA44D},{0x5201, 0xA44E},{0x5203, 0xA462},{0x5206, 0xA4C0},{0x5207, 0xA4C1},{0x5208, 0xA4C2},{0x5209, 0xC9BE},{0x520A, 0xA55A},
- {0x520C, 0xC96B},{0x520E, 0xA646},{0x5210, 0xC9BF},{0x5211, 0xA644},{0x5212, 0xA645},{0x5213, 0xC9BD},{0x5216, 0xA647},{0x5217, 0xA643},
- {0x521C, 0xCA6C},{0x521D, 0xAAEC},{0x521E, 0xCA6D},{0x5221, 0xCA6E},{0x5224, 0xA750},{0x5225, 0xA74F},{0x5228, 0xA753},{0x5229, 0xA751},
- {0x522A, 0xA752},{0x522E, 0xA8ED},{0x5230, 0xA8EC},{0x5231, 0xCBD4},{0x5232, 0xCBD1},{0x5233, 0xCBD2},{0x5235, 0xCBD0},{0x5236, 0xA8EE},
- {0x5237, 0xA8EA},{0x5238, 0xA8E9},{0x523A, 0xA8EB},{0x523B, 0xA8E8},{0x5241, 0xA8EF},{0x5243, 0xAB63},{0x5244, 0xCDF0},{0x5246, 0xCBD3},
- {0x5247, 0xAB68},{0x5249, 0xCDF1},{0x524A, 0xAB64},{0x524B, 0xAB67},{0x524C, 0xAB66},{0x524D, 0xAB65},{0x524E, 0xAB62},{0x5252, 0xD0E8},
- {0x5254, 0xADE7},{0x5255, 0xD0EB},{0x5256, 0xADE5},{0x525A, 0xD0E7},{0x525B, 0xADE8},{0x525C, 0xADE6},{0x525D, 0xADE9},{0x525E, 0xD0E9},
- {0x525F, 0xD0EA},{0x5261, 0xD0E6},{0x5262, 0xD0EC},{0x5269, 0xB3D1},{0x526A, 0xB0C5},{0x526B, 0xD469},{0x526C, 0xD46B},{0x526D, 0xD46A},
- {0x526E, 0xD46C},{0x526F, 0xB0C6},{0x5272, 0xB3CE},{0x5274, 0xB3CF},{0x5275, 0xB3D0},{0x5277, 0xB6D0},{0x5278, 0xDCC7},{0x527A, 0xDCC6},
- {0x527B, 0xDCC8},{0x527C, 0xDCC9},{0x527D, 0xB6D1},{0x527F, 0xB6CF},{0x5280, 0xE141},{0x5281, 0xE142},{0x5282, 0xB9BB},{0x5283, 0xB9BA},
- {0x5284, 0xE35A},{0x5287, 0xBC40},{0x5288, 0xBC41},{0x5289, 0xBC42},{0x528A, 0xBC44},{0x528B, 0xE4F2},{0x528C, 0xE4F3},{0x528D, 0xBC43},
- {0x5291, 0xBEAF},{0x5293, 0xBEB0},{0x5296, 0xF1ED},{0x5297, 0xF5C3},{0x5298, 0xF5C2},{0x5299, 0xF7D1},{0x529B, 0xA44F},{0x529F, 0xA55C},
- {0x52A0, 0xA55B},{0x52A3, 0xA648},{0x52A6, 0xC9C0},{0x52A9, 0xA755},{0x52AA, 0xA756},{0x52AB, 0xA754},{0x52AC, 0xA757},{0x52AD, 0xCA6F},
- {0x52AE, 0xCA70},{0x52BB, 0xA8F1},{0x52BC, 0xCBD5},{0x52BE, 0xA8F0},{0x52C0, 0xCDF2},{0x52C1, 0xAB6C},{0x52C2, 0xCDF3},{0x52C3, 0xAB6B},
- {0x52C7, 0xAB69},{0x52C9, 0xAB6A},{0x52CD, 0xD0ED},{0x52D2, 0xB0C7},{0x52D3, 0xD46E},{0x52D5, 0xB0CA},{0x52D6, 0xD46D},{0x52D7, 0xB1E5},
- {0x52D8, 0xB0C9},{0x52D9, 0xB0C8},{0x52DB, 0xB3D4},{0x52DD, 0xB3D3},{0x52DE, 0xB3D2},{0x52DF, 0xB6D2},{0x52E2, 0xB6D5},{0x52E3, 0xB6D6},
- {0x52E4, 0xB6D4},{0x52E6, 0xB6D3},{0x52E9, 0xE143},{0x52EB, 0xE144},{0x52EF, 0xE4F5},{0x52F0, 0xBC45},{0x52F1, 0xE4F4},{0x52F3, 0xBEB1},
- {0x52F4, 0xECBF},{0x52F5, 0xC079},{0x52F7, 0xF1EE},{0x52F8, 0xC455},{0x52FA, 0xA463},{0x52FB, 0xA4C3},{0x52FC, 0xC956},{0x52FE, 0xA4C4},
- {0x52FF, 0xA4C5},{0x5305, 0xA55D},{0x5306, 0xA55E},{0x5308, 0xA649},{0x5309, 0xCA71},{0x530A, 0xCBD6},{0x530B, 0xCBD7},{0x530D, 0xAB6D},
- {0x530E, 0xD0EE},{0x530F, 0xB0CC},{0x5310, 0xB0CB},{0x5311, 0xD863},{0x5312, 0xD862},{0x5315, 0xA450},{0x5316, 0xA4C6},{0x5317, 0xA55F},
- {0x5319, 0xB0CD},{0x531A, 0xC943},{0x531C, 0xC96C},{0x531D, 0xA560},{0x531F, 0xC9C2},{0x5320, 0xA64B},{0x5321, 0xA64A},{0x5322, 0xC9C1},
- {0x5323, 0xA758},{0x532A, 0xADEA},{0x532D, 0xD46F},{0x532F, 0xB6D7},{0x5330, 0xE145},{0x5331, 0xB9BC},{0x5334, 0xE8FA},{0x5337, 0xF3FD},
- {0x5339, 0xA4C7},{0x533C, 0xCBD8},{0x533D, 0xCDF4},{0x533E, 0xB0D0},{0x533F, 0xB0CE},{0x5340, 0xB0CF},{0x5341, 0xA451},{0x5343, 0xA464},
- {0x5344, 0xA2CD},{0x5345, 0xA4CA},{0x5347, 0xA4C9},{0x5348, 0xA4C8},{0x5349, 0xA563},{0x534A, 0xA562},{0x534C, 0xC96D},{0x534D, 0xC9C3},
- {0x5351, 0xA8F5},{0x5352, 0xA8F2},{0x5353, 0xA8F4},{0x5354, 0xA8F3},{0x5357, 0xAB6E},{0x535A, 0xB3D5},{0x535C, 0xA452},{0x535E, 0xA4CB},
- {0x5360, 0xA565},{0x5361, 0xA564},{0x5363, 0xCA72},{0x5366, 0xA8F6},{0x536C, 0xC957},{0x536E, 0xA567},{0x536F, 0xA566},{0x5370, 0xA64C},
- {0x5371, 0xA64D},{0x5372, 0xCA73},{0x5373, 0xA759},{0x5375, 0xA75A},{0x5377, 0xA8F7},{0x5378, 0xA8F8},{0x5379, 0xA8F9},{0x537B, 0xAB6F},
- {0x537C, 0xCDF5},{0x537F, 0xADEB},{0x5382, 0xC944},{0x5384, 0xA4CC},{0x538A, 0xC9C4},{0x538E, 0xCA74},{0x538F, 0xCA75},{0x5392, 0xCBD9},
- {0x5394, 0xCBDA},{0x5396, 0xCDF7},{0x5397, 0xCDF6},{0x5398, 0xCDF9},{0x5399, 0xCDF8},{0x539A, 0xAB70},{0x539C, 0xD470},{0x539D, 0xADED},
- {0x539E, 0xD0EF},{0x539F, 0xADEC},{0x53A4, 0xD864},{0x53A5, 0xB3D6},{0x53A7, 0xD865},{0x53AC, 0xE146},{0x53AD, 0xB9BD},{0x53B2, 0xBC46},
- {0x53B4, 0xF1EF},{0x53B9, 0xC958},{0x53BB, 0xA568},{0x53C3, 0xB0D1},{0x53C8, 0xA453},{0x53C9, 0xA465},{0x53CA, 0xA4CE},{0x53CB, 0xA4CD},
- {0x53CD, 0xA4CF},{0x53D4, 0xA8FB},{0x53D6, 0xA8FA},{0x53D7, 0xA8FC},{0x53DB, 0xAB71},{0x53DF, 0xADEE},{0x53E1, 0xE8FB},{0x53E2, 0xC24F},
- {0x53E3, 0xA466},{0x53E4, 0xA56A},{0x53E5, 0xA579},{0x53E6, 0xA574},{0x53E8, 0xA56F},{0x53E9, 0xA56E},{0x53EA, 0xA575},{0x53EB, 0xA573},
- {0x53EC, 0xA56C},{0x53ED, 0xA57A},{0x53EE, 0xA56D},{0x53EF, 0xA569},{0x53F0, 0xA578},{0x53F1, 0xA577},{0x53F2, 0xA576},{0x53F3, 0xA56B},
- {0x53F5, 0xA572},{0x53F8, 0xA571},{0x53FB, 0xA57B},{0x53FC, 0xA570},{0x5401, 0xA653},{0x5403, 0xA659},{0x5404, 0xA655},{0x5406, 0xA65B},
- {0x5407, 0xC9C5},{0x5408, 0xA658},{0x5409, 0xA64E},{0x540A, 0xA651},{0x540B, 0xA654},{0x540C, 0xA650},{0x540D, 0xA657},{0x540E, 0xA65A},
- {0x540F, 0xA64F},{0x5410, 0xA652},{0x5411, 0xA656},{0x5412, 0xA65C},{0x5418, 0xCA7E},{0x5419, 0xCA7B},{0x541B, 0xA767},{0x541C, 0xCA7C},
- {0x541D, 0xA75B},{0x541E, 0xA75D},{0x541F, 0xA775},{0x5420, 0xA770},{0x5424, 0xCAA5},{0x5425, 0xCA7D},{0x5426, 0xA75F},{0x5427, 0xA761},
- {0x5428, 0xCAA4},{0x5429, 0xA768},{0x542A, 0xCA78},{0x542B, 0xA774},{0x542C, 0xA776},{0x542D, 0xA75C},{0x542E, 0xA76D},{0x5430, 0xCA76},
- {0x5431, 0xA773},{0x5433, 0xA764},{0x5435, 0xA76E},{0x5436, 0xA76F},{0x5437, 0xCA77},{0x5438, 0xA76C},{0x5439, 0xA76A},{0x543B, 0xA76B},
- {0x543C, 0xA771},{0x543D, 0xCAA1},{0x543E, 0xA75E},{0x5440, 0xA772},{0x5441, 0xCAA3},{0x5442, 0xA766},{0x5443, 0xA763},{0x5445, 0xCA7A},
- {0x5446, 0xA762},{0x5447, 0xCAA6},{0x5448, 0xA765},{0x544A, 0xA769},{0x544E, 0xA760},{0x544F, 0xCAA2},{0x5454, 0xCA79},{0x5460, 0xCBEB},
- {0x5461, 0xCBEA},{0x5462, 0xA94F},{0x5463, 0xCBED},{0x5464, 0xCBEF},{0x5465, 0xCBE4},{0x5466, 0xCBE7},{0x5467, 0xCBEE},{0x5468, 0xA950},
- {0x546B, 0xCBE1},{0x546C, 0xCBE5},{0x546F, 0xCBE9},{0x5470, 0xCE49},{0x5471, 0xA94B},{0x5472, 0xCE4D},{0x5473, 0xA8FD},{0x5474, 0xCBE6},
- {0x5475, 0xA8FE},{0x5476, 0xA94C},{0x5477, 0xA945},{0x5478, 0xA941},{0x547A, 0xCBE2},{0x547B, 0xA944},{0x547C, 0xA949},{0x547D, 0xA952},
- {0x547E, 0xCBE3},{0x547F, 0xCBDC},{0x5480, 0xA943},{0x5481, 0xCBDD},{0x5482, 0xCBDF},{0x5484, 0xA946},{0x5486, 0xA948},{0x5487, 0xCBDB},
- {0x5488, 0xCBE0},{0x548B, 0xA951},{0x548C, 0xA94D},{0x548D, 0xCBE8},{0x548E, 0xA953},{0x5490, 0xA94A},{0x5491, 0xCBDE},{0x5492, 0xA947},
- {0x5495, 0xA942},{0x5496, 0xA940},{0x5498, 0xCBEC},{0x549A, 0xA94E},{0x54A0, 0xCE48},{0x54A1, 0xCDFB},{0x54A2, 0xCE4B},{0x54A5, 0xCDFD},
- {0x54A6, 0xAB78},{0x54A7, 0xABA8},{0x54A8, 0xAB74},{0x54A9, 0xABA7},{0x54AA, 0xAB7D},{0x54AB, 0xABA4},{0x54AC, 0xAB72},{0x54AD, 0xCDFC},
- {0x54AE, 0xCE43},{0x54AF, 0xABA3},{0x54B0, 0xCE4F},{0x54B1, 0xABA5},{0x54B3, 0xAB79},{0x54B6, 0xCE45},{0x54B7, 0xCE42},{0x54B8, 0xAB77},
- {0x54BA, 0xCDFA},{0x54BB, 0xABA6},{0x54BC, 0xCE4A},{0x54BD, 0xAB7C},{0x54BE, 0xCE4C},{0x54BF, 0xABA9},{0x54C0, 0xAB73},{0x54C1, 0xAB7E},
- {0x54C2, 0xAB7B},{0x54C3, 0xCE40},{0x54C4, 0xABA1},{0x54C5, 0xCE46},{0x54C6, 0xCE47},{0x54C7, 0xAB7A},{0x54C8, 0xABA2},{0x54C9, 0xAB76},
- {0x54CE, 0xAB75},{0x54CF, 0xCDFE},{0x54D6, 0xCE44},{0x54DE, 0xCE4E},{0x54E0, 0xD144},{0x54E1, 0xADFB},{0x54E2, 0xD0F1},{0x54E4, 0xD0F6},
- {0x54E5, 0xADF4},{0x54E6, 0xAE40},{0x54E7, 0xD0F4},{0x54E8, 0xADEF},{0x54E9, 0xADF9},{0x54EA, 0xADFE},{0x54EB, 0xD0FB},{0x54ED, 0xADFA},
- {0x54EE, 0xADFD},{0x54F1, 0xD0FE},{0x54F2, 0xADF5},{0x54F3, 0xD0F5},{0x54F7, 0xD142},{0x54F8, 0xD143},{0x54FA, 0xADF7},{0x54FB, 0xD141},
- {0x54FC, 0xADF3},{0x54FD, 0xAE43},{0x54FF, 0xD0F8},{0x5501, 0xADF1},{0x5503, 0xD146},{0x5504, 0xD0F9},{0x5505, 0xD0FD},{0x5506, 0xADF6},
- {0x5507, 0xAE42},{0x5508, 0xD0FA},{0x5509, 0xADFC},{0x550A, 0xD140},{0x550B, 0xD147},{0x550C, 0xD4A1},{0x550E, 0xD145},{0x550F, 0xAE44},
- {0x5510, 0xADF0},{0x5511, 0xD0FC},{0x5512, 0xD0F3},{0x5514, 0xADF8},{0x5517, 0xD0F2},{0x551A, 0xD0F7},{0x5526, 0xD0F0},{0x5527, 0xAE41},
- {0x552A, 0xD477},{0x552C, 0xB0E4},{0x552D, 0xD4A7},{0x552E, 0xB0E2},{0x552F, 0xB0DF},{0x5530, 0xD47C},{0x5531, 0xB0DB},{0x5532, 0xD4A2},
- {0x5533, 0xB0E6},{0x5534, 0xD476},{0x5535, 0xD47B},{0x5536, 0xD47A},{0x5537, 0xADF2},{0x5538, 0xB0E1},{0x5539, 0xD4A5},{0x553B, 0xD4A8},
- {0x553C, 0xD473},{0x553E, 0xB3E8},{0x5540, 0xD4A9},{0x5541, 0xB0E7},{0x5543, 0xB0D9},{0x5544, 0xB0D6},{0x5545, 0xD47E},{0x5546, 0xB0D3},
- {0x5548, 0xD4A6},{0x554A, 0xB0DA},{0x554B, 0xD4AA},{0x554D, 0xD474},{0x554E, 0xD4A4},{0x554F, 0xB0DD},{0x5550, 0xD475},{0x5551, 0xD478},
- {0x5552, 0xD47D},{0x5555, 0xB0DE},{0x5556, 0xB0DC},{0x5557, 0xB0E8},{0x555C, 0xB0E3},{0x555E, 0xB0D7},{0x555F, 0xB1D2},{0x5561, 0xB0D8},
- {0x5562, 0xD479},{0x5563, 0xB0E5},{0x5564, 0xB0E0},{0x5565, 0xD4A3},{0x5566, 0xB0D5},{0x556A, 0xB0D4},{0x5575, 0xD471},{0x5576, 0xD472},
- {0x5577, 0xD86A},{0x557B, 0xB3D7},{0x557C, 0xB3DA},{0x557D, 0xD875},{0x557E, 0xB3EE},{0x557F, 0xD878},{0x5580, 0xB3D8},{0x5581, 0xD871},
- {0x5582, 0xB3DE},{0x5583, 0xB3E4},{0x5584, 0xB5BD},{0x5587, 0xB3E2},{0x5588, 0xD86E},{0x5589, 0xB3EF},{0x558A, 0xB3DB},{0x558B, 0xB3E3},
- {0x558C, 0xD876},{0x558D, 0xDCD7},{0x558E, 0xD87B},{0x558F, 0xD86F},{0x5591, 0xD866},{0x5592, 0xD873},{0x5593, 0xD86D},{0x5594, 0xB3E1},
- {0x5595, 0xD879},{0x5598, 0xB3DD},{0x5599, 0xB3F1},{0x559A, 0xB3EA},{0x559C, 0xB3DF},{0x559D, 0xB3DC},{0x559F, 0xB3E7},{0x55A1, 0xD87A},
- {0x55A2, 0xD86C},{0x55A3, 0xD872},{0x55A4, 0xD874},{0x55A5, 0xD868},{0x55A6, 0xD877},{0x55A7, 0xB3D9},{0x55A8, 0xD867},{0x55AA, 0xB3E0},
- {0x55AB, 0xB3F0},{0x55AC, 0xB3EC},{0x55AD, 0xD869},{0x55AE, 0xB3E6},{0x55B1, 0xB3ED},{0x55B2, 0xB3E9},{0x55B3, 0xB3E5},{0x55B5, 0xD870},
- {0x55BB, 0xB3EB},{0x55BF, 0xDCD5},{0x55C0, 0xDCD1},{0x55C2, 0xDCE0},{0x55C3, 0xDCCA},{0x55C4, 0xDCD3},{0x55C5, 0xB6E5},{0x55C6, 0xB6E6},
- {0x55C7, 0xB6DE},{0x55C8, 0xDCDC},{0x55C9, 0xB6E8},{0x55CA, 0xDCCF},{0x55CB, 0xDCCE},{0x55CC, 0xDCCC},{0x55CD, 0xDCDE},{0x55CE, 0xB6DC},
- {0x55CF, 0xDCD8},{0x55D0, 0xDCCD},{0x55D1, 0xB6DF},{0x55D2, 0xDCD6},{0x55D3, 0xB6DA},{0x55D4, 0xDCD2},{0x55D5, 0xDCD9},{0x55D6, 0xDCDB},
- {0x55D9, 0xDCDF},{0x55DA, 0xB6E3},{0x55DB, 0xDCCB},{0x55DC, 0xB6DD},{0x55DD, 0xDCD0},{0x55DF, 0xB6D8},{0x55E1, 0xB6E4},{0x55E2, 0xDCDA},
- {0x55E3, 0xB6E0},{0x55E4, 0xB6E1},{0x55E5, 0xB6E7},{0x55E6, 0xB6DB},{0x55E7, 0xA25F},{0x55E8, 0xB6D9},{0x55E9, 0xDCD4},{0x55EF, 0xB6E2},
- {0x55F2, 0xDCDD},{0x55F6, 0xB9CD},{0x55F7, 0xB9C8},{0x55F9, 0xE155},{0x55FA, 0xE151},{0x55FC, 0xE14B},{0x55FD, 0xB9C2},{0x55FE, 0xB9BE},
- {0x55FF, 0xE154},{0x5600, 0xB9BF},{0x5601, 0xE14E},{0x5602, 0xE150},{0x5604, 0xE153},{0x5606, 0xB9C4},{0x5608, 0xB9CB},{0x5609, 0xB9C5},
- {0x560C, 0xE149},{0x560D, 0xB9C6},{0x560E, 0xB9C7},{0x560F, 0xE14C},{0x5610, 0xB9CC},{0x5612, 0xE14A},{0x5613, 0xE14F},{0x5614, 0xB9C3},
- {0x5615, 0xE148},{0x5616, 0xB9C9},{0x5617, 0xB9C1},{0x561B, 0xB9C0},{0x561C, 0xE14D},{0x561D, 0xE152},{0x561F, 0xB9CA},{0x5627, 0xE147},
- {0x5629, 0xBC4D},{0x562A, 0xE547},{0x562C, 0xE544},{0x562E, 0xBC47},{0x562F, 0xBC53},{0x5630, 0xBC54},{0x5632, 0xBC4A},{0x5633, 0xE542},
- {0x5634, 0xBC4C},{0x5635, 0xE4F9},{0x5636, 0xBC52},{0x5638, 0xE546},{0x5639, 0xBC49},{0x563A, 0xE548},{0x563B, 0xBC48},{0x563D, 0xE543},
- {0x563E, 0xE545},{0x563F, 0xBC4B},{0x5640, 0xE541},{0x5641, 0xE4FA},{0x5642, 0xE4F7},{0x5645, 0xD86B},{0x5646, 0xE4FD},{0x5648, 0xE4F6},
- {0x5649, 0xE4FC},{0x564A, 0xE4FB},{0x564C, 0xE4F8},{0x564E, 0xBC4F},{0x5653, 0xBC4E},{0x5657, 0xBC50},{0x5658, 0xE4FE},{0x5659, 0xBEB2},
- {0x565A, 0xE540},{0x565E, 0xE945},{0x5660, 0xE8FD},{0x5662, 0xBEBE},{0x5663, 0xE942},{0x5664, 0xBEB6},{0x5665, 0xBEBA},{0x5666, 0xE941},
- {0x5668, 0xBEB9},{0x5669, 0xBEB5},{0x566A, 0xBEB8},{0x566B, 0xBEB3},{0x566C, 0xBEBD},{0x566D, 0xE943},{0x566E, 0xE8FE},{0x566F, 0xBEBC},
- {0x5670, 0xE8FC},{0x5671, 0xBEBB},{0x5672, 0xE944},{0x5673, 0xE940},{0x5674, 0xBC51},{0x5676, 0xBEBF},{0x5677, 0xE946},{0x5678, 0xBEB7},
- {0x5679, 0xBEB4},{0x567E, 0xECC6},{0x567F, 0xECC8},{0x5680, 0xC07B},{0x5681, 0xECC9},{0x5682, 0xECC7},{0x5683, 0xECC5},{0x5684, 0xECC4},
- {0x5685, 0xC07D},{0x5686, 0xECC3},{0x5687, 0xC07E},{0x568C, 0xECC1},{0x568D, 0xECC2},{0x568E, 0xC07A},{0x568F, 0xC0A1},{0x5690, 0xC07C},
- {0x5693, 0xECC0},{0x5695, 0xC250},{0x5697, 0xEFBC},{0x5698, 0xEFBA},{0x5699, 0xEFBF},{0x569A, 0xEFBD},{0x569C, 0xEFBB},{0x569D, 0xEFBE},
- {0x56A5, 0xC360},{0x56A6, 0xF1F2},{0x56A7, 0xF1F3},{0x56A8, 0xC456},{0x56AA, 0xF1F4},{0x56AB, 0xF1F0},{0x56AC, 0xF1F5},{0x56AD, 0xF1F1},
- {0x56AE, 0xC251},{0x56B2, 0xF3FE},{0x56B3, 0xF441},{0x56B4, 0xC459},{0x56B5, 0xF440},{0x56B6, 0xC458},{0x56B7, 0xC457},{0x56BC, 0xC45A},
- {0x56BD, 0xF5C5},{0x56BE, 0xF5C6},{0x56C0, 0xC4DA},{0x56C1, 0xC4D9},{0x56C2, 0xC4DB},{0x56C3, 0xF5C4},{0x56C5, 0xF6D8},{0x56C6, 0xF6D7},
- {0x56C8, 0xC56D},{0x56C9, 0xC56F},{0x56CA, 0xC56E},{0x56CB, 0xF6D9},{0x56CC, 0xC5C8},{0x56CD, 0xF8A6},{0x56D1, 0xC5F1},{0x56D3, 0xF8A5},
- {0x56D4, 0xF8EE},{0x56D7, 0xC949},{0x56DA, 0xA57D},{0x56DB, 0xA57C},{0x56DD, 0xA65F},{0x56DE, 0xA65E},{0x56DF, 0xC9C7},{0x56E0, 0xA65D},
- {0x56E1, 0xC9C6},{0x56E4, 0xA779},{0x56E5, 0xCAA9},{0x56E7, 0xCAA8},{0x56EA, 0xA777},{0x56EB, 0xA77A},{0x56EE, 0xCAA7},{0x56F0, 0xA778},
- {0x56F7, 0xCBF0},{0x56F9, 0xCBF1},{0x56FA, 0xA954},{0x56FF, 0xABAA},{0x5701, 0xD148},{0x5702, 0xD149},{0x5703, 0xAE45},{0x5704, 0xAE46},
- {0x5707, 0xD4AC},{0x5708, 0xB0E9},{0x5709, 0xB0EB},{0x570A, 0xD4AB},{0x570B, 0xB0EA},{0x570C, 0xD87C},{0x570D, 0xB3F2},{0x5712, 0xB6E9},
- {0x5713, 0xB6EA},{0x5714, 0xDCE1},{0x5716, 0xB9CF},{0x5718, 0xB9CE},{0x571A, 0xE549},{0x571B, 0xE948},{0x571C, 0xE947},{0x571E, 0xF96B},
- {0x571F, 0xA467},{0x5720, 0xC959},{0x5722, 0xC96E},{0x5723, 0xC96F},{0x5728, 0xA662},{0x5729, 0xA666},{0x572A, 0xC9C9},{0x572C, 0xA664},
- {0x572D, 0xA663},{0x572E, 0xC9C8},{0x572F, 0xA665},{0x5730, 0xA661},{0x5733, 0xA660},{0x5734, 0xC9CA},{0x573B, 0xA7A6},{0x573E, 0xA7A3},
- {0x5740, 0xA77D},{0x5741, 0xCAAA},{0x5745, 0xCAAB},{0x5747, 0xA7A1},{0x5749, 0xCAAD},{0x574A, 0xA77B},{0x574B, 0xCAAE},{0x574C, 0xCAAC},
- {0x574D, 0xA77E},{0x574E, 0xA7A2},{0x574F, 0xA7A5},{0x5750, 0xA7A4},{0x5751, 0xA77C},{0x5752, 0xCAAF},{0x5761, 0xA959},{0x5762, 0xCBFE},
- {0x5764, 0xA95B},{0x5766, 0xA95A},{0x5768, 0xCC40},{0x5769, 0xA958},{0x576A, 0xA957},{0x576B, 0xCBF5},{0x576D, 0xCBF4},{0x576F, 0xCBF2},
- {0x5770, 0xCBF7},{0x5771, 0xCBF6},{0x5772, 0xCBF3},{0x5773, 0xCBFC},{0x5774, 0xCBFD},{0x5775, 0xCBFA},{0x5776, 0xCBF8},{0x5777, 0xA956},
- {0x577B, 0xCBFB},{0x577C, 0xA95C},{0x577D, 0xCC41},{0x5780, 0xCBF9},{0x5782, 0xABAB},{0x5783, 0xA955},{0x578B, 0xABAC},{0x578C, 0xCE54},
- {0x578F, 0xCE5A},{0x5793, 0xABB2},{0x5794, 0xCE58},{0x5795, 0xCE5E},{0x5797, 0xCE55},{0x5798, 0xCE59},{0x5799, 0xCE5B},{0x579A, 0xCE5D},
- {0x579B, 0xCE57},{0x579D, 0xCE56},{0x579E, 0xCE51},{0x579F, 0xCE52},{0x57A0, 0xABAD},{0x57A2, 0xABAF},{0x57A3, 0xABAE},{0x57A4, 0xCE53},
- {0x57A5, 0xCE5C},{0x57AE, 0xABB1},{0x57B5, 0xCE50},{0x57B6, 0xD153},{0x57B8, 0xD152},{0x57B9, 0xD157},{0x57BA, 0xD14E},{0x57BC, 0xD151},
- {0x57BD, 0xD150},{0x57BF, 0xD154},{0x57C1, 0xD158},{0x57C2, 0xAE47},{0x57C3, 0xAE4A},{0x57C6, 0xD14F},{0x57C7, 0xD155},{0x57CB, 0xAE49},
- {0x57CC, 0xD14A},{0x57CE, 0xABB0},{0x57CF, 0xD4BA},{0x57D0, 0xD156},{0x57D2, 0xD14D},{0x57D4, 0xAE48},{0x57D5, 0xD14C},{0x57DC, 0xD4B1},
- {0x57DF, 0xB0EC},{0x57E0, 0xB0F0},{0x57E1, 0xD4C1},{0x57E2, 0xD4AF},{0x57E3, 0xD4BD},{0x57E4, 0xB0F1},{0x57E5, 0xD4BF},{0x57E7, 0xD4C5},
- {0x57E9, 0xD4C9},{0x57EC, 0xD4C0},{0x57ED, 0xD4B4},{0x57EE, 0xD4BC},{0x57F0, 0xD4CA},{0x57F1, 0xD4C8},{0x57F2, 0xD4BE},{0x57F3, 0xD4B9},
- {0x57F4, 0xD4B2},{0x57F5, 0xD8A6},{0x57F6, 0xD4B0},{0x57F7, 0xB0F5},{0x57F8, 0xD4B7},{0x57F9, 0xB0F6},{0x57FA, 0xB0F2},{0x57FB, 0xD4AD},
- {0x57FC, 0xD4C3},{0x57FD, 0xD4B5},{0x5800, 0xD4B3},{0x5801, 0xD4C6},{0x5802, 0xB0F3},{0x5804, 0xD4CC},{0x5805, 0xB0ED},{0x5806, 0xB0EF},
- {0x5807, 0xD4BB},{0x5808, 0xD4B6},{0x5809, 0xAE4B},{0x580A, 0xB0EE},{0x580B, 0xD4B8},{0x580C, 0xD4C7},{0x580D, 0xD4CB},{0x580E, 0xD4C2},
- {0x5810, 0xD4C4},{0x5814, 0xD4AE},{0x5819, 0xD8A1},{0x581B, 0xD8AA},{0x581C, 0xD8A9},{0x581D, 0xB3FA},{0x581E, 0xD8A2},{0x5820, 0xB3FB},
- {0x5821, 0xB3F9},{0x5823, 0xD8A4},{0x5824, 0xB3F6},{0x5825, 0xD8A8},{0x5827, 0xD8A3},{0x5828, 0xD8A5},{0x5829, 0xD87D},{0x582A, 0xB3F4},
- {0x582C, 0xD8B2},{0x582D, 0xD8B1},{0x582E, 0xD8AE},{0x582F, 0xB3F3},{0x5830, 0xB3F7},{0x5831, 0xB3F8},{0x5832, 0xD14B},{0x5833, 0xD8AB},
- {0x5834, 0xB3F5},{0x5835, 0xB0F4},{0x5836, 0xD8AD},{0x5837, 0xD87E},{0x5838, 0xD8B0},{0x5839, 0xD8AF},{0x583B, 0xD8B3},{0x583D, 0xDCEF},
- {0x583F, 0xD8AC},{0x5848, 0xD8A7},{0x5849, 0xDCE7},{0x584A, 0xB6F4},{0x584B, 0xB6F7},{0x584C, 0xB6F2},{0x584D, 0xDCE6},{0x584E, 0xDCEA},
- {0x584F, 0xDCE5},{0x5851, 0xB6EC},{0x5852, 0xB6F6},{0x5853, 0xDCE2},{0x5854, 0xB6F0},{0x5855, 0xDCE9},{0x5857, 0xB6EE},{0x5858, 0xB6ED},
- {0x5859, 0xDCEC},{0x585A, 0xB6EF},{0x585B, 0xDCEE},{0x585D, 0xDCEB},{0x585E, 0xB6EB},{0x5862, 0xB6F5},{0x5863, 0xDCF0},{0x5864, 0xDCE4},
- {0x5865, 0xDCED},{0x5868, 0xDCE3},{0x586B, 0xB6F1},{0x586D, 0xB6F3},{0x586F, 0xDCE8},{0x5871, 0xDCF1},{0x5874, 0xE15D},{0x5875, 0xB9D0},
- {0x5876, 0xE163},{0x5879, 0xB9D5},{0x587A, 0xE15F},{0x587B, 0xE166},{0x587C, 0xE157},{0x587D, 0xB9D7},{0x587E, 0xB9D1},{0x587F, 0xE15C},
- {0x5880, 0xBC55},{0x5881, 0xE15B},{0x5882, 0xE164},{0x5883, 0xB9D2},{0x5885, 0xB9D6},{0x5886, 0xE15A},{0x5887, 0xE160},{0x5888, 0xE165},
- {0x5889, 0xE156},{0x588A, 0xB9D4},{0x588B, 0xE15E},{0x588E, 0xE162},{0x588F, 0xE168},{0x5890, 0xE158},{0x5891, 0xE161},{0x5893, 0xB9D3},
- {0x5894, 0xE167},{0x5898, 0xE159},{0x589C, 0xBC59},{0x589D, 0xE54B},{0x589E, 0xBC57},{0x589F, 0xBC56},{0x58A0, 0xE54D},{0x58A1, 0xE552},
- {0x58A3, 0xE54E},{0x58A5, 0xE551},{0x58A6, 0xBC5C},{0x58A8, 0xBEA5},{0x58A9, 0xBC5B},{0x58AB, 0xE54A},{0x58AC, 0xE550},{0x58AE, 0xBC5A},
- {0x58AF, 0xE54F},{0x58B1, 0xE54C},{0x58B3, 0xBC58},{0x58BA, 0xE94D},{0x58BC, 0xE94F},{0x58BD, 0xE94A},{0x58BE, 0xBEC1},{0x58BF, 0xE94C},
- {0x58C1, 0xBEC0},{0x58C2, 0xE94E},{0x58C5, 0xBEC3},{0x58C6, 0xE950},{0x58C7, 0xBEC2},{0x58C8, 0xE949},{0x58C9, 0xE94B},{0x58CE, 0xC0A5},
- {0x58CF, 0xECCC},{0x58D1, 0xC0A4},{0x58D2, 0xECCD},{0x58D3, 0xC0A3},{0x58D4, 0xECCB},{0x58D5, 0xC0A2},{0x58D6, 0xECCA},{0x58D8, 0xC253},
- {0x58D9, 0xC252},{0x58DA, 0xF1F6},{0x58DB, 0xF1F8},{0x58DD, 0xF1F7},{0x58DE, 0xC361},{0x58DF, 0xC362},{0x58E2, 0xC363},{0x58E3, 0xF442},
- {0x58E4, 0xC45B},{0x58E7, 0xF7D3},{0x58E8, 0xF7D2},{0x58E9, 0xC5F2},{0x58EB, 0xA468},{0x58EC, 0xA4D0},{0x58EF, 0xA7A7},{0x58F4, 0xCE5F},
- {0x58F9, 0xB3FC},{0x58FA, 0xB3FD},{0x58FC, 0xDCF2},{0x58FD, 0xB9D8},{0x58FE, 0xE169},{0x58FF, 0xE553},{0x5903, 0xC95A},{0x5906, 0xCAB0},
- {0x590C, 0xCC42},{0x590D, 0xCE60},{0x590E, 0xD159},{0x590F, 0xAE4C},{0x5912, 0xF1F9},{0x5914, 0xC4DC},{0x5915, 0xA469},{0x5916, 0xA57E},
- {0x5917, 0xC970},{0x5919, 0xA667},{0x591A, 0xA668},{0x591C, 0xA95D},{0x5920, 0xB0F7},{0x5922, 0xB9DA},{0x5924, 0xB9DB},{0x5925, 0xB9D9},
- {0x5927, 0xA46A},{0x5929, 0xA4D1},{0x592A, 0xA4D3},{0x592B, 0xA4D2},{0x592C, 0xC95B},{0x592D, 0xA4D4},{0x592E, 0xA5A1},{0x592F, 0xC971},
- {0x5931, 0xA5A2},{0x5937, 0xA669},{0x5938, 0xA66A},{0x593C, 0xC9CB},{0x593E, 0xA7A8},{0x5940, 0xCAB1},{0x5944, 0xA961},{0x5945, 0xCC43},
- {0x5947, 0xA95F},{0x5948, 0xA960},{0x5949, 0xA95E},{0x594A, 0xD15A},{0x594E, 0xABB6},{0x594F, 0xABB5},{0x5950, 0xABB7},{0x5951, 0xABB4},
- {0x5953, 0xCE61},{0x5954, 0xA962},{0x5955, 0xABB3},{0x5957, 0xAE4D},{0x5958, 0xAE4E},{0x595A, 0xAE4F},{0x595C, 0xD4CD},{0x5960, 0xB3FE},
- {0x5961, 0xD8B4},{0x5962, 0xB0F8},{0x5967, 0xB6F8},{0x5969, 0xB9DD},{0x596A, 0xB9DC},{0x596B, 0xE16A},{0x596D, 0xBC5D},{0x596E, 0xBEC4},
- {0x5970, 0xEFC0},{0x5971, 0xF6DA},{0x5972, 0xF7D4},{0x5973, 0xA46B},{0x5974, 0xA5A3},{0x5976, 0xA5A4},{0x5977, 0xC9D1},{0x5978, 0xA66C},
- {0x5979, 0xA66F},{0x597B, 0xC9CF},{0x597C, 0xC9CD},{0x597D, 0xA66E},{0x597E, 0xC9D0},{0x597F, 0xC9D2},{0x5980, 0xC9CC},{0x5981, 0xA671},
- {0x5982, 0xA670},{0x5983, 0xA66D},{0x5984, 0xA66B},{0x5985, 0xC9CE},{0x598A, 0xA7B3},{0x598D, 0xA7B0},{0x598E, 0xCAB6},{0x598F, 0xCAB9},
- {0x5990, 0xCAB8},{0x5992, 0xA7AA},{0x5993, 0xA7B2},{0x5996, 0xA7AF},{0x5997, 0xCAB5},{0x5998, 0xCAB3},{0x5999, 0xA7AE},{0x599D, 0xA7A9},
- {0x599E, 0xA7AC},{0x59A0, 0xCAB4},{0x59A1, 0xCABB},{0x59A2, 0xCAB7},{0x59A3, 0xA7AD},{0x59A4, 0xA7B1},{0x59A5, 0xA7B4},{0x59A6, 0xCAB2},
- {0x59A7, 0xCABA},{0x59A8, 0xA7AB},{0x59AE, 0xA967},{0x59AF, 0xA96F},{0x59B1, 0xCC4F},{0x59B2, 0xCC48},{0x59B3, 0xA970},{0x59B4, 0xCC53},
- {0x59B5, 0xCC44},{0x59B6, 0xCC4B},{0x59B9, 0xA966},{0x59BA, 0xCC45},{0x59BB, 0xA964},{0x59BC, 0xCC4C},{0x59BD, 0xCC50},{0x59BE, 0xA963},
- {0x59C0, 0xCC51},{0x59C1, 0xCC4A},{0x59C3, 0xCC4D},{0x59C5, 0xA972},{0x59C6, 0xA969},{0x59C7, 0xCC54},{0x59C8, 0xCC52},{0x59CA, 0xA96E},
- {0x59CB, 0xA96C},{0x59CC, 0xCC49},{0x59CD, 0xA96B},{0x59CE, 0xCC47},{0x59CF, 0xCC46},{0x59D0, 0xA96A},{0x59D1, 0xA968},{0x59D2, 0xA971},
- {0x59D3, 0xA96D},{0x59D4, 0xA965},{0x59D6, 0xCC4E},{0x59D8, 0xABB9},{0x59DA, 0xABC0},{0x59DB, 0xCE6F},{0x59DC, 0xABB8},{0x59DD, 0xCE67},
- {0x59DE, 0xCE63},{0x59E0, 0xCE73},{0x59E1, 0xCE62},{0x59E3, 0xABBB},{0x59E4, 0xCE6C},{0x59E5, 0xABBE},{0x59E6, 0xABC1},{0x59E8, 0xABBC},
- {0x59E9, 0xCE70},{0x59EA, 0xABBF},{0x59EC, 0xAE56},{0x59ED, 0xCE76},{0x59EE, 0xCE64},{0x59F1, 0xCE66},{0x59F2, 0xCE6D},{0x59F3, 0xCE71},
- {0x59F4, 0xCE75},{0x59F5, 0xCE72},{0x59F6, 0xCE6B},{0x59F7, 0xCE6E},{0x59FA, 0xCE68},{0x59FB, 0xABC3},{0x59FC, 0xCE6A},{0x59FD, 0xCE69},
- {0x59FE, 0xCE74},{0x59FF, 0xABBA},{0x5A00, 0xCE65},{0x5A01, 0xABC2},{0x5A03, 0xABBD},{0x5A09, 0xAE5C},{0x5A0A, 0xD162},{0x5A0C, 0xAE5B},
- {0x5A0F, 0xD160},{0x5A11, 0xAE50},{0x5A13, 0xAE55},{0x5A15, 0xD15F},{0x5A16, 0xD15C},{0x5A17, 0xD161},{0x5A18, 0xAE51},{0x5A19, 0xD15B},
- {0x5A1B, 0xAE54},{0x5A1C, 0xAE52},{0x5A1E, 0xD163},{0x5A1F, 0xAE53},{0x5A20, 0xAE57},{0x5A23, 0xAE58},{0x5A25, 0xAE5A},{0x5A29, 0xAE59},
- {0x5A2D, 0xD15D},{0x5A2E, 0xD15E},{0x5A33, 0xD164},{0x5A35, 0xD4D4},{0x5A36, 0xB0F9},{0x5A37, 0xD8C2},{0x5A38, 0xD4D3},{0x5A39, 0xD4E6},
- {0x5A3C, 0xB140},{0x5A3E, 0xD4E4},{0x5A40, 0xB0FE},{0x5A41, 0xB0FA},{0x5A42, 0xD4ED},{0x5A43, 0xD4DD},{0x5A44, 0xD4E0},{0x5A46, 0xB143},
- {0x5A47, 0xD4EA},{0x5A48, 0xD4E2},{0x5A49, 0xB0FB},{0x5A4A, 0xB144},{0x5A4C, 0xD4E7},{0x5A4D, 0xD4E5},{0x5A50, 0xD4D6},{0x5A51, 0xD4EB},
- {0x5A52, 0xD4DF},{0x5A53, 0xD4DA},{0x5A55, 0xD4D0},{0x5A56, 0xD4EC},{0x5A57, 0xD4DC},{0x5A58, 0xD4CF},{0x5A5A, 0xB142},{0x5A5B, 0xD4E1},
- {0x5A5C, 0xD4EE},{0x5A5D, 0xD4DE},{0x5A5E, 0xD4D2},{0x5A5F, 0xD4D7},{0x5A60, 0xD4CE},{0x5A62, 0xB141},{0x5A64, 0xD4DB},{0x5A65, 0xD4D8},
- {0x5A66, 0xB0FC},{0x5A67, 0xD4D1},{0x5A69, 0xD4E9},{0x5A6A, 0xB0FD},{0x5A6C, 0xD4D9},{0x5A6D, 0xD4D5},{0x5A70, 0xD4E8},{0x5A77, 0xB440},
- {0x5A78, 0xD8BB},{0x5A7A, 0xD8B8},{0x5A7B, 0xD8C9},{0x5A7C, 0xD8BD},{0x5A7D, 0xD8CA},{0x5A7F, 0xB442},{0x5A83, 0xD8C6},{0x5A84, 0xD8C3},
- {0x5A8A, 0xD8C4},{0x5A8B, 0xD8C7},{0x5A8C, 0xD8CB},{0x5A8E, 0xD4E3},{0x5A8F, 0xD8CD},{0x5A90, 0xDD47},{0x5A92, 0xB443},{0x5A93, 0xD8CE},
- {0x5A94, 0xD8B6},{0x5A95, 0xD8C0},{0x5A97, 0xD8C5},{0x5A9A, 0xB441},{0x5A9B, 0xB444},{0x5A9C, 0xD8CC},{0x5A9D, 0xD8CF},{0x5A9E, 0xD8BA},
- {0x5A9F, 0xD8B7},{0x5AA2, 0xD8B9},{0x5AA5, 0xD8BE},{0x5AA6, 0xD8BC},{0x5AA7, 0xB445},{0x5AA9, 0xD8C8},{0x5AAC, 0xD8BF},{0x5AAE, 0xD8C1},
- {0x5AAF, 0xD8B5},{0x5AB0, 0xDCFA},{0x5AB1, 0xDCF8},{0x5AB2, 0xB742},{0x5AB3, 0xB740},{0x5AB4, 0xDD43},{0x5AB5, 0xDCF9},{0x5AB6, 0xDD44},
- {0x5AB7, 0xDD40},{0x5AB8, 0xDCF7},{0x5AB9, 0xDD46},{0x5ABA, 0xDCF6},{0x5ABB, 0xDCFD},{0x5ABC, 0xB6FE},{0x5ABD, 0xB6FD},{0x5ABE, 0xB6FC},
- {0x5ABF, 0xDCFB},{0x5AC0, 0xDD41},{0x5AC1, 0xB6F9},{0x5AC2, 0xB741},{0x5AC4, 0xDCF4},{0x5AC6, 0xDCFE},{0x5AC7, 0xDCF3},{0x5AC8, 0xDCFC},
- {0x5AC9, 0xB6FA},{0x5ACA, 0xDD42},{0x5ACB, 0xDCF5},{0x5ACC, 0xB6FB},{0x5ACD, 0xDD45},{0x5AD5, 0xE16E},{0x5AD6, 0xB9E2},{0x5AD7, 0xB9E1},
- {0x5AD8, 0xB9E3},{0x5AD9, 0xE17A},{0x5ADA, 0xE170},{0x5ADB, 0xE176},{0x5ADC, 0xE16B},{0x5ADD, 0xE179},{0x5ADE, 0xE178},{0x5ADF, 0xE17C},
- {0x5AE0, 0xE175},{0x5AE1, 0xB9DE},{0x5AE2, 0xE174},{0x5AE3, 0xB9E4},{0x5AE5, 0xE16D},{0x5AE6, 0xB9DF},{0x5AE8, 0xE17B},{0x5AE9, 0xB9E0},
- {0x5AEA, 0xE16F},{0x5AEB, 0xE172},{0x5AEC, 0xE177},{0x5AED, 0xE171},{0x5AEE, 0xE16C},{0x5AF3, 0xE173},{0x5AF4, 0xE555},{0x5AF5, 0xBC61},
- {0x5AF6, 0xE558},{0x5AF7, 0xE557},{0x5AF8, 0xE55A},{0x5AF9, 0xE55C},{0x5AFB, 0xBC5F},{0x5AFD, 0xE556},{0x5AFF, 0xE554},{0x5B01, 0xE55D},
- {0x5B02, 0xE55B},{0x5B03, 0xE559},{0x5B05, 0xE55F},{0x5B07, 0xE55E},{0x5B08, 0xBC63},{0x5B09, 0xBC5E},{0x5B0B, 0xBC60},{0x5B0C, 0xBC62},
- {0x5B0F, 0xE560},{0x5B10, 0xE957},{0x5B13, 0xE956},{0x5B14, 0xE955},{0x5B16, 0xE958},{0x5B17, 0xE951},{0x5B19, 0xE952},{0x5B1A, 0xE95A},
- {0x5B1B, 0xE953},{0x5B1D, 0xBEC5},{0x5B1E, 0xE95C},{0x5B20, 0xE95B},{0x5B21, 0xE954},{0x5B23, 0xECD1},{0x5B24, 0xC0A8},{0x5B25, 0xECCF},
- {0x5B26, 0xECD4},{0x5B27, 0xECD3},{0x5B28, 0xE959},{0x5B2A, 0xC0A7},{0x5B2C, 0xECD2},{0x5B2D, 0xECCE},{0x5B2E, 0xECD6},{0x5B2F, 0xECD5},
- {0x5B30, 0xC0A6},{0x5B32, 0xECD0},{0x5B34, 0xBEC6},{0x5B38, 0xC254},{0x5B3C, 0xEFC1},{0x5B3D, 0xF1FA},{0x5B3E, 0xF1FB},{0x5B3F, 0xF1FC},
- {0x5B40, 0xC45C},{0x5B43, 0xC45D},{0x5B45, 0xF443},{0x5B47, 0xF5C8},{0x5B48, 0xF5C7},{0x5B4B, 0xF6DB},{0x5B4C, 0xF6DC},{0x5B4D, 0xF7D5},
- {0x5B4E, 0xF8A7},{0x5B50, 0xA46C},{0x5B51, 0xA46D},{0x5B53, 0xA46E},{0x5B54, 0xA4D5},{0x5B55, 0xA5A5},{0x5B56, 0xC9D3},{0x5B57, 0xA672},
- {0x5B58, 0xA673},{0x5B5A, 0xA7B7},{0x5B5B, 0xA7B8},{0x5B5C, 0xA7B6},{0x5B5D, 0xA7B5},{0x5B5F, 0xA973},{0x5B62, 0xCC55},{0x5B63, 0xA975},
- {0x5B64, 0xA974},{0x5B65, 0xCC56},{0x5B69, 0xABC4},{0x5B6B, 0xAE5D},{0x5B6C, 0xD165},{0x5B6E, 0xD4F0},{0x5B70, 0xB145},{0x5B71, 0xB447},
- {0x5B72, 0xD4EF},{0x5B73, 0xB446},{0x5B75, 0xB9E5},{0x5B77, 0xE17D},{0x5B78, 0xBEC7},{0x5B7A, 0xC0A9},{0x5B7B, 0xECD7},{0x5B7D, 0xC45E},
- {0x5B7F, 0xC570},{0x5B81, 0xC972},{0x5B83, 0xA5A6},{0x5B84, 0xC973},{0x5B85, 0xA676},{0x5B87, 0xA674},{0x5B88, 0xA675},{0x5B89, 0xA677},
- {0x5B8B, 0xA7BA},{0x5B8C, 0xA7B9},{0x5B8E, 0xCABC},{0x5B8F, 0xA7BB},{0x5B92, 0xCABD},{0x5B93, 0xCC57},{0x5B95, 0xCC58},{0x5B97, 0xA976},
- {0x5B98, 0xA978},{0x5B99, 0xA97A},{0x5B9A, 0xA977},{0x5B9B, 0xA97B},{0x5B9C, 0xA979},{0x5BA2, 0xABC8},{0x5BA3, 0xABC5},{0x5BA4, 0xABC7},
- {0x5BA5, 0xABC9},{0x5BA6, 0xABC6},{0x5BA7, 0xD166},{0x5BA8, 0xCE77},{0x5BAC, 0xD168},{0x5BAD, 0xD167},{0x5BAE, 0xAE63},{0x5BB0, 0xAE5F},
- {0x5BB3, 0xAE60},{0x5BB4, 0xAE62},{0x5BB5, 0xAE64},{0x5BB6, 0xAE61},{0x5BB8, 0xAE66},{0x5BB9, 0xAE65},{0x5BBF, 0xB14A},{0x5BC0, 0xD4F2},
- {0x5BC1, 0xD4F1},{0x5BC2, 0xB149},{0x5BC4, 0xB148},{0x5BC5, 0xB147},{0x5BC6, 0xB14B},{0x5BC7, 0xB146},{0x5BCA, 0xD8D5},{0x5BCB, 0xD8D2},
- {0x5BCC, 0xB449},{0x5BCD, 0xD8D1},{0x5BCE, 0xD8D6},{0x5BD0, 0xB44B},{0x5BD1, 0xD8D4},{0x5BD2, 0xB448},{0x5BD3, 0xB44A},{0x5BD4, 0xD8D3},
- {0x5BD6, 0xDD48},{0x5BD8, 0xDD49},{0x5BD9, 0xDD4A},{0x5BDE, 0xB9E6},{0x5BDF, 0xB9EE},{0x5BE0, 0xE17E},{0x5BE1, 0xB9E8},{0x5BE2, 0xB9EC},
- {0x5BE3, 0xE1A1},{0x5BE4, 0xB9ED},{0x5BE5, 0xB9E9},{0x5BE6, 0xB9EA},{0x5BE7, 0xB9E7},{0x5BE8, 0xB9EB},{0x5BE9, 0xBC66},{0x5BEA, 0xD8D0},
- {0x5BEB, 0xBC67},{0x5BEC, 0xBC65},{0x5BEE, 0xBC64},{0x5BEF, 0xE95D},{0x5BF0, 0xBEC8},{0x5BF1, 0xECD8},{0x5BF2, 0xECD9},{0x5BF5, 0xC364},
- {0x5BF6, 0xC45F},{0x5BF8, 0xA46F},{0x5BFA, 0xA678},{0x5C01, 0xABCA},{0x5C03, 0xD169},{0x5C04, 0xAE67},{0x5C07, 0xB14E},{0x5C08, 0xB14D},
- {0x5C09, 0xB14C},{0x5C0A, 0xB44C},{0x5C0B, 0xB44D},{0x5C0C, 0xD8D7},{0x5C0D, 0xB9EF},{0x5C0E, 0xBEC9},{0x5C0F, 0xA470},{0x5C10, 0xC95C},
- {0x5C11, 0xA4D6},{0x5C12, 0xC974},{0x5C15, 0xC9D4},{0x5C16, 0xA679},{0x5C1A, 0xA97C},{0x5C1F, 0xDD4B},{0x5C22, 0xA471},{0x5C24, 0xA4D7},
- {0x5C25, 0xC9D5},{0x5C28, 0xCABE},{0x5C2A, 0xCABF},{0x5C2C, 0xA7BC},{0x5C30, 0xD8D8},{0x5C31, 0xB44E},{0x5C33, 0xDD4C},{0x5C37, 0xC0AA},
- {0x5C38, 0xA472},{0x5C39, 0xA4A8},{0x5C3A, 0xA4D8},{0x5C3B, 0xC975},{0x5C3C, 0xA5A7},{0x5C3E, 0xA7C0},{0x5C3F, 0xA7BF},{0x5C40, 0xA7BD},
- {0x5C41, 0xA7BE},{0x5C44, 0xCC59},{0x5C45, 0xA97E},{0x5C46, 0xA9A1},{0x5C47, 0xCC5A},{0x5C48, 0xA97D},{0x5C4B, 0xABCE},{0x5C4C, 0xCE78},
- {0x5C4D, 0xABCD},{0x5C4E, 0xABCB},{0x5C4F, 0xABCC},{0x5C50, 0xAE6A},{0x5C51, 0xAE68},{0x5C54, 0xD16B},{0x5C55, 0xAE69},{0x5C56, 0xD16A},
- {0x5C58, 0xAE5E},{0x5C59, 0xD4F3},{0x5C5C, 0xB150},{0x5C5D, 0xB151},{0x5C60, 0xB14F},{0x5C62, 0xB9F0},{0x5C63, 0xE1A2},{0x5C64, 0xBC68},
- {0x5C65, 0xBC69},{0x5C67, 0xE561},{0x5C68, 0xC0AB},{0x5C69, 0xEFC2},{0x5C6A, 0xEFC3},{0x5C6C, 0xC4DD},{0x5C6D, 0xF8A8},{0x5C6E, 0xC94B},
- {0x5C6F, 0xA4D9},{0x5C71, 0xA473},{0x5C73, 0xC977},{0x5C74, 0xC976},{0x5C79, 0xA67A},{0x5C7A, 0xC9D7},{0x5C7B, 0xC9D8},{0x5C7C, 0xC9D6},
- {0x5C7E, 0xC9D9},{0x5C86, 0xCAC7},{0x5C88, 0xCAC2},{0x5C89, 0xCAC4},{0x5C8A, 0xCAC6},{0x5C8B, 0xCAC3},{0x5C8C, 0xA7C4},{0x5C8D, 0xCAC0},
- {0x5C8F, 0xCAC1},{0x5C90, 0xA7C1},{0x5C91, 0xA7C2},{0x5C92, 0xCAC5},{0x5C93, 0xCAC8},{0x5C94, 0xA7C3},{0x5C95, 0xCAC9},{0x5C9D, 0xCC68},
- {0x5C9F, 0xCC62},{0x5CA0, 0xCC5D},{0x5CA1, 0xA9A3},{0x5CA2, 0xCC65},{0x5CA3, 0xCC63},{0x5CA4, 0xCC5C},{0x5CA5, 0xCC69},{0x5CA6, 0xCC6C},
- {0x5CA7, 0xCC67},{0x5CA8, 0xCC60},{0x5CA9, 0xA9A5},{0x5CAA, 0xCC66},{0x5CAB, 0xA9A6},{0x5CAC, 0xCC61},{0x5CAD, 0xCC64},{0x5CAE, 0xCC5B},
- {0x5CAF, 0xCC5F},{0x5CB0, 0xCC6B},{0x5CB1, 0xA9A7},{0x5CB3, 0xA9A8},{0x5CB5, 0xCC5E},{0x5CB6, 0xCC6A},{0x5CB7, 0xA9A2},{0x5CB8, 0xA9A4},
- {0x5CC6, 0xCEAB},{0x5CC7, 0xCEA4},{0x5CC8, 0xCEAA},{0x5CC9, 0xCEA3},{0x5CCA, 0xCEA5},{0x5CCB, 0xCE7D},{0x5CCC, 0xCE7B},{0x5CCE, 0xCEAC},
- {0x5CCF, 0xCEA9},{0x5CD0, 0xCE79},{0x5CD2, 0xABD0},{0x5CD3, 0xCEA7},{0x5CD4, 0xCEA8},{0x5CD6, 0xCEA6},{0x5CD7, 0xCE7C},{0x5CD8, 0xCE7A},
- {0x5CD9, 0xABCF},{0x5CDA, 0xCEA2},{0x5CDB, 0xCE7E},{0x5CDE, 0xCEA1},{0x5CDF, 0xCEAD},{0x5CE8, 0xAE6F},{0x5CEA, 0xAE6E},{0x5CEC, 0xD16C},
- {0x5CED, 0xAE6B},{0x5CEE, 0xD16E},{0x5CF0, 0xAE70},{0x5CF1, 0xD16F},{0x5CF4, 0xAE73},{0x5CF6, 0xAE71},{0x5CF7, 0xD170},{0x5CF8, 0xCEAE},
- {0x5CF9, 0xD172},{0x5CFB, 0xAE6D},{0x5CFD, 0xAE6C},{0x5CFF, 0xD16D},{0x5D00, 0xD171},{0x5D01, 0xAE72},{0x5D06, 0xB153},{0x5D07, 0xB152},
- {0x5D0B, 0xD4F5},{0x5D0C, 0xD4F9},{0x5D0D, 0xD4FB},{0x5D0E, 0xB154},{0x5D0F, 0xD4FE},{0x5D11, 0xB158},{0x5D12, 0xD541},{0x5D14, 0xB15A},
- {0x5D16, 0xB156},{0x5D17, 0xB15E},{0x5D19, 0xB15B},{0x5D1A, 0xD4F7},{0x5D1B, 0xB155},{0x5D1D, 0xD4F6},{0x5D1E, 0xD4F4},{0x5D1F, 0xD543},
- {0x5D20, 0xD4F8},{0x5D22, 0xB157},{0x5D23, 0xD542},{0x5D24, 0xB15C},{0x5D25, 0xD4FD},{0x5D26, 0xD4FC},{0x5D27, 0xB15D},{0x5D28, 0xD4FA},
- {0x5D29, 0xB159},{0x5D2E, 0xD544},{0x5D30, 0xD540},{0x5D31, 0xD8E7},{0x5D32, 0xD8EE},{0x5D33, 0xD8E3},{0x5D34, 0xB451},{0x5D35, 0xD8DF},
- {0x5D36, 0xD8EF},{0x5D37, 0xD8D9},{0x5D38, 0xD8EC},{0x5D39, 0xD8EA},{0x5D3A, 0xD8E4},{0x5D3C, 0xD8ED},{0x5D3D, 0xD8E6},{0x5D3F, 0xD8DE},
- {0x5D40, 0xD8F0},{0x5D41, 0xD8DC},{0x5D42, 0xD8E9},{0x5D43, 0xD8DA},{0x5D45, 0xD8F1},{0x5D47, 0xB452},{0x5D49, 0xD8EB},{0x5D4A, 0xDD4F},
- {0x5D4B, 0xD8DD},{0x5D4C, 0xB44F},{0x5D4E, 0xD8E1},{0x5D50, 0xB450},{0x5D51, 0xD8E0},{0x5D52, 0xD8E5},{0x5D55, 0xD8E2},{0x5D59, 0xD8E8},
- {0x5D5E, 0xDD53},{0x5D62, 0xDD56},{0x5D63, 0xDD4E},{0x5D65, 0xDD50},{0x5D67, 0xDD55},{0x5D68, 0xDD54},{0x5D69, 0xB743},{0x5D6B, 0xD8DB},
- {0x5D6C, 0xDD52},{0x5D6F, 0xB744},{0x5D71, 0xDD4D},{0x5D72, 0xDD51},{0x5D77, 0xE1A9},{0x5D79, 0xE1B0},{0x5D7A, 0xE1A7},{0x5D7C, 0xE1AE},
- {0x5D7D, 0xE1A5},{0x5D7E, 0xE1AD},{0x5D7F, 0xE1B1},{0x5D80, 0xE1A4},{0x5D81, 0xE1A8},{0x5D82, 0xE1A3},{0x5D84, 0xB9F1},{0x5D86, 0xE1A6},
- {0x5D87, 0xB9F2},{0x5D88, 0xE1AC},{0x5D89, 0xE1AB},{0x5D8A, 0xE1AA},{0x5D8D, 0xE1AF},{0x5D92, 0xE565},{0x5D93, 0xE567},{0x5D94, 0xBC6B},
- {0x5D95, 0xE568},{0x5D97, 0xE563},{0x5D99, 0xE562},{0x5D9A, 0xE56C},{0x5D9C, 0xE56A},{0x5D9D, 0xBC6A},{0x5D9E, 0xE56D},{0x5D9F, 0xE564},
- {0x5DA0, 0xE569},{0x5DA1, 0xE56B},{0x5DA2, 0xE566},{0x5DA7, 0xE961},{0x5DA8, 0xE966},{0x5DA9, 0xE960},{0x5DAA, 0xE965},{0x5DAC, 0xE95E},
- {0x5DAD, 0xE968},{0x5DAE, 0xE964},{0x5DAF, 0xE969},{0x5DB0, 0xE963},{0x5DB1, 0xE95F},{0x5DB2, 0xE967},{0x5DB4, 0xE96A},{0x5DB5, 0xE962},
- {0x5DB7, 0xECDA},{0x5DB8, 0xC0AF},{0x5DBA, 0xC0AD},{0x5DBC, 0xC0AC},{0x5DBD, 0xC0AE},{0x5DC0, 0xEFC4},{0x5DC2, 0xF172},{0x5DC3, 0xF1FD},
- {0x5DC6, 0xF444},{0x5DC7, 0xF445},{0x5DC9, 0xC460},{0x5DCB, 0xF5C9},{0x5DCD, 0xC4DE},{0x5DCF, 0xF5CA},{0x5DD1, 0xF6DE},{0x5DD2, 0xC572},
- {0x5DD4, 0xC571},{0x5DD5, 0xF6DD},{0x5DD6, 0xC5C9},{0x5DD8, 0xF7D6},{0x5DDD, 0xA474},{0x5DDE, 0xA67B},{0x5DDF, 0xC9DA},{0x5DE0, 0xCACA},
- {0x5DE1, 0xA8B5},{0x5DE2, 0xB15F},{0x5DE5, 0xA475},{0x5DE6, 0xA5AA},{0x5DE7, 0xA5A9},{0x5DE8, 0xA5A8},{0x5DEB, 0xA7C5},{0x5DEE, 0xAE74},
- {0x5DF0, 0xDD57},{0x5DF1, 0xA476},{0x5DF2, 0xA477},{0x5DF3, 0xA478},{0x5DF4, 0xA4DA},{0x5DF7, 0xABD1},{0x5DF9, 0xCEAF},{0x5DFD, 0xB453},
- {0x5DFE, 0xA479},{0x5DFF, 0xC95D},{0x5E02, 0xA5AB},{0x5E03, 0xA5AC},{0x5E04, 0xC978},{0x5E06, 0xA67C},{0x5E0A, 0xCACB},{0x5E0C, 0xA7C6},
- {0x5E0E, 0xCACC},{0x5E11, 0xA9AE},{0x5E14, 0xCC6E},{0x5E15, 0xA9AC},{0x5E16, 0xA9AB},{0x5E17, 0xCC6D},{0x5E18, 0xA9A9},{0x5E19, 0xCC6F},
- {0x5E1A, 0xA9AA},{0x5E1B, 0xA9AD},{0x5E1D, 0xABD2},{0x5E1F, 0xABD4},{0x5E20, 0xCEB3},{0x5E21, 0xCEB0},{0x5E22, 0xCEB1},{0x5E23, 0xCEB2},
- {0x5E24, 0xCEB4},{0x5E25, 0xABD3},{0x5E28, 0xD174},{0x5E29, 0xD173},{0x5E2B, 0xAE76},{0x5E2D, 0xAE75},{0x5E33, 0xB162},{0x5E34, 0xD546},
- {0x5E36, 0xB161},{0x5E37, 0xB163},{0x5E38, 0xB160},{0x5E3D, 0xB455},{0x5E3E, 0xD545},{0x5E40, 0xB456},{0x5E41, 0xD8F3},{0x5E43, 0xB457},
- {0x5E44, 0xD8F2},{0x5E45, 0xB454},{0x5E4A, 0xDD5A},{0x5E4B, 0xDD5C},{0x5E4C, 0xB745},{0x5E4D, 0xDD5B},{0x5E4E, 0xDD59},{0x5E4F, 0xDD58},
- {0x5E53, 0xE1B4},{0x5E54, 0xB9F7},{0x5E55, 0xB9F5},{0x5E57, 0xB9F6},{0x5E58, 0xE1B2},{0x5E59, 0xE1B3},{0x5E5B, 0xB9F3},{0x5E5C, 0xE571},
- {0x5E5D, 0xE56F},{0x5E5F, 0xBC6D},{0x5E60, 0xE570},{0x5E61, 0xBC6E},{0x5E62, 0xBC6C},{0x5E63, 0xB9F4},{0x5E66, 0xE96D},{0x5E67, 0xE96B},
- {0x5E68, 0xE96C},{0x5E69, 0xE56E},{0x5E6A, 0xECDC},{0x5E6B, 0xC0B0},{0x5E6C, 0xECDB},{0x5E6D, 0xEFC5},{0x5E6E, 0xEFC6},{0x5E6F, 0xE96E},
- {0x5E70, 0xF1FE},{0x5E72, 0xA47A},{0x5E73, 0xA5AD},{0x5E74, 0xA67E},{0x5E75, 0xC9DB},{0x5E76, 0xA67D},{0x5E78, 0xA9AF},{0x5E79, 0xB746},
- {0x5E7B, 0xA4DB},{0x5E7C, 0xA5AE},{0x5E7D, 0xABD5},{0x5E7E, 0xB458},{0x5E80, 0xC979},{0x5E82, 0xC97A},{0x5E84, 0xC9DC},{0x5E87, 0xA7C8},
- {0x5E88, 0xCAD0},{0x5E89, 0xCACE},{0x5E8A, 0xA7C9},{0x5E8B, 0xCACD},{0x5E8C, 0xCACF},{0x5E8D, 0xCAD1},{0x5E8F, 0xA7C7},{0x5E95, 0xA9B3},
- {0x5E96, 0xA9B4},{0x5E97, 0xA9B1},{0x5E9A, 0xA9B0},{0x5E9B, 0xCEB8},{0x5E9C, 0xA9B2},{0x5EA0, 0xABD6},{0x5EA2, 0xCEB7},{0x5EA3, 0xCEB9},
- {0x5EA4, 0xCEB6},{0x5EA5, 0xCEBA},{0x5EA6, 0xABD7},{0x5EA7, 0xAE79},{0x5EA8, 0xD175},{0x5EAA, 0xD177},{0x5EAB, 0xAE77},{0x5EAC, 0xD178},
- {0x5EAD, 0xAE78},{0x5EAE, 0xD176},{0x5EB0, 0xCEB5},{0x5EB1, 0xD547},{0x5EB2, 0xD54A},{0x5EB3, 0xD54B},{0x5EB4, 0xD548},{0x5EB5, 0xB167},
- {0x5EB6, 0xB166},{0x5EB7, 0xB164},{0x5EB8, 0xB165},{0x5EB9, 0xD549},{0x5EBE, 0xB168},{0x5EC1, 0xB45A},{0x5EC2, 0xB45B},{0x5EC4, 0xB45C},
- {0x5EC5, 0xDD5D},{0x5EC6, 0xDD5F},{0x5EC7, 0xDD61},{0x5EC8, 0xB748},{0x5EC9, 0xB747},{0x5ECA, 0xB459},{0x5ECB, 0xDD60},{0x5ECC, 0xDD5E},
- {0x5ECE, 0xE1B8},{0x5ED1, 0xE1B6},{0x5ED2, 0xE1BC},{0x5ED3, 0xB9F8},{0x5ED4, 0xE1BD},{0x5ED5, 0xE1BA},{0x5ED6, 0xB9F9},{0x5ED7, 0xE1B7},
- {0x5ED8, 0xE1B5},{0x5ED9, 0xE1BB},{0x5EDA, 0xBC70},{0x5EDB, 0xE573},{0x5EDC, 0xE1B9},{0x5EDD, 0xBC72},{0x5EDE, 0xE574},{0x5EDF, 0xBC71},
- {0x5EE0, 0xBC74},{0x5EE1, 0xE575},{0x5EE2, 0xBC6F},{0x5EE3, 0xBC73},{0x5EE5, 0xE973},{0x5EE6, 0xE971},{0x5EE7, 0xE970},{0x5EE8, 0xE972},
- {0x5EE9, 0xE96F},{0x5EEC, 0xC366},{0x5EEE, 0xF446},{0x5EEF, 0xF447},{0x5EF1, 0xF5CB},{0x5EF2, 0xF6DF},{0x5EF3, 0xC655},{0x5EF6, 0xA9B5},
- {0x5EF7, 0xA7CA},{0x5EFA, 0xABD8},{0x5EFE, 0xA47B},{0x5EFF, 0xA4DC},{0x5F01, 0xA5AF},{0x5F02, 0xC9DD},{0x5F04, 0xA7CB},{0x5F05, 0xCAD2},
- {0x5F07, 0xCEBB},{0x5F08, 0xABD9},{0x5F0A, 0xB9FA},{0x5F0B, 0xA47C},{0x5F0F, 0xA6A1},{0x5F12, 0xB749},{0x5F13, 0xA47D},{0x5F14, 0xA4DD},
- {0x5F15, 0xA4DE},{0x5F17, 0xA5B1},{0x5F18, 0xA5B0},{0x5F1A, 0xC9DE},{0x5F1B, 0xA6A2},{0x5F1D, 0xCAD3},{0x5F1F, 0xA7CC},{0x5F22, 0xCC71},
- {0x5F23, 0xCC72},{0x5F24, 0xCC73},{0x5F26, 0xA9B6},{0x5F27, 0xA9B7},{0x5F28, 0xCC70},{0x5F29, 0xA9B8},{0x5F2D, 0xABDA},{0x5F2E, 0xCEBC},
- {0x5F30, 0xD17A},{0x5F31, 0xAE7A},{0x5F33, 0xD179},{0x5F35, 0xB169},{0x5F36, 0xD54C},{0x5F37, 0xB16A},{0x5F38, 0xD54D},{0x5F3C, 0xB45D},
- {0x5F40, 0xDD62},{0x5F43, 0xE1BF},{0x5F44, 0xE1BE},{0x5F46, 0xB9FB},{0x5F48, 0xBC75},{0x5F49, 0xE576},{0x5F4A, 0xBECA},{0x5F4B, 0xE974},
- {0x5F4C, 0xC0B1},{0x5F4E, 0xC573},{0x5F4F, 0xF7D8},{0x5F54, 0xCC74},{0x5F56, 0xCEBD},{0x5F57, 0xB16B},{0x5F58, 0xD8F4},{0x5F59, 0xB74A},
- {0x5F5D, 0xC255},{0x5F62, 0xA7CE},{0x5F64, 0xA7CD},{0x5F65, 0xABDB},{0x5F67, 0xD17B},{0x5F69, 0xB16D},{0x5F6A, 0xB343},{0x5F6B, 0xB16E},
- {0x5F6C, 0xB16C},{0x5F6D, 0xB45E},{0x5F6F, 0xE1C0},{0x5F70, 0xB9FC},{0x5F71, 0xBC76},{0x5F73, 0xC94C},{0x5F74, 0xC9DF},{0x5F76, 0xCAD5},
- {0x5F77, 0xA7CF},{0x5F78, 0xCAD4},{0x5F79, 0xA7D0},{0x5F7C, 0xA9BC},{0x5F7D, 0xCC77},{0x5F7E, 0xCC76},{0x5F7F, 0xA9BB},{0x5F80, 0xA9B9},
- {0x5F81, 0xA9BA},{0x5F82, 0xCC75},{0x5F85, 0xABDD},{0x5F86, 0xCEBE},{0x5F87, 0xABE0},{0x5F88, 0xABDC},{0x5F89, 0xABE2},{0x5F8A, 0xABDE},
- {0x5F8B, 0xABDF},{0x5F8C, 0xABE1},{0x5F90, 0xAE7D},{0x5F91, 0xAE7C},{0x5F92, 0xAE7B},{0x5F96, 0xD54F},{0x5F97, 0xB16F},{0x5F98, 0xB172},
- {0x5F99, 0xB170},{0x5F9B, 0xD54E},{0x5F9C, 0xB175},{0x5F9E, 0xB171},{0x5F9F, 0xD550},{0x5FA0, 0xB174},{0x5FA1, 0xB173},{0x5FA5, 0xD8F6},
- {0x5FA6, 0xD8F5},{0x5FA8, 0xB461},{0x5FA9, 0xB45F},{0x5FAA, 0xB460},{0x5FAB, 0xD8F7},{0x5FAC, 0xB74B},{0x5FAD, 0xDD64},{0x5FAE, 0xB74C},
- {0x5FAF, 0xDD63},{0x5FB2, 0xE577},{0x5FB5, 0xBC78},{0x5FB6, 0xE1C1},{0x5FB7, 0xBC77},{0x5FB9, 0xB9FD},{0x5FBB, 0xECDE},{0x5FBC, 0xE975},
- {0x5FBD, 0xC0B2},{0x5FBE, 0xECDD},{0x5FBF, 0xF240},{0x5FC0, 0xF448},{0x5FC1, 0xF449},{0x5FC3, 0xA4DF},{0x5FC5, 0xA5B2},{0x5FC9, 0xC97B},
- {0x5FCC, 0xA7D2},{0x5FCD, 0xA7D4},{0x5FCF, 0xC9E2},{0x5FD0, 0xCAD8},{0x5FD1, 0xCAD7},{0x5FD2, 0xCAD6},{0x5FD4, 0xC9E1},{0x5FD5, 0xC9E0},
- {0x5FD6, 0xA6A4},{0x5FD7, 0xA7D3},{0x5FD8, 0xA7D1},{0x5FD9, 0xA6A3},{0x5FDD, 0xA9BD},{0x5FDE, 0xCC78},{0x5FE0, 0xA9BE},{0x5FE1, 0xCADD},
- {0x5FE3, 0xCADF},{0x5FE4, 0xCADE},{0x5FE5, 0xCC79},{0x5FE8, 0xCADA},{0x5FEA, 0xA7D8},{0x5FEB, 0xA7D6},{0x5FED, 0xCAD9},{0x5FEE, 0xCADB},
- {0x5FEF, 0xCAE1},{0x5FF1, 0xA7D5},{0x5FF3, 0xCADC},{0x5FF4, 0xCAE5},{0x5FF5, 0xA9C0},{0x5FF7, 0xCAE2},{0x5FF8, 0xA7D7},{0x5FFA, 0xCAE0},
- {0x5FFB, 0xCAE3},{0x5FFD, 0xA9BF},{0x5FFF, 0xA9C1},{0x6000, 0xCAE4},{0x6009, 0xCCAF},{0x600A, 0xCCA2},{0x600B, 0xCC7E},{0x600C, 0xCCAE},
- {0x600D, 0xCCA9},{0x600E, 0xABE7},{0x600F, 0xA9C2},{0x6010, 0xCCAA},{0x6011, 0xCCAD},{0x6012, 0xABE3},{0x6013, 0xCCAC},{0x6014, 0xA9C3},
- {0x6015, 0xA9C8},{0x6016, 0xA9C6},{0x6017, 0xCCA3},{0x6019, 0xCC7C},{0x601A, 0xCCA5},{0x601B, 0xA9CD},{0x601C, 0xCCB0},{0x601D, 0xABE4},
- {0x601E, 0xCCA6},{0x6020, 0xABE5},{0x6021, 0xA9C9},{0x6022, 0xCCA8},{0x6024, 0xCECD},{0x6025, 0xABE6},{0x6026, 0xCC7B},{0x6027, 0xA9CA},
- {0x6028, 0xABE8},{0x6029, 0xA9CB},{0x602A, 0xA9C7},{0x602B, 0xA9CC},{0x602C, 0xCCA7},{0x602D, 0xCC7A},{0x602E, 0xCCAB},{0x602F, 0xA9C4},
- {0x6032, 0xCC7D},{0x6033, 0xCCA4},{0x6034, 0xCCA1},{0x6035, 0xA9C5},{0x6037, 0xCEBF},{0x6039, 0xCEC0},{0x6040, 0xCECA},{0x6041, 0xD1A1},
- {0x6042, 0xCECB},{0x6043, 0xABEE},{0x6044, 0xCECE},{0x6045, 0xCEC4},{0x6046, 0xABED},{0x6047, 0xCEC6},{0x6049, 0xCEC7},{0x604C, 0xCEC9},
- {0x604D, 0xABE9},{0x6050, 0xAEA3},{0x6053, 0xCEC5},{0x6054, 0xCEC1},{0x6055, 0xAEA4},{0x6058, 0xCECF},{0x6059, 0xAE7E},{0x605A, 0xD17D},
- {0x605B, 0xCEC8},{0x605D, 0xD17C},{0x605E, 0xCEC3},{0x605F, 0xCECC},{0x6062, 0xABEC},{0x6063, 0xAEA1},{0x6064, 0xABF2},{0x6065, 0xAEA2},
- {0x6066, 0xCED0},{0x6067, 0xD17E},{0x6068, 0xABEB},{0x6069, 0xAEA6},{0x606A, 0xABF1},{0x606B, 0xABF0},{0x606C, 0xABEF},{0x606D, 0xAEA5},
- {0x606E, 0xCED1},{0x606F, 0xAEA7},{0x6070, 0xABEA},{0x6072, 0xCEC2},{0x607F, 0xB176},{0x6080, 0xD1A4},{0x6081, 0xD1A6},{0x6083, 0xD1A8},
- {0x6084, 0xAEA8},{0x6085, 0xAEAE},{0x6086, 0xD553},{0x6087, 0xD1AC},{0x6088, 0xD1A3},{0x6089, 0xB178},{0x608A, 0xD551},{0x608C, 0xAEAD},
- {0x608D, 0xAEAB},{0x608E, 0xD1AE},{0x6090, 0xD552},{0x6092, 0xD1A5},{0x6094, 0xAEAC},{0x6095, 0xD1A9},{0x6096, 0xAEAF},{0x6097, 0xD1AB},
- {0x609A, 0xAEAA},{0x609B, 0xD1AA},{0x609C, 0xD1AD},{0x609D, 0xD1A7},{0x609F, 0xAEA9},{0x60A0, 0xB179},{0x60A2, 0xD1A2},{0x60A3, 0xB177},
- {0x60A8, 0xB17A},{0x60B0, 0xD555},{0x60B1, 0xD55E},{0x60B2, 0xB464},{0x60B4, 0xB17C},{0x60B5, 0xB1A3},{0x60B6, 0xB465},{0x60B7, 0xD560},
- {0x60B8, 0xB1AA},{0x60B9, 0xD8F9},{0x60BA, 0xD556},{0x60BB, 0xB1A2},{0x60BC, 0xB1A5},{0x60BD, 0xB17E},{0x60BE, 0xD554},{0x60BF, 0xD562},
- {0x60C0, 0xD565},{0x60C1, 0xD949},{0x60C3, 0xD563},{0x60C4, 0xD8FD},{0x60C5, 0xB1A1},{0x60C6, 0xB1A8},{0x60C7, 0xB1AC},{0x60C8, 0xD55D},
- {0x60C9, 0xD8F8},{0x60CA, 0xD561},{0x60CB, 0xB17B},{0x60CC, 0xD8FA},{0x60CD, 0xD564},{0x60CE, 0xD8FC},{0x60CF, 0xD559},{0x60D1, 0xB462},
- {0x60D3, 0xD557},{0x60D4, 0xD558},{0x60D5, 0xB1A7},{0x60D8, 0xB1A6},{0x60D9, 0xD55B},{0x60DA, 0xB1AB},{0x60DB, 0xD55F},{0x60DC, 0xB1A4},
- {0x60DD, 0xD55C},{0x60DF, 0xB1A9},{0x60E0, 0xB466},{0x60E1, 0xB463},{0x60E2, 0xD8FB},{0x60E4, 0xD55A},{0x60E6, 0xB17D},{0x60F0, 0xB46B},
- {0x60F1, 0xB46F},{0x60F2, 0xD940},{0x60F3, 0xB751},{0x60F4, 0xB46D},{0x60F5, 0xD944},{0x60F6, 0xB471},{0x60F7, 0xDD65},{0x60F8, 0xD946},
- {0x60F9, 0xB753},{0x60FA, 0xB469},{0x60FB, 0xB46C},{0x60FC, 0xD947},{0x60FE, 0xD948},{0x60FF, 0xD94E},{0x6100, 0xB473},{0x6101, 0xB754},
- {0x6103, 0xD94A},{0x6104, 0xD94F},{0x6105, 0xD943},{0x6106, 0xB75E},{0x6108, 0xB755},{0x6109, 0xB472},{0x610A, 0xD941},{0x610B, 0xD950},
- {0x610D, 0xB75D},{0x610E, 0xB470},{0x610F, 0xB74E},{0x6110, 0xD94D},{0x6112, 0xB474},{0x6113, 0xD945},{0x6114, 0xD8FE},{0x6115, 0xB46A},
- {0x6116, 0xD942},{0x6118, 0xD94B},{0x611A, 0xB74D},{0x611B, 0xB752},{0x611C, 0xB467},{0x611D, 0xD94C},{0x611F, 0xB750},{0x6123, 0xB468},
- {0x6127, 0xB75C},{0x6128, 0xE1C3},{0x6129, 0xDD70},{0x612B, 0xDD68},{0x612C, 0xE1C2},{0x612E, 0xDD6C},{0x612F, 0xDD6E},{0x6132, 0xDD6B},
- {0x6134, 0xB75B},{0x6136, 0xDD6A},{0x6137, 0xB75F},{0x613B, 0xE1D2},{0x613E, 0xB75A},{0x613F, 0xBA40},{0x6140, 0xDD71},{0x6141, 0xE1C4},
- {0x6144, 0xB758},{0x6145, 0xDD69},{0x6146, 0xDD6D},{0x6147, 0xB9FE},{0x6148, 0xB74F},{0x6149, 0xDD66},{0x614A, 0xDD67},{0x614B, 0xBA41},
- {0x614C, 0xB757},{0x614D, 0xB759},{0x614E, 0xB756},{0x614F, 0xDD6F},{0x6152, 0xE1C8},{0x6153, 0xE1C9},{0x6154, 0xE1CE},{0x6155, 0xBC7D},
- {0x6156, 0xE1D5},{0x6158, 0xBA47},{0x615A, 0xBA46},{0x615B, 0xE1D0},{0x615D, 0xBC7C},{0x615E, 0xE1C5},{0x615F, 0xBA45},{0x6161, 0xE1D4},
- {0x6162, 0xBA43},{0x6163, 0xBA44},{0x6165, 0xE1D1},{0x6166, 0xE5AA},{0x6167, 0xBC7A},{0x6168, 0xB46E},{0x616A, 0xE1D3},{0x616B, 0xBCA3},
- {0x616C, 0xE1CB},{0x616E, 0xBC7B},{0x6170, 0xBCA2},{0x6171, 0xE1C6},{0x6172, 0xE1CA},{0x6173, 0xE1C7},{0x6174, 0xE1CD},{0x6175, 0xBA48},
- {0x6176, 0xBC79},{0x6177, 0xBA42},{0x6179, 0xE57A},{0x617A, 0xE1CF},{0x617C, 0xBCA1},{0x617E, 0xBCA4},{0x6180, 0xE1CC},{0x6182, 0xBC7E},
- {0x6183, 0xE579},{0x6189, 0xE57E},{0x618A, 0xBECE},{0x618B, 0xE578},{0x618C, 0xE9A3},{0x618D, 0xE5A9},{0x618E, 0xBCA8},{0x6190, 0xBCA6},
- {0x6191, 0xBECC},{0x6192, 0xE5A6},{0x6193, 0xE5A2},{0x6194, 0xBCAC},{0x6196, 0xE978},{0x619A, 0xBCAA},{0x619B, 0xE5A1},{0x619D, 0xE976},
- {0x619F, 0xE5A5},{0x61A1, 0xE5A8},{0x61A2, 0xE57D},{0x61A4, 0xBCAB},{0x61A7, 0xBCA5},{0x61A8, 0xE977},{0x61A9, 0xBECD},{0x61AA, 0xE5A7},
- {0x61AB, 0xBCA7},{0x61AC, 0xBCA9},{0x61AD, 0xE5A4},{0x61AE, 0xBCAD},{0x61AF, 0xE5A3},{0x61B0, 0xE57C},{0x61B1, 0xE57B},{0x61B2, 0xBECB},
- {0x61B3, 0xE5AB},{0x61B4, 0xE97A},{0x61B5, 0xECE0},{0x61B6, 0xBED0},{0x61B8, 0xE9A2},{0x61BA, 0xE97E},{0x61BC, 0xECE1},{0x61BE, 0xBED1},
- {0x61BF, 0xE9A1},{0x61C1, 0xE97C},{0x61C2, 0xC0B4},{0x61C3, 0xECDF},{0x61C5, 0xE979},{0x61C6, 0xE97B},{0x61C7, 0xC0B5},{0x61C8, 0xBED3},
- {0x61C9, 0xC0B3},{0x61CA, 0xBED2},{0x61CB, 0xC0B7},{0x61CC, 0xE97D},{0x61CD, 0xBECF},{0x61D6, 0xEFCF},{0x61D8, 0xEFC7},{0x61DE, 0xECE7},
- {0x61DF, 0xEFC8},{0x61E0, 0xECE3},{0x61E3, 0xC256},{0x61E4, 0xECE5},{0x61E5, 0xECE4},{0x61E6, 0xC0B6},{0x61E7, 0xECE2},{0x61E8, 0xECE6},
- {0x61E9, 0xEFD0},{0x61EA, 0xEFCC},{0x61EB, 0xEFCE},{0x61ED, 0xEFC9},{0x61EE, 0xEFCA},{0x61F0, 0xEFCD},{0x61F1, 0xEFCB},{0x61F2, 0xC367},
- {0x61F5, 0xC36A},{0x61F6, 0xC369},{0x61F7, 0xC368},{0x61F8, 0xC461},{0x61F9, 0xF44A},{0x61FA, 0xC462},{0x61FB, 0xF241},{0x61FC, 0xC4DF},
- {0x61FD, 0xF5CC},{0x61FE, 0xC4E0},{0x61FF, 0xC574},{0x6200, 0xC5CA},{0x6201, 0xF7D9},{0x6203, 0xF7DA},{0x6204, 0xF7DB},{0x6207, 0xF9BA},
- {0x6208, 0xA4E0},{0x6209, 0xC97C},{0x620A, 0xA5B3},{0x620C, 0xA6A6},{0x620D, 0xA6A7},{0x620E, 0xA6A5},{0x6210, 0xA6A8},{0x6211, 0xA7DA},
- {0x6212, 0xA7D9},{0x6214, 0xCCB1},{0x6215, 0xA9CF},{0x6216, 0xA9CE},{0x6219, 0xD1AF},{0x621A, 0xB1AD},{0x621B, 0xB1AE},{0x621F, 0xB475},
- {0x6220, 0xDD72},{0x6221, 0xB760},{0x6222, 0xB761},{0x6223, 0xDD74},{0x6224, 0xDD76},{0x6225, 0xDD75},{0x6227, 0xE1D7},{0x6229, 0xE1D6},
- {0x622A, 0xBA49},{0x622B, 0xE1D8},{0x622D, 0xE5AC},{0x622E, 0xBCAE},{0x6230, 0xBED4},{0x6232, 0xC0B8},{0x6233, 0xC257},{0x6234, 0xC0B9},
- {0x6236, 0xA4E1},{0x623A, 0xCAE6},{0x623D, 0xCCB2},{0x623E, 0xA9D1},{0x623F, 0xA9D0},{0x6240, 0xA9D2},{0x6241, 0xABF3},{0x6242, 0xCED2},
- {0x6243, 0xCED3},{0x6246, 0xD1B0},{0x6247, 0xAEB0},{0x6248, 0xB1AF},{0x6249, 0xB476},{0x624A, 0xD951},{0x624B, 0xA4E2},{0x624D, 0xA47E},
- {0x624E, 0xA4E3},{0x6250, 0xC97D},{0x6251, 0xA5B7},{0x6252, 0xA5B6},{0x6253, 0xA5B4},{0x6254, 0xA5B5},{0x6258, 0xA6AB},{0x6259, 0xC9E9},
- {0x625A, 0xC9EB},{0x625B, 0xA6AA},{0x625C, 0xC9E3},{0x625E, 0xC9E4},{0x6260, 0xC9EA},{0x6261, 0xC9E6},{0x6262, 0xC9E8},{0x6263, 0xA6A9},
- {0x6264, 0xC9E5},{0x6265, 0xC9EC},{0x6266, 0xC9E7},{0x626D, 0xA7E1},{0x626E, 0xA7EA},{0x626F, 0xA7E8},{0x6270, 0xCAF0},{0x6271, 0xCAED},
- {0x6272, 0xCAF5},{0x6273, 0xA7E6},{0x6274, 0xCAF6},{0x6276, 0xA7DF},{0x6277, 0xCAF3},{0x6279, 0xA7E5},{0x627A, 0xCAEF},{0x627B, 0xCAEE},
- {0x627C, 0xA7E3},{0x627D, 0xCAF4},{0x627E, 0xA7E4},{0x627F, 0xA9D3},{0x6280, 0xA7DE},{0x6281, 0xCAF1},{0x6283, 0xCAE7},{0x6284, 0xA7DB},
- {0x6286, 0xA7EE},{0x6287, 0xCAEC},{0x6288, 0xCAF2},{0x6289, 0xA7E0},{0x628A, 0xA7E2},{0x628C, 0xCAE8},{0x628E, 0xCAE9},{0x628F, 0xCAEA},
- {0x6291, 0xA7ED},{0x6292, 0xA7E7},{0x6293, 0xA7EC},{0x6294, 0xCAEB},{0x6295, 0xA7EB},{0x6296, 0xA7DD},{0x6297, 0xA7DC},{0x6298, 0xA7E9},
- {0x62A8, 0xA9E1},{0x62A9, 0xCCBE},{0x62AA, 0xCCB7},{0x62AB, 0xA9DC},{0x62AC, 0xA9EF},{0x62AD, 0xCCB3},{0x62AE, 0xCCBA},{0x62AF, 0xCCBC},
- {0x62B0, 0xCCBF},{0x62B1, 0xA9EA},{0x62B3, 0xCCBB},{0x62B4, 0xCCB4},{0x62B5, 0xA9E8},{0x62B6, 0xCCB8},{0x62B8, 0xCCC0},{0x62B9, 0xA9D9},
- {0x62BB, 0xCCBD},{0x62BC, 0xA9E3},{0x62BD, 0xA9E2},{0x62BE, 0xCCB6},{0x62BF, 0xA9D7},{0x62C2, 0xA9D8},{0x62C4, 0xA9D6},{0x62C6, 0xA9EE},
- {0x62C7, 0xA9E6},{0x62C8, 0xA9E0},{0x62C9, 0xA9D4},{0x62CA, 0xCCB9},{0x62CB, 0xA9DF},{0x62CC, 0xA9D5},{0x62CD, 0xA9E7},{0x62CE, 0xA9F0},
- {0x62CF, 0xCED4},{0x62D0, 0xA9E4},{0x62D1, 0xCCB5},{0x62D2, 0xA9DA},{0x62D3, 0xA9DD},{0x62D4, 0xA9DE},{0x62D6, 0xA9EC},{0x62D7, 0xA9ED},
- {0x62D8, 0xA9EB},{0x62D9, 0xA9E5},{0x62DA, 0xA9E9},{0x62DB, 0xA9DB},{0x62DC, 0xABF4},{0x62EB, 0xCEDA},{0x62EC, 0xAC41},{0x62ED, 0xABF8},
- {0x62EE, 0xABFA},{0x62EF, 0xAC40},{0x62F0, 0xCEE6},{0x62F1, 0xABFD},{0x62F2, 0xD1B1},{0x62F3, 0xAEB1},{0x62F4, 0xAC43},{0x62F5, 0xCED7},
- {0x62F6, 0xCEDF},{0x62F7, 0xABFE},{0x62F8, 0xCEDE},{0x62F9, 0xCEDB},{0x62FA, 0xCEE3},{0x62FB, 0xCEE5},{0x62FC, 0xABF7},{0x62FD, 0xABFB},
- {0x62FE, 0xAC42},{0x62FF, 0xAEB3},{0x6300, 0xCEE0},{0x6301, 0xABF9},{0x6302, 0xAC45},{0x6303, 0xCED9},{0x6307, 0xABFC},{0x6308, 0xAEB2},
- {0x6309, 0xABF6},{0x630B, 0xCED6},{0x630C, 0xCEDD},{0x630D, 0xCED5},{0x630E, 0xCED8},{0x630F, 0xCEDC},{0x6310, 0xD1B2},{0x6311, 0xAC44},
- {0x6313, 0xCEE1},{0x6314, 0xCEE2},{0x6315, 0xCEE4},{0x6316, 0xABF5},{0x6328, 0xAEC1},{0x6329, 0xD1BE},{0x632A, 0xAEBF},{0x632B, 0xAEC0},
- {0x632C, 0xD1B4},{0x632D, 0xD1C4},{0x632F, 0xAEB6},{0x6332, 0xD566},{0x6333, 0xD1C6},{0x6334, 0xD1C0},{0x6336, 0xD1B7},{0x6338, 0xD1C9},
- {0x6339, 0xD1BA},{0x633A, 0xAEBC},{0x633B, 0xD57D},{0x633C, 0xD1BD},{0x633D, 0xAEBE},{0x633E, 0xAEB5},{0x6340, 0xD1CB},{0x6341, 0xD1BF},
- {0x6342, 0xAEB8},{0x6343, 0xD1B8},{0x6344, 0xD1B5},{0x6345, 0xD1B6},{0x6346, 0xAEB9},{0x6347, 0xD1C5},{0x6348, 0xD1CC},{0x6349, 0xAEBB},
- {0x634A, 0xD1BC},{0x634B, 0xD1BB},{0x634C, 0xAEC3},{0x634D, 0xAEC2},{0x634E, 0xAEB4},{0x634F, 0xAEBA},{0x6350, 0xAEBD},{0x6351, 0xD1C8},
- {0x6354, 0xD1C2},{0x6355, 0xAEB7},{0x6356, 0xD1B3},{0x6357, 0xD1CA},{0x6358, 0xD1C1},{0x6359, 0xD1C3},{0x635A, 0xD1C7},{0x6365, 0xD567},
- {0x6367, 0xB1B7},{0x6368, 0xB1CB},{0x6369, 0xB1CA},{0x636B, 0xB1BF},{0x636D, 0xD579},{0x636E, 0xD575},{0x636F, 0xD572},{0x6370, 0xD5A6},
- {0x6371, 0xB1BA},{0x6372, 0xB1B2},{0x6375, 0xD577},{0x6376, 0xB4A8},{0x6377, 0xB1B6},{0x6378, 0xD5A1},{0x637A, 0xB1CC},{0x637B, 0xB1C9},
- {0x637C, 0xD57B},{0x637D, 0xD56A},{0x6380, 0xB1C8},{0x6381, 0xD5A3},{0x6382, 0xD569},{0x6383, 0xB1BD},{0x6384, 0xB1C1},{0x6385, 0xD5A2},
- {0x6387, 0xD573},{0x6388, 0xB1C2},{0x6389, 0xB1BC},{0x638A, 0xD568},{0x638C, 0xB478},{0x638D, 0xD5A5},{0x638E, 0xD571},{0x638F, 0xB1C7},
- {0x6390, 0xD574},{0x6391, 0xD5A4},{0x6392, 0xB1C6},{0x6394, 0xD952},{0x6396, 0xB1B3},{0x6397, 0xD56F},{0x6398, 0xB1B8},{0x6399, 0xB1C3},
- {0x639B, 0xB1BE},{0x639C, 0xD578},{0x639D, 0xD56E},{0x639E, 0xD56C},{0x639F, 0xD57E},{0x63A0, 0xB1B0},{0x63A1, 0xB1C4},{0x63A2, 0xB1B4},
- {0x63A3, 0xB477},{0x63A4, 0xD57C},{0x63A5, 0xB1B5},{0x63A7, 0xB1B1},{0x63A8, 0xB1C0},{0x63A9, 0xB1BB},{0x63AA, 0xB1B9},{0x63AB, 0xD570},
- {0x63AC, 0xB1C5},{0x63AD, 0xD56D},{0x63AE, 0xD57A},{0x63AF, 0xD576},{0x63B0, 0xD954},{0x63B1, 0xD953},{0x63BD, 0xD56B},{0x63BE, 0xD964},
- {0x63C0, 0xB47A},{0x63C2, 0xD96A},{0x63C3, 0xD959},{0x63C4, 0xD967},{0x63C5, 0xDD77},{0x63C6, 0xB47D},{0x63C7, 0xD96B},{0x63C8, 0xD96E},
- {0x63C9, 0xB47C},{0x63CA, 0xD95C},{0x63CB, 0xD96D},{0x63CC, 0xD96C},{0x63CD, 0xB47E},{0x63CE, 0xD955},{0x63CF, 0xB479},{0x63D0, 0xB4A3},
- {0x63D2, 0xB4A1},{0x63D3, 0xD969},{0x63D5, 0xD95F},{0x63D6, 0xB4A5},{0x63D7, 0xD970},{0x63D8, 0xD968},{0x63D9, 0xD971},{0x63DA, 0xB4AD},
- {0x63DB, 0xB4AB},{0x63DC, 0xD966},{0x63DD, 0xD965},{0x63DF, 0xD963},{0x63E0, 0xD95D},{0x63E1, 0xB4A4},{0x63E3, 0xB4A2},{0x63E4, 0xD1B9},
- {0x63E5, 0xD956},{0x63E7, 0xDDB7},{0x63E8, 0xD957},{0x63E9, 0xB47B},{0x63EA, 0xB4AA},{0x63EB, 0xDD79},{0x63ED, 0xB4A6},{0x63EE, 0xB4A7},
- {0x63EF, 0xD958},{0x63F0, 0xD96F},{0x63F1, 0xDD78},{0x63F2, 0xD960},{0x63F3, 0xD95B},{0x63F4, 0xB4A9},{0x63F5, 0xD961},{0x63F6, 0xD95E},
- {0x63F9, 0xB4AE},{0x6406, 0xB770},{0x6409, 0xDD7C},{0x640A, 0xDDB1},{0x640B, 0xDDB6},{0x640C, 0xDDAA},{0x640D, 0xB76C},{0x640E, 0xDDBB},
- {0x640F, 0xB769},{0x6410, 0xDD7A},{0x6412, 0xDD7B},{0x6413, 0xB762},{0x6414, 0xB76B},{0x6415, 0xDDA4},{0x6416, 0xB76E},{0x6417, 0xB76F},
- {0x6418, 0xDDA5},{0x641A, 0xDDB2},{0x641B, 0xDDB8},{0x641C, 0xB76A},{0x641E, 0xB764},{0x641F, 0xDDA3},{0x6420, 0xDD7D},{0x6421, 0xDDBA},
- {0x6422, 0xDDA8},{0x6423, 0xDDA9},{0x6424, 0xDD7E},{0x6425, 0xDDB4},{0x6426, 0xDDAB},{0x6427, 0xDDB5},{0x6428, 0xDDAD},{0x642A, 0xB765},
- {0x642B, 0xE1D9},{0x642C, 0xB768},{0x642D, 0xB766},{0x642E, 0xDDB9},{0x642F, 0xDDB0},{0x6430, 0xDDAC},{0x6433, 0xDDA1},{0x6434, 0xBA53},
- {0x6435, 0xDDAF},{0x6436, 0xB76D},{0x6437, 0xDDA7},{0x6439, 0xDDA6},{0x643D, 0xB767},{0x643E, 0xB763},{0x643F, 0xE1EE},{0x6440, 0xDDB3},
- {0x6441, 0xDDAE},{0x6443, 0xDDA2},{0x644B, 0xE1E9},{0x644D, 0xE1DA},{0x644E, 0xE1E5},{0x6450, 0xE1EC},{0x6451, 0xBA51},{0x6452, 0xB4AC},
- {0x6453, 0xE1EA},{0x6454, 0xBA4C},{0x6458, 0xBA4B},{0x6459, 0xE1F1},{0x645B, 0xE1DB},{0x645C, 0xE1E8},{0x645D, 0xE1DC},{0x645E, 0xE1E7},
- {0x645F, 0xBA4F},{0x6460, 0xE1EB},{0x6461, 0xD962},{0x6465, 0xE1F2},{0x6466, 0xE1E3},{0x6467, 0xBA52},{0x6468, 0xE5BA},{0x6469, 0xBCAF},
- {0x646B, 0xE1F0},{0x646C, 0xE1EF},{0x646D, 0xBA54},{0x646E, 0xE5AD},{0x646F, 0xBCB0},{0x6470, 0xE5AE},{0x6472, 0xE1DF},{0x6473, 0xE1E0},
- {0x6474, 0xE1DD},{0x6475, 0xE1E2},{0x6476, 0xE1DE},{0x6477, 0xE1F3},{0x6478, 0xBA4E},{0x6479, 0xBCB1},{0x647A, 0xBA50},{0x647B, 0xBA55},
- {0x647D, 0xE1E1},{0x647F, 0xE1ED},{0x6482, 0xE1E6},{0x6485, 0xE5B1},{0x6487, 0xBA4A},{0x6488, 0xBCB4},{0x6489, 0xE9AA},{0x648A, 0xE5B6},
- {0x648B, 0xE5B5},{0x648C, 0xE5B7},{0x648F, 0xE5B4},{0x6490, 0xBCB5},{0x6492, 0xBCBB},{0x6493, 0xBCB8},{0x6495, 0xBCB9},{0x6496, 0xE5AF},
- {0x6497, 0xE5B2},{0x6498, 0xE5BC},{0x6499, 0xBCC1},{0x649A, 0xBCBF},{0x649C, 0xE5B3},{0x649D, 0xD95A},{0x649E, 0xBCB2},{0x649F, 0xE5B9},
- {0x64A0, 0xE5B0},{0x64A2, 0xBCC2},{0x64A3, 0xE5B8},{0x64A4, 0xBA4D},{0x64A5, 0xBCB7},{0x64A6, 0xE1E4},{0x64A9, 0xBCBA},{0x64AB, 0xBCBE},
- {0x64AC, 0xBCC0},{0x64AD, 0xBCBD},{0x64AE, 0xBCBC},{0x64B0, 0xBCB6},{0x64B1, 0xE5BB},{0x64B2, 0xBCB3},{0x64B3, 0xBCC3},{0x64BB, 0xBED8},
- {0x64BC, 0xBED9},{0x64BD, 0xE9A9},{0x64BE, 0xBEE2},{0x64BF, 0xBEDF},{0x64C1, 0xBED6},{0x64C2, 0xBEDD},{0x64C3, 0xE9AB},{0x64C4, 0xBEDB},
- {0x64C5, 0xBED5},{0x64C7, 0xBEDC},{0x64C9, 0xE9A8},{0x64CA, 0xC0BB},{0x64CB, 0xBED7},{0x64CD, 0xBEDE},{0x64CE, 0xC0BA},{0x64CF, 0xE9A7},
- {0x64D0, 0xE9A6},{0x64D2, 0xBEE0},{0x64D4, 0xBEE1},{0x64D6, 0xE9A5},{0x64D7, 0xE9A4},{0x64D8, 0xC0BC},{0x64D9, 0xE9AE},{0x64DA, 0xBEDA},
- {0x64DB, 0xE9AC},{0x64E0, 0xC0BD},{0x64E2, 0xC0C2},{0x64E3, 0xECEA},{0x64E4, 0xECEC},{0x64E6, 0xC0BF},{0x64E8, 0xECED},{0x64E9, 0xECE9},
- {0x64EB, 0xECEB},{0x64EC, 0xC0C0},{0x64ED, 0xC0C3},{0x64EF, 0xECE8},{0x64F0, 0xC0BE},{0x64F1, 0xC0C1},{0x64F2, 0xC259},{0x64F3, 0xE9AD},
- {0x64F4, 0xC258},{0x64F7, 0xC25E},{0x64F8, 0xEFD4},{0x64FA, 0xC25C},{0x64FB, 0xC25D},{0x64FC, 0xEFD7},{0x64FD, 0xEFD3},{0x64FE, 0xC25A},
- {0x64FF, 0xEFD1},{0x6500, 0xC36B},{0x6501, 0xEFD5},{0x6503, 0xEFD6},{0x6504, 0xEFD2},{0x6506, 0xC25B},{0x6507, 0xF242},{0x6509, 0xF245},
- {0x650C, 0xF246},{0x650D, 0xF244},{0x650E, 0xF247},{0x650F, 0xC36C},{0x6510, 0xF243},{0x6513, 0xF44E},{0x6514, 0xC464},{0x6515, 0xF44D},
- {0x6516, 0xF44C},{0x6517, 0xF44B},{0x6518, 0xC463},{0x6519, 0xC465},{0x651B, 0xF5CD},{0x651C, 0xC4E2},{0x651D, 0xC4E1},{0x6520, 0xF6E1},
- {0x6521, 0xF6E0},{0x6522, 0xF6E3},{0x6523, 0xC5CB},{0x6524, 0xC575},{0x6525, 0xF7DD},{0x6526, 0xF6E2},{0x6529, 0xF7DC},{0x652A, 0xC5CD},
- {0x652B, 0xC5CC},{0x652C, 0xC5F3},{0x652D, 0xF8A9},{0x652E, 0xF8EF},{0x652F, 0xA4E4},{0x6532, 0xD972},{0x6533, 0xE9AF},{0x6536, 0xA6AC},
- {0x6537, 0xCAF7},{0x6538, 0xA7F1},{0x6539, 0xA7EF},{0x653B, 0xA7F0},{0x653D, 0xCCC1},{0x653E, 0xA9F1},{0x653F, 0xAC46},{0x6541, 0xCEE7},
- {0x6543, 0xCEE8},{0x6545, 0xAC47},{0x6546, 0xD1CE},{0x6548, 0xAEC4},{0x6549, 0xAEC5},{0x654A, 0xD1CD},{0x654F, 0xB1D3},{0x6551, 0xB1CF},
- {0x6553, 0xD5A7},{0x6554, 0xB1D6},{0x6555, 0xB1D5},{0x6556, 0xB1CE},{0x6557, 0xB1D1},{0x6558, 0xB1D4},{0x6559, 0xB1D0},{0x655C, 0xD976},
- {0x655D, 0xB1CD},{0x655E, 0xB4AF},{0x6562, 0xB4B1},{0x6563, 0xB4B2},{0x6564, 0xD975},{0x6565, 0xD978},{0x6566, 0xB4B0},{0x6567, 0xD973},
- {0x6568, 0xD977},{0x656A, 0xD974},{0x656C, 0xB771},{0x656F, 0xDDBC},{0x6572, 0xBA56},{0x6573, 0xE1F4},{0x6574, 0xBEE3},{0x6575, 0xBCC4},
- {0x6576, 0xE5BD},{0x6577, 0xBCC5},{0x6578, 0xBCC6},{0x6579, 0xE5BF},{0x657A, 0xE5BE},{0x657B, 0xE5C0},{0x657C, 0xE9B1},{0x657F, 0xE9B0},
- {0x6580, 0xECEF},{0x6581, 0xECEE},{0x6582, 0xC0C4},{0x6583, 0xC0C5},{0x6584, 0xF248},{0x6587, 0xA4E5},{0x658C, 0xD979},{0x6590, 0xB4B4},
- {0x6591, 0xB4B3},{0x6592, 0xDDBD},{0x6594, 0xEFD8},{0x6595, 0xC4E3},{0x6596, 0xF7DE},{0x6597, 0xA4E6},{0x6599, 0xAEC6},{0x659B, 0xB1D8},
- {0x659C, 0xB1D7},{0x659D, 0xD97A},{0x659E, 0xD97B},{0x659F, 0xB772},{0x65A0, 0xE1F5},{0x65A1, 0xBA57},{0x65A2, 0xE9B2},{0x65A4, 0xA4E7},
- {0x65A5, 0xA5B8},{0x65A7, 0xA9F2},{0x65A8, 0xCCC2},{0x65AA, 0xCEE9},{0x65AB, 0xAC48},{0x65AC, 0xB1D9},{0x65AE, 0xD97C},{0x65AF, 0xB4B5},
- {0x65B0, 0xB773},{0x65B2, 0xE5C1},{0x65B3, 0xE5C2},{0x65B6, 0xECF0},{0x65B7, 0xC25F},{0x65B8, 0xF8F0},{0x65B9, 0xA4E8},{0x65BB, 0xCCC3},
- {0x65BC, 0xA9F3},{0x65BD, 0xAC49},{0x65BF, 0xCEEA},{0x65C1, 0xAEC7},{0x65C2, 0xD1D2},{0x65C3, 0xD1D0},{0x65C4, 0xD1D1},{0x65C5, 0xAEC8},
- {0x65C6, 0xD1CF},{0x65CB, 0xB1DB},{0x65CC, 0xB1DC},{0x65CD, 0xD5A8},{0x65CE, 0xB1DD},{0x65CF, 0xB1DA},{0x65D0, 0xD97D},{0x65D2, 0xD97E},
- {0x65D3, 0xDDBE},{0x65D6, 0xBA59},{0x65D7, 0xBA58},{0x65DA, 0xECF1},{0x65DB, 0xEFD9},{0x65DD, 0xF24A},{0x65DE, 0xF249},{0x65DF, 0xF44F},
- {0x65E1, 0xC95E},{0x65E2, 0xAC4A},{0x65E5, 0xA4E9},{0x65E6, 0xA5B9},{0x65E8, 0xA6AE},{0x65E9, 0xA6AD},{0x65EC, 0xA6AF},{0x65ED, 0xA6B0},
- {0x65EE, 0xC9EE},{0x65EF, 0xC9ED},{0x65F0, 0xCAF8},{0x65F1, 0xA7F2},{0x65F2, 0xCAFB},{0x65F3, 0xCAFA},{0x65F4, 0xCAF9},{0x65F5, 0xCAFC},
- {0x65FA, 0xA9F4},{0x65FB, 0xCCC9},{0x65FC, 0xCCC5},{0x65FD, 0xCCCE},{0x6600, 0xA9FB},{0x6602, 0xA9F9},{0x6603, 0xCCCA},{0x6604, 0xCCC6},
- {0x6605, 0xCCCD},{0x6606, 0xA9F8},{0x6607, 0xAA40},{0x6608, 0xCCC8},{0x6609, 0xCCC4},{0x660A, 0xA9FE},{0x660B, 0xCCCB},{0x660C, 0xA9F7},
- {0x660D, 0xCCCC},{0x660E, 0xA9FA},{0x660F, 0xA9FC},{0x6610, 0xCCD0},{0x6611, 0xCCCF},{0x6612, 0xCCC7},{0x6613, 0xA9F6},{0x6614, 0xA9F5},
- {0x6615, 0xA9FD},{0x661C, 0xCEEF},{0x661D, 0xCEF5},{0x661F, 0xAC50},{0x6620, 0xAC4D},{0x6621, 0xCEEC},{0x6622, 0xCEF1},{0x6624, 0xAC53},
- {0x6625, 0xAC4B},{0x6626, 0xCEF0},{0x6627, 0xAC4E},{0x6628, 0xAC51},{0x662B, 0xCEF3},{0x662D, 0xAC4C},{0x662E, 0xCEF8},{0x662F, 0xAC4F},
- {0x6631, 0xAC52},{0x6632, 0xCEED},{0x6633, 0xCEF2},{0x6634, 0xCEF6},{0x6635, 0xCEEE},{0x6636, 0xCEEB},{0x6639, 0xCEF7},{0x663A, 0xCEF4},
- {0x6641, 0xAED0},{0x6642, 0xAEC9},{0x6643, 0xAECC},{0x6645, 0xAECF},{0x6647, 0xD1D5},{0x6649, 0xAECA},{0x664A, 0xD1D3},{0x664C, 0xAECE},
- {0x664F, 0xAECB},{0x6651, 0xD1D6},{0x6652, 0xAECD},{0x6659, 0xD5AC},{0x665A, 0xB1DF},{0x665B, 0xD5AB},{0x665C, 0xD5AD},{0x665D, 0xB1DE},
- {0x665E, 0xB1E3},{0x665F, 0xD1D4},{0x6661, 0xD5AA},{0x6662, 0xD5AE},{0x6664, 0xB1E0},{0x6665, 0xD5A9},{0x6666, 0xB1E2},{0x6668, 0xB1E1},
- {0x666A, 0xD9A7},{0x666C, 0xD9A2},{0x666E, 0xB4B6},{0x666F, 0xB4BA},{0x6670, 0xB4B7},{0x6671, 0xD9A5},{0x6672, 0xD9A8},{0x6674, 0xB4B8},
- {0x6676, 0xB4B9},{0x6677, 0xB4BE},{0x6678, 0xDDC7},{0x6679, 0xD9A6},{0x667A, 0xB4BC},{0x667B, 0xD9A3},{0x667C, 0xD9A1},{0x667E, 0xB4BD},
- {0x6680, 0xD9A4},{0x6684, 0xB779},{0x6686, 0xDDBF},{0x6687, 0xB776},{0x6688, 0xB777},{0x6689, 0xB775},{0x668A, 0xDDC4},{0x668B, 0xDDC3},
- {0x668C, 0xDDC0},{0x668D, 0xB77B},{0x6690, 0xDDC2},{0x6691, 0xB4BB},{0x6694, 0xDDC6},{0x6695, 0xDDC1},{0x6696, 0xB778},{0x6697, 0xB774},
- {0x6698, 0xB77A},{0x6699, 0xDDC5},{0x669D, 0xBA5C},{0x669F, 0xE1F8},{0x66A0, 0xE1F7},{0x66A1, 0xE1F6},{0x66A2, 0xBA5A},{0x66A8, 0xBA5B},
- {0x66A9, 0xE5C5},{0x66AA, 0xE5C8},{0x66AB, 0xBCC8},{0x66AE, 0xBCC7},{0x66AF, 0xE5C9},{0x66B0, 0xE5C4},{0x66B1, 0xBCCA},{0x66B2, 0xE5C6},
- {0x66B4, 0xBCC9},{0x66B5, 0xE5C3},{0x66B7, 0xE5C7},{0x66B8, 0xBEE9},{0x66B9, 0xBEE6},{0x66BA, 0xE9BB},{0x66BB, 0xE9BA},{0x66BD, 0xE9B9},
- {0x66BE, 0xE9B4},{0x66C0, 0xE9B5},{0x66C4, 0xBEE7},{0x66C6, 0xBEE4},{0x66C7, 0xBEE8},{0x66C8, 0xE9B3},{0x66C9, 0xBEE5},{0x66CA, 0xE9B6},
- {0x66CB, 0xE9B7},{0x66CC, 0xE9BC},{0x66CF, 0xE9B8},{0x66D2, 0xECF2},{0x66D6, 0xC0C7},{0x66D8, 0xEFDC},{0x66D9, 0xC0C6},{0x66DA, 0xEFDA},
- {0x66DB, 0xEFDB},{0x66DC, 0xC260},{0x66DD, 0xC36E},{0x66DE, 0xF24B},{0x66E0, 0xC36D},{0x66E3, 0xF451},{0x66E4, 0xF452},{0x66E6, 0xC466},
- {0x66E8, 0xF450},{0x66E9, 0xC4E4},{0x66EB, 0xF7DF},{0x66EC, 0xC5CE},{0x66ED, 0xF8AA},{0x66EE, 0xF8AB},{0x66F0, 0xA4EA},{0x66F2, 0xA6B1},
- {0x66F3, 0xA6B2},{0x66F4, 0xA7F3},{0x66F6, 0xCCD1},{0x66F7, 0xAC54},{0x66F8, 0xAED1},{0x66F9, 0xB1E4},{0x66FC, 0xB0D2},{0x66FE, 0xB4BF},
- {0x66FF, 0xB4C0},{0x6700, 0xB3CC},{0x6701, 0xD9A9},{0x6703, 0xB77C},{0x6704, 0xE1FA},{0x6705, 0xE1F9},{0x6708, 0xA4EB},{0x6709, 0xA6B3},
- {0x670A, 0xCCD2},{0x670B, 0xAA42},{0x670D, 0xAA41},{0x670F, 0xCEF9},{0x6710, 0xCEFA},{0x6712, 0xD1D7},{0x6713, 0xD1D8},{0x6714, 0xAED2},
- {0x6715, 0xAED3},{0x6717, 0xAED4},{0x6718, 0xD5AF},{0x671B, 0xB1E6},{0x671D, 0xB4C2},{0x671F, 0xB4C1},{0x6720, 0xDDC8},{0x6721, 0xDF7A},
- {0x6722, 0xE1FB},{0x6723, 0xE9BD},{0x6726, 0xC261},{0x6727, 0xC467},{0x6728, 0xA4EC},{0x672A, 0xA5BC},{0x672B, 0xA5BD},{0x672C, 0xA5BB},
- {0x672D, 0xA5BE},{0x672E, 0xA5BA},{0x6731, 0xA6B6},{0x6733, 0xC9F6},{0x6734, 0xA6B5},{0x6735, 0xA6B7},{0x6738, 0xC9F1},{0x6739, 0xC9F0},
- {0x673A, 0xC9F3},{0x673B, 0xC9F2},{0x673C, 0xC9F5},{0x673D, 0xA6B4},{0x673E, 0xC9EF},{0x673F, 0xC9F4},{0x6745, 0xCAFD},{0x6746, 0xA7FD},
- {0x6747, 0xCAFE},{0x6748, 0xCB43},{0x6749, 0xA7FC},{0x674B, 0xCB47},{0x674C, 0xCB42},{0x674D, 0xCB45},{0x674E, 0xA7F5},{0x674F, 0xA7F6},
- {0x6750, 0xA7F7},{0x6751, 0xA7F8},{0x6753, 0xA840},{0x6755, 0xCB41},{0x6756, 0xA7FA},{0x6757, 0xA841},{0x6759, 0xCB40},{0x675A, 0xCB46},
- {0x675C, 0xA7F9},{0x675D, 0xCB44},{0x675E, 0xA7FB},{0x675F, 0xA7F4},{0x6760, 0xA7FE},{0x676A, 0xAA57},{0x676C, 0xCCD4},{0x676D, 0xAA43},
- {0x676F, 0xAA4D},{0x6770, 0xAA4E},{0x6771, 0xAA46},{0x6772, 0xAA58},{0x6773, 0xAA48},{0x6774, 0xCCDC},{0x6775, 0xAA53},{0x6776, 0xCCD7},
- {0x6777, 0xAA49},{0x6778, 0xCCE6},{0x6779, 0xCCE7},{0x677A, 0xCCDF},{0x677B, 0xCCD8},{0x677C, 0xAA56},{0x677D, 0xCCE4},{0x677E, 0xAA51},
- {0x677F, 0xAA4F},{0x6781, 0xCCE5},{0x6783, 0xCCE3},{0x6784, 0xCCDB},{0x6785, 0xCCD3},{0x6786, 0xCCDA},{0x6787, 0xAA4A},{0x6789, 0xAA50},
- {0x678B, 0xAA44},{0x678C, 0xCCDE},{0x678D, 0xCCDD},{0x678E, 0xCCD5},{0x6790, 0xAA52},{0x6791, 0xCCE1},{0x6792, 0xCCD6},{0x6793, 0xAA55},
- {0x6794, 0xCCE8},{0x6795, 0xAA45},{0x6797, 0xAA4C},{0x6798, 0xCCD9},{0x6799, 0xCCE2},{0x679A, 0xAA54},{0x679C, 0xAA47},{0x679D, 0xAA4B},
- {0x679F, 0xCCE0},{0x67AE, 0xCF5B},{0x67AF, 0xAC5C},{0x67B0, 0xAC69},{0x67B2, 0xCF56},{0x67B3, 0xCF4C},{0x67B4, 0xAC62},{0x67B5, 0xCF4A},
- {0x67B6, 0xAC5B},{0x67B7, 0xCF45},{0x67B8, 0xAC65},{0x67B9, 0xCF52},{0x67BA, 0xCEFE},{0x67BB, 0xCF41},{0x67C0, 0xCF44},{0x67C1, 0xCEFB},
- {0x67C2, 0xCF51},{0x67C3, 0xCF61},{0x67C4, 0xAC60},{0x67C5, 0xCF46},{0x67C6, 0xCF58},{0x67C8, 0xCEFD},{0x67C9, 0xCF5F},{0x67CA, 0xCF60},
- {0x67CB, 0xCF63},{0x67CC, 0xCF5A},{0x67CD, 0xCF4B},{0x67CE, 0xCF53},{0x67CF, 0xAC66},{0x67D0, 0xAC59},{0x67D1, 0xAC61},{0x67D2, 0xAC6D},
- {0x67D3, 0xAC56},{0x67D4, 0xAC58},{0x67D8, 0xCF43},{0x67D9, 0xAC6A},{0x67DA, 0xAC63},{0x67DB, 0xCF5D},{0x67DC, 0xCF40},{0x67DD, 0xAC6C},
- {0x67DE, 0xAC67},{0x67DF, 0xCF49},{0x67E2, 0xAC6B},{0x67E3, 0xCF50},{0x67E4, 0xCF48},{0x67E5, 0xAC64},{0x67E6, 0xCF5C},{0x67E7, 0xCF54},
- {0x67E9, 0xAC5E},{0x67EA, 0xCF62},{0x67EB, 0xCF47},{0x67EC, 0xAC5A},{0x67ED, 0xCF59},{0x67EE, 0xCF4F},{0x67EF, 0xAC5F},{0x67F0, 0xCF55},
- {0x67F1, 0xAC57},{0x67F2, 0xCEFC},{0x67F3, 0xAC68},{0x67F4, 0xAEE3},{0x67F5, 0xAC5D},{0x67F6, 0xCF4E},{0x67F7, 0xCF4D},{0x67F8, 0xCF42},
- {0x67FA, 0xCF5E},{0x67FC, 0xCF57},{0x67FF, 0xAC55},{0x6812, 0xD1EC},{0x6813, 0xAEEA},{0x6814, 0xD1ED},{0x6816, 0xD1E1},{0x6817, 0xAEDF},
- {0x6818, 0xAEEB},{0x681A, 0xD1DA},{0x681C, 0xD1E3},{0x681D, 0xD1EB},{0x681F, 0xD1D9},{0x6820, 0xD1F4},{0x6821, 0xAED5},{0x6825, 0xD1F3},
- {0x6826, 0xD1EE},{0x6828, 0xD1EF},{0x6829, 0xAEDD},{0x682A, 0xAEE8},{0x682B, 0xD1E5},{0x682D, 0xD1E6},{0x682E, 0xD1F0},{0x682F, 0xD1E7},
- {0x6831, 0xD1E2},{0x6832, 0xD1DC},{0x6833, 0xD1DD},{0x6834, 0xD1EA},{0x6835, 0xD1E4},{0x6838, 0xAED6},{0x6839, 0xAEDA},{0x683A, 0xD1F2},
- {0x683B, 0xD1DE},{0x683C, 0xAEE6},{0x683D, 0xAEE2},{0x6840, 0xAEE5},{0x6841, 0xAEEC},{0x6842, 0xAEDB},{0x6843, 0xAEE7},{0x6844, 0xD1E9},
- {0x6845, 0xAEE9},{0x6846, 0xAED8},{0x6848, 0xAED7},{0x6849, 0xD1DB},{0x684B, 0xD1DF},{0x684C, 0xAEE0},{0x684D, 0xD1F1},{0x684E, 0xD1E8},
- {0x684F, 0xD1E0},{0x6850, 0xAEE4},{0x6851, 0xAEE1},{0x6853, 0xAED9},{0x6854, 0xAEDC},{0x686B, 0xD5C4},{0x686D, 0xD5B4},{0x686E, 0xD5B5},
- {0x686F, 0xD5B9},{0x6871, 0xD5C8},{0x6872, 0xD5C5},{0x6874, 0xD5BE},{0x6875, 0xD5BD},{0x6876, 0xB1ED},{0x6877, 0xD5C1},{0x6878, 0xD5D0},
- {0x6879, 0xD5B0},{0x687B, 0xD5D1},{0x687C, 0xD5C3},{0x687D, 0xD5D5},{0x687E, 0xD5C9},{0x687F, 0xB1EC},{0x6880, 0xD5C7},{0x6881, 0xB1E7},
- {0x6882, 0xB1FC},{0x6883, 0xB1F2},{0x6885, 0xB1F6},{0x6886, 0xB1F5},{0x6887, 0xD5B1},{0x6889, 0xD5CE},{0x688A, 0xD5D4},{0x688B, 0xD5CC},
- {0x688C, 0xD5D3},{0x688F, 0xD5C0},{0x6890, 0xD5B2},{0x6891, 0xD5D2},{0x6892, 0xD5C2},{0x6893, 0xB1EA},{0x6894, 0xB1F7},{0x6896, 0xD5CB},
- {0x6897, 0xB1F0},{0x689B, 0xD5CA},{0x689C, 0xD5B3},{0x689D, 0xB1F8},{0x689F, 0xB1FA},{0x68A0, 0xD5CD},{0x68A1, 0xB1FB},{0x68A2, 0xB1E9},
- {0x68A3, 0xD5BA},{0x68A4, 0xD5CF},{0x68A7, 0xB1EF},{0x68A8, 0xB1F9},{0x68A9, 0xD5BC},{0x68AA, 0xD5C6},{0x68AB, 0xD5B7},{0x68AC, 0xD5BB},
- {0x68AD, 0xB1F4},{0x68AE, 0xD5B6},{0x68AF, 0xB1E8},{0x68B0, 0xB1F1},{0x68B1, 0xB1EE},{0x68B2, 0xD5BF},{0x68B3, 0xAEDE},{0x68B4, 0xD9C0},
- {0x68B5, 0xB1EB},{0x68C4, 0xB1F3},{0x68C6, 0xD9C3},{0x68C7, 0xD9D9},{0x68C8, 0xD9CE},{0x68C9, 0xB4D6},{0x68CB, 0xB4D1},{0x68CC, 0xD9BD},
- {0x68CD, 0xB4D2},{0x68CE, 0xD9CD},{0x68D0, 0xD9C6},{0x68D1, 0xD9D3},{0x68D2, 0xB4CE},{0x68D3, 0xD9AB},{0x68D4, 0xD9D5},{0x68D5, 0xB4C4},
- {0x68D6, 0xD9B3},{0x68D7, 0xB4C7},{0x68D8, 0xB4C6},{0x68DA, 0xB4D7},{0x68DC, 0xD9AD},{0x68DD, 0xD9CF},{0x68DE, 0xD9D0},{0x68DF, 0xB4C9},
- {0x68E0, 0xB4C5},{0x68E1, 0xD9BB},{0x68E3, 0xB4D0},{0x68E4, 0xD9B6},{0x68E6, 0xD9D1},{0x68E7, 0xB4CC},{0x68E8, 0xD9C9},{0x68E9, 0xD9D6},
- {0x68EA, 0xD9B0},{0x68EB, 0xD9B5},{0x68EC, 0xD9AF},{0x68EE, 0xB4CB},{0x68EF, 0xD9C2},{0x68F0, 0xDDDE},{0x68F1, 0xD9B1},{0x68F2, 0xB4CF},
- {0x68F3, 0xD9BA},{0x68F4, 0xD9D2},{0x68F5, 0xB4CA},{0x68F6, 0xD9B7},{0x68F7, 0xD9B4},{0x68F8, 0xD9C5},{0x68F9, 0xB4CD},{0x68FA, 0xB4C3},
- {0x68FB, 0xB4D9},{0x68FC, 0xD9C8},{0x68FD, 0xD9C7},{0x6904, 0xD9AC},{0x6905, 0xB4C8},{0x6906, 0xD9D4},{0x6907, 0xD9BC},{0x6908, 0xD9BE},
- {0x690A, 0xD9CB},{0x690B, 0xD9CA},{0x690C, 0xD9AA},{0x690D, 0xB4D3},{0x690E, 0xB4D5},{0x690F, 0xD9B2},{0x6910, 0xD9B9},{0x6911, 0xD9C1},
- {0x6912, 0xB4D4},{0x6913, 0xD9B8},{0x6914, 0xD9C4},{0x6915, 0xD9D7},{0x6917, 0xD9CC},{0x6925, 0xD9D8},{0x692A, 0xD9AE},{0x692F, 0xDDF2},
- {0x6930, 0xB7A6},{0x6932, 0xDDF0},{0x6933, 0xDDDB},{0x6934, 0xDDE0},{0x6935, 0xDDD9},{0x6937, 0xDDEC},{0x6938, 0xDDCB},{0x6939, 0xDDD2},
- {0x693B, 0xDDEA},{0x693C, 0xDDF4},{0x693D, 0xDDDC},{0x693F, 0xDDCF},{0x6940, 0xDDE2},{0x6941, 0xDDE7},{0x6942, 0xDDD3},{0x6944, 0xDDE4},
- {0x6945, 0xDDD0},{0x6948, 0xDDD7},{0x6949, 0xDDD8},{0x694A, 0xB7A8},{0x694B, 0xDDEB},{0x694C, 0xDDE9},{0x694E, 0xDDCC},{0x694F, 0xDDEE},
- {0x6951, 0xDDEF},{0x6952, 0xDDF1},{0x6953, 0xB7AC},{0x6954, 0xB7A4},{0x6956, 0xD5B8},{0x6957, 0xDDD4},{0x6958, 0xDDE6},{0x6959, 0xDDD5},
- {0x695A, 0xB7A1},{0x695B, 0xB7B1},{0x695C, 0xDDED},{0x695D, 0xB7AF},{0x695E, 0xB7AB},{0x695F, 0xDDCA},{0x6960, 0xB7A3},{0x6962, 0xDDCD},
- {0x6963, 0xB7B0},{0x6965, 0xDDDD},{0x6966, 0xDDC9},{0x6968, 0xB7A9},{0x6969, 0xDDE1},{0x696A, 0xDDD1},{0x696B, 0xB7AA},{0x696C, 0xDDDA},
- {0x696D, 0xB77E},{0x696E, 0xB4D8},{0x696F, 0xDDE3},{0x6970, 0xD9BF},{0x6971, 0xDDCE},{0x6974, 0xDDE8},{0x6975, 0xB7A5},{0x6976, 0xDDE5},
- {0x6977, 0xB7A2},{0x6978, 0xDDDF},{0x6979, 0xB7AD},{0x697A, 0xDDD6},{0x697B, 0xDDF3},{0x6982, 0xB7A7},{0x6983, 0xDEC6},{0x6986, 0xB7AE},
- {0x698D, 0xE24A},{0x698E, 0xE248},{0x6990, 0xE25E},{0x6991, 0xE246},{0x6993, 0xE258},{0x6994, 0xB77D},{0x6995, 0xBA5F},{0x6996, 0xE242},
- {0x6997, 0xE25D},{0x6999, 0xE247},{0x699A, 0xE255},{0x699B, 0xBA64},{0x699C, 0xBA5D},{0x699E, 0xE25B},{0x69A0, 0xE240},{0x69A1, 0xE25A},
- {0x69A3, 0xBA6F},{0x69A4, 0xE251},{0x69A5, 0xE261},{0x69A6, 0xBA6D},{0x69A7, 0xE249},{0x69A8, 0xBA5E},{0x69A9, 0xE24B},{0x69AA, 0xE259},
- {0x69AB, 0xBA67},{0x69AC, 0xE244},{0x69AD, 0xBA6B},{0x69AE, 0xBA61},{0x69AF, 0xE24D},{0x69B0, 0xE243},{0x69B1, 0xE1FC},{0x69B3, 0xE257},
- {0x69B4, 0xBA68},{0x69B5, 0xE260},{0x69B6, 0xE1FD},{0x69B7, 0xBA65},{0x69B9, 0xE253},{0x69BB, 0xBA66},{0x69BC, 0xE245},{0x69BD, 0xE250},
- {0x69BE, 0xE24C},{0x69BF, 0xE24E},{0x69C1, 0xBA60},{0x69C2, 0xE25F},{0x69C3, 0xBA6E},{0x69C4, 0xE24F},{0x69C6, 0xE262},{0x69C9, 0xE1FE},
- {0x69CA, 0xE254},{0x69CB, 0xBA63},{0x69CC, 0xBA6C},{0x69CD, 0xBA6A},{0x69CE, 0xE241},{0x69CF, 0xE256},{0x69D0, 0xBA69},{0x69D3, 0xBA62},
- {0x69D4, 0xE252},{0x69D9, 0xE25C},{0x69E2, 0xE5D5},{0x69E4, 0xE5D1},{0x69E5, 0xE5CD},{0x69E6, 0xE5E1},{0x69E7, 0xE5DE},{0x69E8, 0xBCCD},
- {0x69EB, 0xE5E5},{0x69EC, 0xE5D4},{0x69ED, 0xBCD8},{0x69EE, 0xE5DB},{0x69F1, 0xE5D0},{0x69F2, 0xE5DA},{0x69F3, 0xBCD5},{0x69F4, 0xE5EE},
- {0x69F6, 0xE5EB},{0x69F7, 0xE5DD},{0x69F8, 0xE5CE},{0x69FB, 0xE5E2},{0x69FC, 0xE5E4},{0x69FD, 0xBCD1},{0x69FE, 0xE5D8},{0x69FF, 0xE5D3},
- {0x6A00, 0xE5CA},{0x6A01, 0xBCCE},{0x6A02, 0xBCD6},{0x6A04, 0xE5E7},{0x6A05, 0xBCD7},{0x6A06, 0xE5CB},{0x6A07, 0xE5ED},{0x6A08, 0xE5E0},
- {0x6A09, 0xE5E6},{0x6A0A, 0xBCD4},{0x6A0D, 0xE5E3},{0x6A0F, 0xE5EA},{0x6A11, 0xBCD9},{0x6A13, 0xBCD3},{0x6A14, 0xE5DC},{0x6A15, 0xE5CF},
- {0x6A16, 0xE5EF},{0x6A17, 0xE5CC},{0x6A18, 0xE5E8},{0x6A19, 0xBCD0},{0x6A1B, 0xE5D6},{0x6A1D, 0xE5D7},{0x6A1E, 0xBCCF},{0x6A1F, 0xBCCC},
- {0x6A20, 0xE5D2},{0x6A21, 0xBCD2},{0x6A23, 0xBCCB},{0x6A25, 0xE5E9},{0x6A26, 0xE5EC},{0x6A27, 0xE5D9},{0x6A28, 0xE9CA},{0x6A32, 0xE9C2},
- {0x6A34, 0xE9BE},{0x6A35, 0xBEF6},{0x6A38, 0xBEEB},{0x6A39, 0xBEF0},{0x6A3A, 0xBEEC},{0x6A3B, 0xE9CC},{0x6A3C, 0xE9D7},{0x6A3D, 0xBEEA},
- {0x6A3E, 0xE9C4},{0x6A3F, 0xE9CD},{0x6A40, 0xE5DF},{0x6A41, 0xE9CE},{0x6A44, 0xBEF1},{0x6A46, 0xE9DD},{0x6A47, 0xBEF5},{0x6A48, 0xBEF8},
- {0x6A49, 0xE9C0},{0x6A4B, 0xBEF4},{0x6A4D, 0xE9DB},{0x6A4E, 0xE9DC},{0x6A4F, 0xE9D2},{0x6A50, 0xE9D1},{0x6A51, 0xE9C9},{0x6A54, 0xE9D3},
- {0x6A55, 0xE9DA},{0x6A56, 0xE9D9},{0x6A58, 0xBEEF},{0x6A59, 0xBEED},{0x6A5A, 0xE9CB},{0x6A5B, 0xE9C8},{0x6A5D, 0xE9C5},{0x6A5E, 0xE9D8},
- {0x6A5F, 0xBEF7},{0x6A60, 0xE9D6},{0x6A61, 0xBEF3},{0x6A62, 0xBEF2},{0x6A64, 0xE9D0},{0x6A66, 0xE9BF},{0x6A67, 0xE9C1},{0x6A68, 0xE9C3},
- {0x6A69, 0xE9D5},{0x6A6A, 0xE9CF},{0x6A6B, 0xBEEE},{0x6A6D, 0xE9C6},{0x6A6F, 0xE9D4},{0x6A76, 0xE9C7},{0x6A7E, 0xC0CF},{0x6A7F, 0xED45},
- {0x6A80, 0xC0C8},{0x6A81, 0xECF5},{0x6A83, 0xED41},{0x6A84, 0xC0CA},{0x6A85, 0xED48},{0x6A87, 0xECFC},{0x6A89, 0xECF7},{0x6A8C, 0xED49},
- {0x6A8D, 0xECF3},{0x6A8E, 0xECFE},{0x6A90, 0xC0D1},{0x6A91, 0xED44},{0x6A92, 0xED4A},{0x6A93, 0xECFD},{0x6A94, 0xC0C9},{0x6A95, 0xED40},
- {0x6A96, 0xECF4},{0x6A97, 0xC0D0},{0x6A9A, 0xED47},{0x6A9B, 0xECF9},{0x6A9C, 0xC0CC},{0x6A9E, 0xECFB},{0x6A9F, 0xECF8},{0x6AA0, 0xC0D2},
- {0x6AA1, 0xECFA},{0x6AA2, 0xC0CB},{0x6AA3, 0xC0CE},{0x6AA4, 0xED43},{0x6AA5, 0xECF6},{0x6AA6, 0xED46},{0x6AA8, 0xED42},{0x6AAC, 0xC263},
- {0x6AAD, 0xEFE7},{0x6AAE, 0xC268},{0x6AAF, 0xC269},{0x6AB3, 0xC262},{0x6AB4, 0xEFE6},{0x6AB6, 0xEFE3},{0x6AB7, 0xEFE4},{0x6AB8, 0xC266},
- {0x6AB9, 0xEFDE},{0x6ABA, 0xEFE2},{0x6ABB, 0xC265},{0x6ABD, 0xEFDF},{0x6AC2, 0xC267},{0x6AC3, 0xC264},{0x6AC5, 0xEFDD},{0x6AC6, 0xEFE1},
- {0x6AC7, 0xEFE5},{0x6ACB, 0xF251},{0x6ACC, 0xF24E},{0x6ACD, 0xF257},{0x6ACF, 0xF256},{0x6AD0, 0xF254},{0x6AD1, 0xF24F},{0x6AD3, 0xC372},
- {0x6AD9, 0xF250},{0x6ADA, 0xC371},{0x6ADB, 0xC0CD},{0x6ADC, 0xF253},{0x6ADD, 0xC370},{0x6ADE, 0xF258},{0x6ADF, 0xF252},{0x6AE0, 0xF24D},
- {0x6AE1, 0xEFE0},{0x6AE5, 0xC36F},{0x6AE7, 0xF24C},{0x6AE8, 0xF456},{0x6AEA, 0xF455},{0x6AEB, 0xF255},{0x6AEC, 0xC468},{0x6AEE, 0xF459},
- {0x6AEF, 0xF45A},{0x6AF0, 0xF454},{0x6AF1, 0xF458},{0x6AF3, 0xF453},{0x6AF8, 0xF5D1},{0x6AF9, 0xF457},{0x6AFA, 0xC4E7},{0x6AFB, 0xC4E5},
- {0x6AFC, 0xF5CF},{0x6B00, 0xF5D2},{0x6B02, 0xF5CE},{0x6B03, 0xF5D0},{0x6B04, 0xC4E6},{0x6B08, 0xF6E5},{0x6B09, 0xF6E6},{0x6B0A, 0xC576},
- {0x6B0B, 0xF6E4},{0x6B0F, 0xF7E2},{0x6B10, 0xC5CF},{0x6B11, 0xF7E0},{0x6B12, 0xF7E1},{0x6B13, 0xF8AC},{0x6B16, 0xC656},{0x6B17, 0xF8F3},
- {0x6B18, 0xF8F1},{0x6B19, 0xF8F2},{0x6B1A, 0xF8F4},{0x6B1E, 0xF9BB},{0x6B20, 0xA4ED},{0x6B21, 0xA6B8},{0x6B23, 0xAA59},{0x6B25, 0xCCE9},
- {0x6B28, 0xCF64},{0x6B2C, 0xD1F5},{0x6B2D, 0xD1F7},{0x6B2F, 0xD1F6},{0x6B31, 0xD1F8},{0x6B32, 0xB1FD},{0x6B33, 0xD5D7},{0x6B34, 0xD1F9},
- {0x6B36, 0xD5D6},{0x6B37, 0xD5D8},{0x6B38, 0xD5D9},{0x6B39, 0xD9DA},{0x6B3A, 0xB4DB},{0x6B3B, 0xD9DB},{0x6B3C, 0xD9DD},{0x6B3D, 0xB4DC},
- {0x6B3E, 0xB4DA},{0x6B3F, 0xD9DC},{0x6B41, 0xDDFA},{0x6B42, 0xDDF8},{0x6B43, 0xDDF7},{0x6B45, 0xDDF6},{0x6B46, 0xDDF5},{0x6B47, 0xB7B2},
- {0x6B48, 0xDDF9},{0x6B49, 0xBA70},{0x6B4A, 0xE263},{0x6B4B, 0xE265},{0x6B4C, 0xBA71},{0x6B4D, 0xE264},{0x6B4E, 0xBCDB},{0x6B50, 0xBCDA},
- {0x6B51, 0xE5F0},{0x6B54, 0xE9DF},{0x6B55, 0xE9DE},{0x6B56, 0xE9E0},{0x6B59, 0xBEF9},{0x6B5B, 0xED4B},{0x6B5C, 0xC0D3},{0x6B5E, 0xEFE8},
- {0x6B5F, 0xC26A},{0x6B60, 0xF259},{0x6B61, 0xC577},{0x6B62, 0xA4EE},{0x6B63, 0xA5BF},{0x6B64, 0xA6B9},{0x6B65, 0xA842},{0x6B66, 0xAA5A},
- {0x6B67, 0xAA5B},{0x6B6A, 0xAC6E},{0x6B6D, 0xD1FA},{0x6B72, 0xB7B3},{0x6B76, 0xE6D1},{0x6B77, 0xBEFA},{0x6B78, 0xC26B},{0x6B79, 0xA4EF},
- {0x6B7B, 0xA6BA},{0x6B7E, 0xCCEB},{0x6B7F, 0xAA5C},{0x6B80, 0xCCEA},{0x6B82, 0xCF65},{0x6B83, 0xAC6F},{0x6B84, 0xCF66},{0x6B86, 0xAC70},
- {0x6B88, 0xD1FC},{0x6B89, 0xAEEE},{0x6B8A, 0xAEED},{0x6B8C, 0xD5DE},{0x6B8D, 0xD5DC},{0x6B8E, 0xD5DD},{0x6B8F, 0xD5DB},{0x6B91, 0xD5DA},
- {0x6B94, 0xD9DE},{0x6B95, 0xD9E1},{0x6B96, 0xB4DE},{0x6B97, 0xD9DF},{0x6B98, 0xB4DD},{0x6B99, 0xD9E0},{0x6B9B, 0xDDFB},{0x6B9E, 0xE266},
- {0x6B9F, 0xE267},{0x6BA0, 0xE268},{0x6BA2, 0xE5F3},{0x6BA3, 0xE5F2},{0x6BA4, 0xBCDC},{0x6BA5, 0xE5F1},{0x6BA6, 0xE5F4},{0x6BA7, 0xE9E1},
- {0x6BAA, 0xE9E2},{0x6BAB, 0xE9E3},{0x6BAD, 0xED4C},{0x6BAE, 0xC0D4},{0x6BAF, 0xC26C},{0x6BB0, 0xF25A},{0x6BB2, 0xC4E8},{0x6BB3, 0xC95F},
- {0x6BB5, 0xAC71},{0x6BB6, 0xCF67},{0x6BB7, 0xAEEF},{0x6BBA, 0xB1FE},{0x6BBC, 0xB4DF},{0x6BBD, 0xD9E2},{0x6BBF, 0xB7B5},{0x6BC0, 0xB7B4},
- {0x6BC3, 0xE269},{0x6BC4, 0xE26A},{0x6BC5, 0xBCDD},{0x6BC6, 0xBCDE},{0x6BC7, 0xE9E5},{0x6BC8, 0xE9E4},{0x6BC9, 0xEFE9},{0x6BCA, 0xF7E3},
- {0x6BCB, 0xA4F0},{0x6BCC, 0xC960},{0x6BCD, 0xA5C0},{0x6BCF, 0xA843},{0x6BD0, 0xCB48},{0x6BD2, 0xAC72},{0x6BD3, 0xB7B6},{0x6BD4, 0xA4F1},
- {0x6BD6, 0xCF68},{0x6BD7, 0xAC73},{0x6BD8, 0xCF69},{0x6BDA, 0xC0D5},{0x6BDB, 0xA4F2},{0x6BDE, 0xCCEC},{0x6BE0, 0xCF6A},{0x6BE2, 0xD242},
- {0x6BE3, 0xD241},{0x6BE4, 0xD1FE},{0x6BE6, 0xD1FD},{0x6BE7, 0xD243},{0x6BE8, 0xD240},{0x6BEB, 0xB240},{0x6BEC, 0xB241},{0x6BEF, 0xB4E0},
- {0x6BF0, 0xD9E3},{0x6BF2, 0xD9E4},{0x6BF3, 0xD9E5},{0x6BF7, 0xDE41},{0x6BF8, 0xDE42},{0x6BF9, 0xDE40},{0x6BFB, 0xDDFD},{0x6BFC, 0xDDFE},
- {0x6BFD, 0xB7B7},{0x6BFE, 0xE26B},{0x6BFF, 0xE5F7},{0x6C00, 0xE5F6},{0x6C01, 0xE5F5},{0x6C02, 0xE5F8},{0x6C03, 0xE9E7},{0x6C04, 0xE9E6},
- {0x6C05, 0xBEFB},{0x6C06, 0xE9E8},{0x6C08, 0xC0D6},{0x6C09, 0xED4D},{0x6C0B, 0xEFEA},{0x6C0C, 0xF25B},{0x6C0D, 0xF6E7},{0x6C0F, 0xA4F3},
- {0x6C10, 0xA5C2},{0x6C11, 0xA5C1},{0x6C13, 0xAA5D},{0x6C14, 0xC961},{0x6C15, 0xC97E},{0x6C16, 0xA6BB},{0x6C18, 0xC9F7},{0x6C19, 0xCB49},
- {0x6C1A, 0xCB4A},{0x6C1B, 0xAA5E},{0x6C1D, 0xCCED},{0x6C1F, 0xAC74},{0x6C20, 0xCF6B},{0x6C21, 0xCF6C},{0x6C23, 0xAEF0},{0x6C24, 0xAEF4},
- {0x6C25, 0xD244},{0x6C26, 0xAEF3},{0x6C27, 0xAEF1},{0x6C28, 0xAEF2},{0x6C2A, 0xD5DF},{0x6C2B, 0xB242},{0x6C2C, 0xB4E3},{0x6C2E, 0xB4E1},
- {0x6C2F, 0xB4E2},{0x6C30, 0xD9E6},{0x6C33, 0xBA72},{0x6C34, 0xA4F4},{0x6C36, 0xC9A1},{0x6C38, 0xA5C3},{0x6C3B, 0xC9A4},{0x6C3E, 0xA5C6},
- {0x6C3F, 0xC9A3},{0x6C40, 0xA5C5},{0x6C41, 0xA5C4},{0x6C42, 0xA844},{0x6C43, 0xC9A2},{0x6C46, 0xC9F8},{0x6C4A, 0xC9FC},{0x6C4B, 0xC9FE},
- {0x6C4C, 0xCA40},{0x6C4D, 0xA6C5},{0x6C4E, 0xA6C6},{0x6C4F, 0xC9FB},{0x6C50, 0xA6C1},{0x6C52, 0xC9F9},{0x6C54, 0xC9FD},{0x6C55, 0xA6C2},
- {0x6C57, 0xA6BD},{0x6C59, 0xA6BE},{0x6C5B, 0xA6C4},{0x6C5C, 0xC9FA},{0x6C5D, 0xA6BC},{0x6C5E, 0xA845},{0x6C5F, 0xA6BF},{0x6C60, 0xA6C0},
- {0x6C61, 0xA6C3},{0x6C65, 0xCB5B},{0x6C66, 0xCB59},{0x6C67, 0xCB4C},{0x6C68, 0xA851},{0x6C69, 0xCB53},{0x6C6A, 0xA84C},{0x6C6B, 0xCB4D},
- {0x6C6D, 0xCB55},{0x6C6F, 0xCB52},{0x6C70, 0xA84F},{0x6C71, 0xCB51},{0x6C72, 0xA856},{0x6C73, 0xCB5A},{0x6C74, 0xA858},{0x6C76, 0xA85A},
- {0x6C78, 0xCB4B},{0x6C7A, 0xA84D},{0x6C7B, 0xCB5C},{0x6C7D, 0xA854},{0x6C7E, 0xA857},{0x6C80, 0xCD45},{0x6C81, 0xA847},{0x6C82, 0xA85E},
- {0x6C83, 0xA855},{0x6C84, 0xCB4E},{0x6C85, 0xA84A},{0x6C86, 0xA859},{0x6C87, 0xCB56},{0x6C88, 0xA848},{0x6C89, 0xA849},{0x6C8A, 0xCD43},
- {0x6C8B, 0xCB4F},{0x6C8C, 0xA850},{0x6C8D, 0xA85B},{0x6C8E, 0xCB5D},{0x6C8F, 0xCB50},{0x6C90, 0xA84E},{0x6C92, 0xA853},{0x6C93, 0xCCEE},
- {0x6C94, 0xA85C},{0x6C95, 0xCB57},{0x6C96, 0xA852},{0x6C98, 0xA85D},{0x6C99, 0xA846},{0x6C9A, 0xCB54},{0x6C9B, 0xA84B},{0x6C9C, 0xCB58},
- {0x6C9D, 0xCD44},{0x6CAB, 0xAA6A},{0x6CAC, 0xAA7A},{0x6CAD, 0xCCF5},{0x6CAE, 0xAA71},{0x6CB0, 0xCD4B},{0x6CB1, 0xAA62},{0x6CB3, 0xAA65},
- {0x6CB4, 0xCD42},{0x6CB6, 0xCCF3},{0x6CB7, 0xCCF7},{0x6CB8, 0xAA6D},{0x6CB9, 0xAA6F},{0x6CBA, 0xCCFA},{0x6CBB, 0xAA76},{0x6CBC, 0xAA68},
- {0x6CBD, 0xAA66},{0x6CBE, 0xAA67},{0x6CBF, 0xAA75},{0x6CC0, 0xCD47},{0x6CC1, 0xAA70},{0x6CC2, 0xCCF9},{0x6CC3, 0xCCFB},{0x6CC4, 0xAA6E},
- {0x6CC5, 0xAA73},{0x6CC6, 0xCCFC},{0x6CC7, 0xCD4A},{0x6CC9, 0xAC75},{0x6CCA, 0xAA79},{0x6CCC, 0xAA63},{0x6CCD, 0xCD49},{0x6CCF, 0xCD4D},
- {0x6CD0, 0xCCF8},{0x6CD1, 0xCD4F},{0x6CD2, 0xCD40},{0x6CD3, 0xAA6C},{0x6CD4, 0xCCF4},{0x6CD5, 0xAA6B},{0x6CD6, 0xAA7D},{0x6CD7, 0xAA72},
- {0x6CD9, 0xCCF2},{0x6CDA, 0xCF75},{0x6CDB, 0xAA78},{0x6CDC, 0xAA7C},{0x6CDD, 0xCD41},{0x6CDE, 0xCD46},{0x6CE0, 0xAA7E},{0x6CE1, 0xAA77},
- {0x6CE2, 0xAA69},{0x6CE3, 0xAA5F},{0x6CE5, 0xAA64},{0x6CE7, 0xCCF6},{0x6CE8, 0xAA60},{0x6CE9, 0xCD4E},{0x6CEB, 0xCCF0},{0x6CEC, 0xCCEF},
- {0x6CED, 0xCCFD},{0x6CEE, 0xCCF1},{0x6CEF, 0xAA7B},{0x6CF0, 0xAEF5},{0x6CF1, 0xAA74},{0x6CF2, 0xCCFE},{0x6CF3, 0xAA61},{0x6CF5, 0xACA6},
- {0x6CF9, 0xCD4C},{0x6D00, 0xCF7C},{0x6D01, 0xCFA1},{0x6D03, 0xCFA4},{0x6D04, 0xCF77},{0x6D07, 0xCFA7},{0x6D08, 0xCFAA},{0x6D09, 0xCFAC},
- {0x6D0A, 0xCF74},{0x6D0B, 0xAC76},{0x6D0C, 0xAC7B},{0x6D0D, 0xD249},{0x6D0E, 0xACAD},{0x6D0F, 0xCFA5},{0x6D10, 0xCFAD},{0x6D11, 0xCF7B},
- {0x6D12, 0xCF73},{0x6D16, 0xD264},{0x6D17, 0xAC7E},{0x6D18, 0xCFA2},{0x6D19, 0xCF78},{0x6D1A, 0xCF7A},{0x6D1B, 0xACA5},{0x6D1D, 0xCF7D},
- {0x6D1E, 0xAC7D},{0x6D1F, 0xCF70},{0x6D20, 0xCFA8},{0x6D22, 0xCFAB},{0x6D25, 0xAC7A},{0x6D27, 0xACA8},{0x6D28, 0xCF6D},{0x6D29, 0xACAA},
- {0x6D2A, 0xAC78},{0x6D2B, 0xACAE},{0x6D2C, 0xCFA9},{0x6D2D, 0xCF6F},{0x6D2E, 0xACAB},{0x6D2F, 0xD25E},{0x6D30, 0xCD48},{0x6D31, 0xAC7C},
- {0x6D32, 0xAC77},{0x6D33, 0xCF76},{0x6D34, 0xCF6E},{0x6D35, 0xACAC},{0x6D36, 0xACA4},{0x6D37, 0xCFA3},{0x6D38, 0xACA9},{0x6D39, 0xACA7},
- {0x6D3A, 0xCF79},{0x6D3B, 0xACA1},{0x6D3C, 0xCF71},{0x6D3D, 0xACA2},{0x6D3E, 0xACA3},{0x6D3F, 0xCF72},{0x6D40, 0xCFA6},{0x6D41, 0xAC79},
- {0x6D42, 0xCF7E},{0x6D58, 0xD24C},{0x6D59, 0xAEFD},{0x6D5A, 0xAF43},{0x6D5E, 0xD255},{0x6D5F, 0xD25B},{0x6D60, 0xD257},{0x6D61, 0xD24A},
- {0x6D62, 0xD24D},{0x6D63, 0xD246},{0x6D64, 0xD247},{0x6D65, 0xAF4A},{0x6D66, 0xAEFA},{0x6D67, 0xD256},{0x6D68, 0xD25F},{0x6D69, 0xAF45},
- {0x6D6A, 0xAEF6},{0x6D6C, 0xAF40},{0x6D6D, 0xD24E},{0x6D6E, 0xAF42},{0x6D6F, 0xD24F},{0x6D70, 0xD259},{0x6D74, 0xAF44},{0x6D75, 0xD268},
- {0x6D76, 0xD248},{0x6D77, 0xAEFC},{0x6D78, 0xAEFB},{0x6D79, 0xAF48},{0x6D7A, 0xD245},{0x6D7B, 0xD266},{0x6D7C, 0xD25A},{0x6D7D, 0xD267},
- {0x6D7E, 0xD261},{0x6D7F, 0xD253},{0x6D80, 0xD262},{0x6D82, 0xD25C},{0x6D83, 0xD265},{0x6D84, 0xD263},{0x6D85, 0xAF49},{0x6D86, 0xD254},
- {0x6D87, 0xAEF9},{0x6D88, 0xAEF8},{0x6D89, 0xAF41},{0x6D8A, 0xAF47},{0x6D8B, 0xD260},{0x6D8C, 0xAF46},{0x6D8D, 0xD251},{0x6D8E, 0xB243},
- {0x6D90, 0xD269},{0x6D91, 0xD250},{0x6D92, 0xD24B},{0x6D93, 0xAEFE},{0x6D94, 0xAF4B},{0x6D95, 0xAEF7},{0x6D97, 0xD258},{0x6D98, 0xD25D},
- {0x6DAA, 0xB265},{0x6DAB, 0xD5E1},{0x6DAC, 0xD5E5},{0x6DAE, 0xB252},{0x6DAF, 0xB250},{0x6DB2, 0xB247},{0x6DB3, 0xD5E3},{0x6DB4, 0xD5E2},
- {0x6DB5, 0xB25B},{0x6DB7, 0xD5E8},{0x6DB8, 0xB255},{0x6DBA, 0xD5FA},{0x6DBB, 0xD647},{0x6DBC, 0xB244},{0x6DBD, 0xD5F7},{0x6DBE, 0xD5F0},
- {0x6DBF, 0xB267},{0x6DC0, 0xD5E0},{0x6DC2, 0xD5FC},{0x6DC4, 0xB264},{0x6DC5, 0xB258},{0x6DC6, 0xB263},{0x6DC7, 0xB24E},{0x6DC8, 0xD5EC},
- {0x6DC9, 0xD5FE},{0x6DCA, 0xD5F6},{0x6DCB, 0xB24F},{0x6DCC, 0xB249},{0x6DCD, 0xD645},{0x6DCF, 0xD5FD},{0x6DD0, 0xD640},{0x6DD1, 0xB251},
- {0x6DD2, 0xB259},{0x6DD3, 0xD642},{0x6DD4, 0xD5EA},{0x6DD5, 0xD5FB},{0x6DD6, 0xD5EF},{0x6DD7, 0xD644},{0x6DD8, 0xB25E},{0x6DD9, 0xB246},
- {0x6DDA, 0xB25C},{0x6DDB, 0xD5F4},{0x6DDC, 0xD5F2},{0x6DDD, 0xD5F3},{0x6DDE, 0xB253},{0x6DDF, 0xD5EE},{0x6DE0, 0xD5ED},{0x6DE1, 0xB248},
- {0x6DE2, 0xD5E7},{0x6DE3, 0xD646},{0x6DE4, 0xB24A},{0x6DE5, 0xD5F1},{0x6DE6, 0xB268},{0x6DE8, 0xB262},{0x6DE9, 0xD5E6},{0x6DEA, 0xB25F},
- {0x6DEB, 0xB25D},{0x6DEC, 0xB266},{0x6DED, 0xD5F8},{0x6DEE, 0xB261},{0x6DEF, 0xD252},{0x6DF0, 0xD5F9},{0x6DF1, 0xB260},{0x6DF2, 0xD641},
- {0x6DF3, 0xB245},{0x6DF4, 0xD5F5},{0x6DF5, 0xB257},{0x6DF6, 0xD5E9},{0x6DF7, 0xB256},{0x6DF9, 0xB254},{0x6DFA, 0xB24C},{0x6DFB, 0xB24B},
- {0x6DFC, 0xD9E7},{0x6DFD, 0xD643},{0x6E00, 0xD5EB},{0x6E03, 0xD9FC},{0x6E05, 0xB24D},{0x6E19, 0xB541},{0x6E1A, 0xB25A},{0x6E1B, 0xB4EE},
- {0x6E1C, 0xD9F6},{0x6E1D, 0xB4FC},{0x6E1F, 0xD9EA},{0x6E20, 0xB4EB},{0x6E21, 0xB4E7},{0x6E22, 0xDA49},{0x6E23, 0xB4ED},{0x6E24, 0xB4F1},
- {0x6E25, 0xB4EC},{0x6E26, 0xB4F5},{0x6E27, 0xDA4D},{0x6E28, 0xDA44},{0x6E2B, 0xD9F1},{0x6E2C, 0xB4FA},{0x6E2D, 0xB4F4},{0x6E2E, 0xD9FD},
- {0x6E2F, 0xB4E4},{0x6E30, 0xDA4A},{0x6E31, 0xDA43},{0x6E32, 0xB4E8},{0x6E33, 0xD9F7},{0x6E34, 0xB4F7},{0x6E35, 0xDA55},{0x6E36, 0xDA56},
- {0x6E38, 0xB4E5},{0x6E39, 0xDA48},{0x6E3A, 0xB4F9},{0x6E3B, 0xD9FB},{0x6E3C, 0xD9ED},{0x6E3D, 0xD9EE},{0x6E3E, 0xB4FD},{0x6E3F, 0xD9F2},
- {0x6E40, 0xD9F9},{0x6E41, 0xD9F3},{0x6E43, 0xB4FB},{0x6E44, 0xB544},{0x6E45, 0xD9EF},{0x6E46, 0xD9E8},{0x6E47, 0xD9E9},{0x6E49, 0xD9EB},
- {0x6E4A, 0xB4EA},{0x6E4B, 0xD9F8},{0x6E4D, 0xB4F8},{0x6E4E, 0xB542},{0x6E51, 0xD9FA},{0x6E52, 0xDA53},{0x6E53, 0xDA4B},{0x6E54, 0xB4E6},
- {0x6E55, 0xDA51},{0x6E56, 0xB4F2},{0x6E58, 0xB4F0},{0x6E5A, 0xDA57},{0x6E5B, 0xB4EF},{0x6E5C, 0xDA41},{0x6E5D, 0xD9F4},{0x6E5E, 0xD9FE},
- {0x6E5F, 0xB547},{0x6E60, 0xDA45},{0x6E61, 0xDA42},{0x6E62, 0xD9F0},{0x6E63, 0xB543},{0x6E64, 0xDA4F},{0x6E65, 0xDA4C},{0x6E66, 0xDA54},
- {0x6E67, 0xB4E9},{0x6E68, 0xDA40},{0x6E69, 0xB546},{0x6E6B, 0xDA47},{0x6E6E, 0xB4F3},{0x6E6F, 0xB4F6},{0x6E71, 0xDA46},{0x6E72, 0xB545},
- {0x6E73, 0xD9F5},{0x6E74, 0xD5E4},{0x6E77, 0xDA50},{0x6E78, 0xDA4E},{0x6E79, 0xDA52},{0x6E88, 0xD9EC},{0x6E89, 0xB540},{0x6E8D, 0xDE61},
- {0x6E8E, 0xDE60},{0x6E8F, 0xDE46},{0x6E90, 0xB7BD},{0x6E92, 0xDE5F},{0x6E93, 0xDE49},{0x6E94, 0xDE4A},{0x6E96, 0xB7C7},{0x6E97, 0xDE68},
- {0x6E98, 0xB7C2},{0x6E99, 0xDE5E},{0x6E9B, 0xDE43},{0x6E9C, 0xB7C8},{0x6E9D, 0xB7BE},{0x6E9E, 0xDE52},{0x6E9F, 0xDE48},{0x6EA0, 0xDE4B},
- {0x6EA1, 0xDE63},{0x6EA2, 0xB7B8},{0x6EA3, 0xDE6A},{0x6EA4, 0xDE62},{0x6EA5, 0xB7C1},{0x6EA6, 0xDE57},{0x6EA7, 0xB7CC},{0x6EAA, 0xB7CB},
- {0x6EAB, 0xB7C5},{0x6EAE, 0xDE69},{0x6EAF, 0xB7B9},{0x6EB0, 0xDE55},{0x6EB1, 0xDE4C},{0x6EB2, 0xDE59},{0x6EB3, 0xDE65},{0x6EB4, 0xB7CD},
- {0x6EB6, 0xB7BB},{0x6EB7, 0xDE54},{0x6EB9, 0xDE4D},{0x6EBA, 0xB7C4},{0x6EBC, 0xB7C3},{0x6EBD, 0xDE50},{0x6EBE, 0xDE5A},{0x6EBF, 0xDE64},
- {0x6EC0, 0xDE47},{0x6EC1, 0xDE51},{0x6EC2, 0xB7BC},{0x6EC3, 0xDE5B},{0x6EC4, 0xB7C9},{0x6EC5, 0xB7C0},{0x6EC6, 0xDE4E},{0x6EC7, 0xB7BF},
- {0x6EC8, 0xDE45},{0x6EC9, 0xDE53},{0x6ECA, 0xDE67},{0x6ECB, 0xB4FE},{0x6ECC, 0xBAB0},{0x6ECD, 0xDE56},{0x6ECE, 0xE26C},{0x6ECF, 0xDE58},
- {0x6ED0, 0xDE66},{0x6ED1, 0xB7C6},{0x6ED2, 0xDE4F},{0x6ED3, 0xB7BA},{0x6ED4, 0xB7CA},{0x6ED5, 0xBCF0},{0x6ED6, 0xDE44},{0x6ED8, 0xDE5D},
- {0x6EDC, 0xDE5C},{0x6EEB, 0xE2AA},{0x6EEC, 0xBAAD},{0x6EED, 0xE27D},{0x6EEE, 0xE2A4},{0x6EEF, 0xBAA2},{0x6EF1, 0xE26E},{0x6EF2, 0xBAAF},
- {0x6EF4, 0xBA77},{0x6EF5, 0xE26D},{0x6EF6, 0xE2B0},{0x6EF7, 0xBAB1},{0x6EF8, 0xE271},{0x6EF9, 0xE2A3},{0x6EFB, 0xE273},{0x6EFC, 0xE2B3},
- {0x6EFD, 0xE2AF},{0x6EFE, 0xBA75},{0x6EFF, 0xBAA1},{0x6F00, 0xE653},{0x6F01, 0xBAAE},{0x6F02, 0xBA7D},{0x6F03, 0xE26F},{0x6F05, 0xE2AE},
- {0x6F06, 0xBAA3},{0x6F07, 0xE2AB},{0x6F08, 0xE2B8},{0x6F09, 0xE275},{0x6F0A, 0xE27E},{0x6F0D, 0xE2B6},{0x6F0E, 0xE2AC},{0x6F0F, 0xBA7C},
- {0x6F12, 0xE27C},{0x6F13, 0xBA76},{0x6F14, 0xBA74},{0x6F15, 0xBAA8},{0x6F18, 0xE27A},{0x6F19, 0xE277},{0x6F1A, 0xE278},{0x6F1C, 0xE2B2},
- {0x6F1E, 0xE2B7},{0x6F1F, 0xE2B5},{0x6F20, 0xBA7A},{0x6F21, 0xE2B9},{0x6F22, 0xBA7E},{0x6F23, 0xBAA7},{0x6F25, 0xE270},{0x6F26, 0xE5FA},
- {0x6F27, 0xE279},{0x6F29, 0xBA78},{0x6F2A, 0xBAAC},{0x6F2B, 0xBAA9},{0x6F2C, 0xBA7B},{0x6F2D, 0xE2A5},{0x6F2E, 0xE274},{0x6F2F, 0xBAAA},
- {0x6F30, 0xE2A7},{0x6F31, 0xBAA4},{0x6F32, 0xBAA6},{0x6F33, 0xBA73},{0x6F35, 0xE2A9},{0x6F36, 0xE2A1},{0x6F37, 0xE272},{0x6F38, 0xBAA5},
- {0x6F39, 0xE2B1},{0x6F3A, 0xE2B4},{0x6F3B, 0xE27B},{0x6F3C, 0xE2A8},{0x6F3E, 0xBA79},{0x6F3F, 0xBCDF},{0x6F40, 0xE2A6},{0x6F41, 0xE5F9},
- {0x6F43, 0xE2AD},{0x6F4E, 0xE276},{0x6F4F, 0xE644},{0x6F50, 0xE64E},{0x6F51, 0xBCE2},{0x6F52, 0xE64D},{0x6F53, 0xE659},{0x6F54, 0xBCE4},
- {0x6F55, 0xE64B},{0x6F57, 0xE64F},{0x6F58, 0xBCEF},{0x6F5A, 0xE646},{0x6F5B, 0xBCE7},{0x6F5D, 0xE652},{0x6F5E, 0xE9F0},{0x6F5F, 0xBCF3},
- {0x6F60, 0xBCF2},{0x6F61, 0xE654},{0x6F62, 0xE643},{0x6F63, 0xE65E},{0x6F64, 0xBCED},{0x6F66, 0xBCE3},{0x6F67, 0xE657},{0x6F69, 0xE65B},
- {0x6F6A, 0xE660},{0x6F6B, 0xE655},{0x6F6C, 0xE649},{0x6F6D, 0xBCE6},{0x6F6E, 0xBCE9},{0x6F6F, 0xBCF1},{0x6F70, 0xBCEC},{0x6F72, 0xE64C},
- {0x6F73, 0xE2A2},{0x6F76, 0xE648},{0x6F77, 0xE65F},{0x6F78, 0xBCE8},{0x6F7A, 0xBCEB},{0x6F7B, 0xE661},{0x6F7C, 0xBCE0},{0x6F7D, 0xE656},
- {0x6F7E, 0xE5FB},{0x6F7F, 0xE65C},{0x6F80, 0xC0DF},{0x6F82, 0xE64A},{0x6F84, 0xBCE1},{0x6F85, 0xE645},{0x6F86, 0xBCE5},{0x6F87, 0xE5FC},
- {0x6F88, 0xBAAB},{0x6F89, 0xE641},{0x6F8B, 0xE65A},{0x6F8C, 0xE642},{0x6F8D, 0xE640},{0x6F8E, 0xBCEA},{0x6F90, 0xE658},{0x6F92, 0xE5FE},
- {0x6F93, 0xE651},{0x6F94, 0xE650},{0x6F95, 0xE65D},{0x6F96, 0xE647},{0x6F97, 0xBCEE},{0x6F9E, 0xE9F3},{0x6FA0, 0xBF49},{0x6FA1, 0xBEFE},
- {0x6FA2, 0xEA40},{0x6FA3, 0xE9EB},{0x6FA4, 0xBF41},{0x6FA5, 0xE9F7},{0x6FA6, 0xBF48},{0x6FA7, 0xBF43},{0x6FA8, 0xE9F5},{0x6FA9, 0xED4F},
- {0x6FAA, 0xE9FB},{0x6FAB, 0xEA42},{0x6FAC, 0xE9FA},{0x6FAD, 0xE9E9},{0x6FAE, 0xE9F8},{0x6FAF, 0xEA44},{0x6FB0, 0xEA46},{0x6FB1, 0xBEFD},
- {0x6FB2, 0xEA45},{0x6FB3, 0xBF44},{0x6FB4, 0xBF4A},{0x6FB6, 0xBF47},{0x6FB8, 0xE9FE},{0x6FB9, 0xBF46},{0x6FBA, 0xE9F9},{0x6FBC, 0xE9ED},
- {0x6FBD, 0xE9F2},{0x6FBF, 0xE9FD},{0x6FC0, 0xBF45},{0x6FC1, 0xBF42},{0x6FC2, 0xBEFC},{0x6FC3, 0xBF40},{0x6FC4, 0xE9F1},{0x6FC6, 0xE5FD},
- {0x6FC7, 0xE9EC},{0x6FC8, 0xE9EF},{0x6FC9, 0xEA41},{0x6FCA, 0xE9F4},{0x6FCB, 0xE9EA},{0x6FCC, 0xED4E},{0x6FCD, 0xEA43},{0x6FCE, 0xE9EE},
- {0x6FCF, 0xE9FC},{0x6FD4, 0xED51},{0x6FD5, 0xC0E3},{0x6FD8, 0xC0D7},{0x6FDB, 0xC0DB},{0x6FDC, 0xED53},{0x6FDD, 0xED59},{0x6FDE, 0xED57},
- {0x6FDF, 0xC0D9},{0x6FE0, 0xC0DA},{0x6FE1, 0xC0E1},{0x6FE2, 0xED5A},{0x6FE3, 0xED52},{0x6FE4, 0xC0DC},{0x6FE6, 0xED56},{0x6FE7, 0xED55},
- {0x6FE8, 0xED5B},{0x6FE9, 0xC0E2},{0x6FEB, 0xC0DD},{0x6FEC, 0xC0E0},{0x6FED, 0xED54},{0x6FEE, 0xC0E4},{0x6FEF, 0xC0DE},{0x6FF0, 0xC0E5},
- {0x6FF1, 0xC0D8},{0x6FF2, 0xED58},{0x6FF4, 0xED50},{0x6FF7, 0xEFF7},{0x6FFA, 0xC271},{0x6FFB, 0xEFF4},{0x6FFC, 0xEFF6},{0x6FFE, 0xC26F},
- {0x6FFF, 0xEFF2},{0x7000, 0xEFF3},{0x7001, 0xEFEE},{0x7004, 0xE9F6},{0x7005, 0xEFEF},{0x7006, 0xC270},{0x7007, 0xEFEB},{0x7009, 0xC26D},
- {0x700A, 0xEFF8},{0x700B, 0xC26E},{0x700C, 0xEFEC},{0x700D, 0xEFED},{0x700E, 0xEFF1},{0x700F, 0xC273},{0x7011, 0xC272},{0x7014, 0xEFF0},
- {0x7015, 0xC378},{0x7016, 0xF25F},{0x7017, 0xF265},{0x7018, 0xC379},{0x7019, 0xF25C},{0x701A, 0xC376},{0x701B, 0xC373},{0x701C, 0xF267},
- {0x701D, 0xC377},{0x701F, 0xC374},{0x7020, 0xF25E},{0x7021, 0xF261},{0x7022, 0xF262},{0x7023, 0xF263},{0x7024, 0xF266},{0x7026, 0xEFF5},
- {0x7027, 0xF25D},{0x7028, 0xC375},{0x7029, 0xF264},{0x702A, 0xF268},{0x702B, 0xF260},{0x702F, 0xF45D},{0x7030, 0xC46A},{0x7031, 0xF460},
- {0x7032, 0xC46B},{0x7033, 0xF468},{0x7034, 0xF45F},{0x7035, 0xF45C},{0x7037, 0xF45E},{0x7038, 0xF462},{0x7039, 0xF465},{0x703A, 0xF464},
- {0x703B, 0xF467},{0x703C, 0xF45B},{0x703E, 0xC469},{0x703F, 0xF463},{0x7040, 0xF466},{0x7041, 0xF469},{0x7042, 0xF461},{0x7043, 0xF5D3},
- {0x7044, 0xF5D4},{0x7045, 0xF5D8},{0x7046, 0xF5D9},{0x7048, 0xF5D6},{0x7049, 0xF5D7},{0x704A, 0xF5D5},{0x704C, 0xC4E9},{0x7051, 0xC578},
- {0x7052, 0xF6EB},{0x7055, 0xF6E8},{0x7056, 0xF6E9},{0x7057, 0xF6EA},{0x7058, 0xC579},{0x705A, 0xF7E5},{0x705B, 0xF7E4},{0x705D, 0xF8AF},
- {0x705E, 0xC5F4},{0x705F, 0xF8AD},{0x7060, 0xF8B0},{0x7061, 0xF8AE},{0x7062, 0xF8F5},{0x7063, 0xC657},{0x7064, 0xC665},{0x7065, 0xF9A3},
- {0x7066, 0xF96C},{0x7068, 0xF9A2},{0x7069, 0xF9D0},{0x706A, 0xF9D1},{0x706B, 0xA4F5},{0x7070, 0xA6C7},{0x7071, 0xCA41},{0x7074, 0xCB5E},
- {0x7076, 0xA85F},{0x7078, 0xA862},{0x707A, 0xCB5F},{0x707C, 0xA860},{0x707D, 0xA861},{0x7082, 0xCD58},{0x7083, 0xCD5A},{0x7084, 0xCD55},
- {0x7085, 0xCD52},{0x7086, 0xCD54},{0x708A, 0xAAA4},{0x708E, 0xAAA2},{0x7091, 0xCD56},{0x7092, 0xAAA3},{0x7093, 0xCD53},{0x7094, 0xCD50},
- {0x7095, 0xAAA1},{0x7096, 0xCD57},{0x7098, 0xCD51},{0x7099, 0xAAA5},{0x709A, 0xCD59},{0x709F, 0xCFAF},{0x70A1, 0xCFB3},{0x70A4, 0xACB7},
- {0x70A9, 0xCFB6},{0x70AB, 0xACAF},{0x70AC, 0xACB2},{0x70AD, 0xACB4},{0x70AE, 0xACB6},{0x70AF, 0xACB3},{0x70B0, 0xCFB2},{0x70B1, 0xCFB1},
- {0x70B3, 0xACB1},{0x70B4, 0xCFB4},{0x70B5, 0xCFB5},{0x70B7, 0xCFAE},{0x70B8, 0xACB5},{0x70BA, 0xACB0},{0x70BE, 0xCFB0},{0x70C5, 0xD277},
- {0x70C6, 0xD278},{0x70C7, 0xD279},{0x70C8, 0xAF50},{0x70CA, 0xAF4C},{0x70CB, 0xD26E},{0x70CD, 0xD276},{0x70CE, 0xD27B},{0x70CF, 0xAF51},
- {0x70D1, 0xD26C},{0x70D2, 0xD272},{0x70D3, 0xD26B},{0x70D4, 0xD275},{0x70D7, 0xD271},{0x70D8, 0xAF4D},{0x70D9, 0xAF4F},{0x70DA, 0xD27A},
- {0x70DC, 0xD26A},{0x70DD, 0xD26D},{0x70DE, 0xD273},{0x70E0, 0xD274},{0x70E1, 0xD27C},{0x70E2, 0xD270},{0x70E4, 0xAF4E},{0x70EF, 0xB26D},
- {0x70F0, 0xD64E},{0x70F3, 0xD650},{0x70F4, 0xD64C},{0x70F6, 0xD658},{0x70F7, 0xD64A},{0x70F8, 0xD657},{0x70F9, 0xB269},{0x70FA, 0xD648},
- {0x70FB, 0xDA5B},{0x70FC, 0xD652},{0x70FD, 0xB26C},{0x70FF, 0xD653},{0x7100, 0xD656},{0x7102, 0xD65A},{0x7104, 0xD64F},{0x7106, 0xD654},
- {0x7109, 0xB26A},{0x710A, 0xB26B},{0x710B, 0xD659},{0x710C, 0xD64D},{0x710D, 0xD649},{0x710E, 0xD65B},{0x7110, 0xD651},{0x7113, 0xD655},
- {0x7117, 0xD64B},{0x7119, 0xB548},{0x711A, 0xB549},{0x711B, 0xDA65},{0x711C, 0xB54F},{0x711E, 0xDA59},{0x711F, 0xDA62},{0x7120, 0xDA58},
- {0x7121, 0xB54C},{0x7122, 0xDA60},{0x7123, 0xDA5E},{0x7125, 0xDA5F},{0x7126, 0xB54A},{0x7128, 0xDA63},{0x712E, 0xDA5C},{0x712F, 0xDA5A},
- {0x7130, 0xB54B},{0x7131, 0xDA5D},{0x7132, 0xDA61},{0x7136, 0xB54D},{0x713A, 0xDA64},{0x7141, 0xDE70},{0x7142, 0xDE77},{0x7143, 0xDE79},
- {0x7144, 0xDEA1},{0x7146, 0xB7DA},{0x7147, 0xDE6B},{0x7149, 0xB7D2},{0x714B, 0xDE7A},{0x714C, 0xB7D7},{0x714D, 0xDEA2},{0x714E, 0xB7CE},
- {0x7150, 0xDE7D},{0x7152, 0xDE6D},{0x7153, 0xDE7E},{0x7154, 0xDE6C},{0x7156, 0xB7DC},{0x7158, 0xDE78},{0x7159, 0xB7CF},{0x715A, 0xDEA3},
- {0x715C, 0xB7D4},{0x715D, 0xDE71},{0x715E, 0xB7D9},{0x715F, 0xDE7C},{0x7160, 0xDE6F},{0x7161, 0xDE76},{0x7162, 0xDE72},{0x7163, 0xDE6E},
- {0x7164, 0xB7D1},{0x7165, 0xB7D8},{0x7166, 0xB7D6},{0x7167, 0xB7D3},{0x7168, 0xB7DB},{0x7169, 0xB7D0},{0x716A, 0xDE75},{0x716C, 0xB7D5},
- {0x716E, 0xB54E},{0x7170, 0xDE7B},{0x7172, 0xDE73},{0x7178, 0xDE74},{0x717B, 0xE2C1},{0x717D, 0xBAB4},{0x7180, 0xE2BD},{0x7181, 0xE2C3},
- {0x7182, 0xE2BF},{0x7184, 0xBAB6},{0x7185, 0xE2BE},{0x7186, 0xE2C2},{0x7187, 0xE2BA},{0x7189, 0xE2BC},{0x718A, 0xBAB5},{0x718F, 0xE2C0},
- {0x7190, 0xE2BB},{0x7192, 0xBAB7},{0x7194, 0xBAB2},{0x7197, 0xE2C4},{0x7199, 0xBAB3},{0x719A, 0xE667},{0x719B, 0xE664},{0x719C, 0xE670},
- {0x719D, 0xE66A},{0x719E, 0xE66C},{0x719F, 0xBCF4},{0x71A0, 0xE666},{0x71A1, 0xE66E},{0x71A4, 0xE66D},{0x71A5, 0xE66B},{0x71A7, 0xE671},
- {0x71A8, 0xBCF7},{0x71A9, 0xE668},{0x71AA, 0xE66F},{0x71AC, 0xBCF5},{0x71AF, 0xE663},{0x71B0, 0xE665},{0x71B1, 0xBCF6},{0x71B2, 0xE662},
- {0x71B3, 0xE672},{0x71B5, 0xE669},{0x71B8, 0xEA4A},{0x71B9, 0xBF51},{0x71BC, 0xEA55},{0x71BD, 0xEA53},{0x71BE, 0xBF4B},{0x71BF, 0xEA49},
- {0x71C0, 0xEA4C},{0x71C1, 0xEA4D},{0x71C2, 0xEA48},{0x71C3, 0xBF55},{0x71C4, 0xBF56},{0x71C5, 0xEA47},{0x71C6, 0xEA56},{0x71C7, 0xEA51},
- {0x71C8, 0xBF4F},{0x71C9, 0xBF4C},{0x71CA, 0xEA50},{0x71CB, 0xEA4E},{0x71CE, 0xBF52},{0x71CF, 0xEA52},{0x71D0, 0xBF4D},{0x71D2, 0xBF4E},
- {0x71D4, 0xEA4F},{0x71D5, 0xBF50},{0x71D6, 0xEA4B},{0x71D8, 0xEA54},{0x71D9, 0xBF53},{0x71DA, 0xEA57},{0x71DB, 0xEA58},{0x71DC, 0xBF54},
- {0x71DF, 0xC0E7},{0x71E0, 0xC0EE},{0x71E1, 0xED5C},{0x71E2, 0xED62},{0x71E4, 0xED60},{0x71E5, 0xC0EA},{0x71E6, 0xC0E9},{0x71E7, 0xC0E6},
- {0x71E8, 0xED5E},{0x71EC, 0xC0EC},{0x71ED, 0xC0EB},{0x71EE, 0xC0E8},{0x71F0, 0xED61},{0x71F1, 0xED5D},{0x71F2, 0xED5F},{0x71F4, 0xC0ED},
- {0x71F8, 0xC277},{0x71F9, 0xEFFB},{0x71FB, 0xC274},{0x71FC, 0xC275},{0x71FD, 0xEFFD},{0x71FE, 0xC276},{0x71FF, 0xEFFA},{0x7201, 0xEFF9},
- {0x7202, 0xF26C},{0x7203, 0xEFFC},{0x7205, 0xF26D},{0x7206, 0xC37A},{0x7207, 0xF26B},{0x720A, 0xF26A},{0x720C, 0xF269},{0x720D, 0xC37B},
- {0x7210, 0xC46C},{0x7213, 0xF46A},{0x7214, 0xF46B},{0x7219, 0xF5DC},{0x721A, 0xF5DB},{0x721B, 0xC4EA},{0x721D, 0xF5DA},{0x721E, 0xF6EC},
- {0x721F, 0xF6ED},{0x7222, 0xF7E6},{0x7223, 0xF8B1},{0x7226, 0xF8F6},{0x7227, 0xF9BC},{0x7228, 0xC679},{0x7229, 0xF9C6},{0x722A, 0xA4F6},
- {0x722C, 0xAAA6},{0x722D, 0xAAA7},{0x7230, 0xACB8},{0x7235, 0xC0EF},{0x7236, 0xA4F7},{0x7238, 0xAAA8},{0x7239, 0xAF52},{0x723A, 0xB7DD},
- {0x723B, 0xA4F8},{0x723D, 0xB26E},{0x723E, 0xBAB8},{0x723F, 0xC962},{0x7241, 0xCFB7},{0x7242, 0xD27D},{0x7244, 0xE2C5},{0x7246, 0xC0F0},
- {0x7247, 0xA4F9},{0x7248, 0xAAA9},{0x7249, 0xCFB8},{0x724A, 0xCFB9},{0x724B, 0xDA66},{0x724C, 0xB550},{0x724F, 0xDEA4},{0x7252, 0xB7DE},
- {0x7253, 0xE2C6},{0x7256, 0xBCF8},{0x7258, 0xC37C},{0x7259, 0xA4FA},{0x725A, 0xDA67},{0x725B, 0xA4FB},{0x725D, 0xA6C9},{0x725E, 0xCA42},
- {0x725F, 0xA6C8},{0x7260, 0xA865},{0x7261, 0xA864},{0x7262, 0xA863},{0x7263, 0xCB60},{0x7267, 0xAAAA},{0x7269, 0xAAAB},{0x726A, 0xCD5B},
- {0x726C, 0xCFBA},{0x726E, 0xCFBD},{0x726F, 0xACBA},{0x7270, 0xCFBB},{0x7272, 0xACB9},{0x7273, 0xCFBC},{0x7274, 0xACBB},{0x7276, 0xD2A2},
- {0x7277, 0xD2A1},{0x7278, 0xD27E},{0x7279, 0xAF53},{0x727B, 0xD65D},{0x727C, 0xD65E},{0x727D, 0xB26F},{0x727E, 0xD65C},{0x727F, 0xD65F},
- {0x7280, 0xB552},{0x7281, 0xB270},{0x7284, 0xB551},{0x7285, 0xDA6B},{0x7286, 0xDA6A},{0x7288, 0xDA68},{0x7289, 0xDA69},{0x728B, 0xDA6C},
- {0x728C, 0xDEA6},{0x728D, 0xDEA5},{0x728E, 0xDEA9},{0x7290, 0xDEA8},{0x7291, 0xDEA7},{0x7292, 0xBAB9},{0x7293, 0xE2C9},{0x7295, 0xE2C8},
- {0x7296, 0xBABA},{0x7297, 0xE2C7},{0x7298, 0xE673},{0x729A, 0xE674},{0x729B, 0xBCF9},{0x729D, 0xEA59},{0x729E, 0xEA5A},{0x72A1, 0xF272},
- {0x72A2, 0xC37D},{0x72A3, 0xF271},{0x72A4, 0xF270},{0x72A5, 0xF26E},{0x72A6, 0xF26F},{0x72A7, 0xC4EB},{0x72A8, 0xF46C},{0x72A9, 0xF6EE},
- {0x72AA, 0xF8F7},{0x72AC, 0xA4FC},{0x72AE, 0xC9A5},{0x72AF, 0xA5C7},{0x72B0, 0xC9A6},{0x72B4, 0xCA43},{0x72B5, 0xCA44},{0x72BA, 0xCB66},
- {0x72BD, 0xCB62},{0x72BF, 0xCB61},{0x72C0, 0xAAAC},{0x72C1, 0xCB65},{0x72C2, 0xA867},{0x72C3, 0xCB63},{0x72C4, 0xA866},{0x72C5, 0xCB67},
- {0x72C6, 0xCB64},{0x72C9, 0xCD5F},{0x72CA, 0xCFBE},{0x72CB, 0xCD5D},{0x72CC, 0xCD64},{0x72CE, 0xAAAD},{0x72D0, 0xAAB0},{0x72D1, 0xCD65},
- {0x72D2, 0xCD61},{0x72D4, 0xCD62},{0x72D6, 0xCD5C},{0x72D7, 0xAAAF},{0x72D8, 0xCD5E},{0x72D9, 0xAAAE},{0x72DA, 0xCD63},{0x72DC, 0xCD60},
- {0x72DF, 0xCFC2},{0x72E0, 0xACBD},{0x72E1, 0xACBE},{0x72E3, 0xCFC5},{0x72E4, 0xCFBF},{0x72E6, 0xCFC4},{0x72E8, 0xCFC0},{0x72E9, 0xACBC},
- {0x72EA, 0xCFC3},{0x72EB, 0xCFC1},{0x72F3, 0xD2A8},{0x72F4, 0xD2A5},{0x72F6, 0xD2A7},{0x72F7, 0xAF58},{0x72F8, 0xAF57},{0x72F9, 0xAF55},
- {0x72FA, 0xD2A4},{0x72FB, 0xD2A9},{0x72FC, 0xAF54},{0x72FD, 0xAF56},{0x72FE, 0xD2A6},{0x72FF, 0xD667},{0x7300, 0xD2A3},{0x7301, 0xD2AA},
- {0x7307, 0xD662},{0x7308, 0xD666},{0x730A, 0xD665},{0x730B, 0xDA6E},{0x730C, 0xDA79},{0x730F, 0xD668},{0x7311, 0xD663},{0x7312, 0xDA6D},
- {0x7313, 0xB274},{0x7316, 0xB273},{0x7317, 0xD661},{0x7318, 0xD664},{0x7319, 0xB275},{0x731B, 0xB272},{0x731C, 0xB271},{0x731D, 0xD660},
- {0x731E, 0xD669},{0x7322, 0xDA70},{0x7323, 0xDA77},{0x7325, 0xB554},{0x7326, 0xDA76},{0x7327, 0xDA73},{0x7329, 0xB556},{0x732D, 0xDA75},
- {0x7330, 0xDA6F},{0x7331, 0xDA71},{0x7332, 0xDA74},{0x7333, 0xDA72},{0x7334, 0xB555},{0x7335, 0xDA78},{0x7336, 0xB553},{0x7337, 0xB7DF},
- {0x733A, 0xDEAD},{0x733B, 0xDEAC},{0x733C, 0xDEAA},{0x733E, 0xB7E2},{0x733F, 0xB7E1},{0x7340, 0xDEAE},{0x7342, 0xDEAB},{0x7343, 0xE2CA},
- {0x7344, 0xBABB},{0x7345, 0xB7E0},{0x7349, 0xDEB0},{0x734A, 0xDEAF},{0x734C, 0xE2CD},{0x734D, 0xE2CB},{0x734E, 0xBCFA},{0x7350, 0xBABC},
- {0x7351, 0xE2CC},{0x7352, 0xE676},{0x7357, 0xBCFB},{0x7358, 0xE675},{0x7359, 0xE67E},{0x735A, 0xE67D},{0x735B, 0xE67B},{0x735D, 0xE67A},
- {0x735E, 0xE677},{0x735F, 0xE678},{0x7360, 0xE679},{0x7361, 0xE67C},{0x7362, 0xE6A1},{0x7365, 0xEA5F},{0x7366, 0xEA5C},{0x7367, 0xEA5D},
- {0x7368, 0xBF57},{0x7369, 0xEA5B},{0x736A, 0xEA61},{0x736B, 0xEA60},{0x736C, 0xEA5E},{0x736E, 0xED64},{0x736F, 0xED65},{0x7370, 0xC0F1},
- {0x7372, 0xC0F2},{0x7373, 0xED63},{0x7375, 0xC279},{0x7376, 0xEFFE},{0x7377, 0xC278},{0x7378, 0xC37E},{0x737A, 0xC3A1},{0x737B, 0xC46D},
- {0x737C, 0xF46E},{0x737D, 0xF46D},{0x737E, 0xF5DD},{0x737F, 0xF6EF},{0x7380, 0xC57A},{0x7381, 0xF7E8},{0x7382, 0xF7E7},{0x7383, 0xF7E9},
- {0x7384, 0xA5C8},{0x7385, 0xCFC6},{0x7386, 0xAF59},{0x7387, 0xB276},{0x7388, 0xD66A},{0x7389, 0xA5C9},{0x738A, 0xC9A7},{0x738B, 0xA4FD},
- {0x738E, 0xCA45},{0x7392, 0xCB6C},{0x7393, 0xCB6A},{0x7394, 0xCB6B},{0x7395, 0xCB68},{0x7396, 0xA868},{0x7397, 0xCB69},{0x739D, 0xCD6D},
- {0x739F, 0xAAB3},{0x73A0, 0xCD6B},{0x73A1, 0xCD67},{0x73A2, 0xCD6A},{0x73A4, 0xCD66},{0x73A5, 0xAAB5},{0x73A6, 0xCD69},{0x73A8, 0xAAB2},
- {0x73A9, 0xAAB1},{0x73AB, 0xAAB4},{0x73AC, 0xCD6C},{0x73AD, 0xCD68},{0x73B2, 0xACC2},{0x73B3, 0xACC5},{0x73B4, 0xCFCE},{0x73B5, 0xCFCD},
- {0x73B6, 0xCFCC},{0x73B7, 0xACBF},{0x73B8, 0xCFD5},{0x73B9, 0xCFCB},{0x73BB, 0xACC1},{0x73BC, 0xD2AF},{0x73BE, 0xCFD2},{0x73BF, 0xCFD0},
- {0x73C0, 0xACC4},{0x73C2, 0xCFC8},{0x73C3, 0xCFD3},{0x73C5, 0xCFCA},{0x73C6, 0xCFD4},{0x73C7, 0xCFD1},{0x73C8, 0xCFC9},{0x73CA, 0xACC0},
- {0x73CB, 0xCFD6},{0x73CC, 0xCFC7},{0x73CD, 0xACC3},{0x73D2, 0xD2B4},{0x73D3, 0xD2AB},{0x73D4, 0xD2B6},{0x73D6, 0xD2AE},{0x73D7, 0xD2B9},
- {0x73D8, 0xD2BA},{0x73D9, 0xD2AC},{0x73DA, 0xD2B8},{0x73DB, 0xD2B5},{0x73DC, 0xD2B3},{0x73DD, 0xD2B7},{0x73DE, 0xAF5F},{0x73E0, 0xAF5D},
- {0x73E3, 0xD2B1},{0x73E5, 0xD2AD},{0x73E7, 0xD2B0},{0x73E8, 0xD2BB},{0x73E9, 0xD2B2},{0x73EA, 0xAF5E},{0x73EB, 0xCFCF},{0x73ED, 0xAF5A},
- {0x73EE, 0xAF5C},{0x73F4, 0xD678},{0x73F5, 0xD66D},{0x73F6, 0xD66B},{0x73F8, 0xD66C},{0x73FA, 0xD673},{0x73FC, 0xD674},{0x73FD, 0xD670},
- {0x73FE, 0xB27B},{0x73FF, 0xD675},{0x7400, 0xD672},{0x7401, 0xD66F},{0x7403, 0xB279},{0x7404, 0xD66E},{0x7405, 0xB277},{0x7406, 0xB27A},
- {0x7407, 0xD671},{0x7408, 0xD679},{0x7409, 0xAF5B},{0x740A, 0xB278},{0x740B, 0xD677},{0x740C, 0xD676},{0x740D, 0xB27C},{0x7416, 0xDA7E},
- {0x741A, 0xDAA1},{0x741B, 0xB560},{0x741D, 0xDAA7},{0x7420, 0xDAA9},{0x7421, 0xDAA2},{0x7422, 0xB55A},{0x7423, 0xDAA6},{0x7424, 0xDAA5},
- {0x7425, 0xB55B},{0x7426, 0xB561},{0x7428, 0xB562},{0x7429, 0xDAA8},{0x742A, 0xB558},{0x742B, 0xDA7D},{0x742C, 0xDA7B},{0x742D, 0xDAA3},
- {0x742E, 0xDA7A},{0x742F, 0xB55F},{0x7430, 0xDA7C},{0x7431, 0xDAA4},{0x7432, 0xDAAA},{0x7433, 0xB559},{0x7434, 0xB55E},{0x7435, 0xB55C},
- {0x7436, 0xB55D},{0x743A, 0xB557},{0x743F, 0xB7E9},{0x7440, 0xDEB7},{0x7441, 0xB7E8},{0x7442, 0xDEBB},{0x7444, 0xDEB1},{0x7446, 0xDEBC},
- {0x744A, 0xDEB2},{0x744B, 0xDEB3},{0x744D, 0xDEBD},{0x744E, 0xDEBA},{0x744F, 0xDEB8},{0x7450, 0xDEB9},{0x7451, 0xDEB5},{0x7452, 0xDEB4},
- {0x7454, 0xDEBE},{0x7455, 0xB7E5},{0x7457, 0xDEB6},{0x7459, 0xB7EA},{0x745A, 0xB7E4},{0x745B, 0xB7EB},{0x745C, 0xB7EC},{0x745E, 0xB7E7},
- {0x745F, 0xB7E6},{0x7462, 0xE2CE},{0x7463, 0xBABE},{0x7464, 0xBABD},{0x7467, 0xE2D3},{0x7469, 0xBCFC},{0x746A, 0xBABF},{0x746D, 0xBAC1},
- {0x746E, 0xE2D4},{0x746F, 0xB7E3},{0x7470, 0xBAC0},{0x7471, 0xE2D0},{0x7472, 0xE2D2},{0x7473, 0xE2CF},{0x7475, 0xE2D1},{0x7479, 0xE6AB},
- {0x747C, 0xE6AA},{0x747D, 0xE6A7},{0x747E, 0xBD40},{0x747F, 0xEA62},{0x7480, 0xBD41},{0x7481, 0xE6A6},{0x7483, 0xBCFE},{0x7485, 0xE6A8},
- {0x7486, 0xE6A5},{0x7487, 0xE6A2},{0x7488, 0xE6A9},{0x7489, 0xE6A3},{0x748A, 0xE6A4},{0x748B, 0xBCFD},{0x7490, 0xED69},{0x7492, 0xEA66},
- {0x7494, 0xEA65},{0x7495, 0xEA67},{0x7497, 0xED66},{0x7498, 0xBF5A},{0x749A, 0xEA63},{0x749C, 0xBF58},{0x749E, 0xBF5C},{0x749F, 0xBF5B},
- {0x74A0, 0xEA64},{0x74A1, 0xEA68},{0x74A3, 0xBF59},{0x74A5, 0xED6D},{0x74A6, 0xC0F5},{0x74A7, 0xC27A},{0x74A8, 0xC0F6},{0x74A9, 0xC0F3},
- {0x74AA, 0xED6A},{0x74AB, 0xED68},{0x74AD, 0xED6B},{0x74AF, 0xED6E},{0x74B0, 0xC0F4},{0x74B1, 0xED6C},{0x74B2, 0xED67},{0x74B5, 0xF042},
- {0x74B6, 0xF045},{0x74B7, 0xF275},{0x74B8, 0xF040},{0x74BA, 0xF46F},{0x74BB, 0xF046},{0x74BD, 0xC3A2},{0x74BE, 0xF044},{0x74BF, 0xC27B},
- {0x74C0, 0xF041},{0x74C1, 0xF043},{0x74C2, 0xF047},{0x74C3, 0xF276},{0x74C5, 0xF274},{0x74CA, 0xC3A3},{0x74CB, 0xF273},{0x74CF, 0xC46E},
- {0x74D4, 0xC4ED},{0x74D5, 0xF6F1},{0x74D6, 0xC4EC},{0x74D7, 0xF6F3},{0x74D8, 0xF6F0},{0x74D9, 0xF6F2},{0x74DA, 0xC5D0},{0x74DB, 0xF8B2},
- {0x74DC, 0xA5CA},{0x74DD, 0xCD6E},{0x74DE, 0xD2BC},{0x74DF, 0xD2BD},{0x74E0, 0xB27D},{0x74E1, 0xDEBF},{0x74E2, 0xBF5D},{0x74E3, 0xC3A4},
- {0x74E4, 0xC57B},{0x74E5, 0xF8B3},{0x74E6, 0xA5CB},{0x74E8, 0xCD6F},{0x74E9, 0xA260},{0x74EC, 0xCFD7},{0x74EE, 0xCFD8},{0x74F4, 0xD2BE},
- {0x74F5, 0xD2BF},{0x74F6, 0xB27E},{0x74F7, 0xB2A1},{0x74FB, 0xDAAB},{0x74FD, 0xDEC2},{0x74FE, 0xDEC1},{0x74FF, 0xDEC0},{0x7500, 0xE2D5},
- {0x7502, 0xE2D6},{0x7503, 0xE2D7},{0x7504, 0xBAC2},{0x7507, 0xE6AD},{0x7508, 0xE6AC},{0x750B, 0xEA69},{0x750C, 0xBF5E},{0x750D, 0xBF5F},
- {0x750F, 0xED72},{0x7510, 0xED6F},{0x7511, 0xED70},{0x7512, 0xED71},{0x7513, 0xF049},{0x7514, 0xF048},{0x7515, 0xC27C},{0x7516, 0xF277},
- {0x7517, 0xF5DE},{0x7518, 0xA5CC},{0x751A, 0xACC6},{0x751C, 0xB2A2},{0x751D, 0xDEC3},{0x751F, 0xA5CD},{0x7521, 0xD2C0},{0x7522, 0xB2A3},
- {0x7525, 0xB563},{0x7526, 0xB564},{0x7528, 0xA5CE},{0x7529, 0xA5CF},{0x752A, 0xCA46},{0x752B, 0xA86A},{0x752C, 0xA869},{0x752D, 0xACC7},
- {0x752E, 0xCFD9},{0x752F, 0xDAAC},{0x7530, 0xA5D0},{0x7531, 0xA5D1},{0x7532, 0xA5D2},{0x7533, 0xA5D3},{0x7537, 0xA86B},{0x7538, 0xA86C},
- {0x7539, 0xCB6E},{0x753A, 0xCB6D},{0x753D, 0xAAB6},{0x753E, 0xCD72},{0x753F, 0xCD70},{0x7540, 0xCD71},{0x7547, 0xCFDA},{0x7548, 0xCFDB},
- {0x754B, 0xACCB},{0x754C, 0xACC9},{0x754E, 0xACCA},{0x754F, 0xACC8},{0x7554, 0xAF60},{0x7559, 0xAF64},{0x755A, 0xAF63},{0x755B, 0xD2C1},
- {0x755C, 0xAF62},{0x755D, 0xAF61},{0x755F, 0xD2C2},{0x7562, 0xB2A6},{0x7563, 0xD67B},{0x7564, 0xD67A},{0x7565, 0xB2A4},{0x7566, 0xB2A5},
- {0x756A, 0xB566},{0x756B, 0xB565},{0x756C, 0xDAAE},{0x756F, 0xDAAD},{0x7570, 0xB2A7},{0x7576, 0xB7ED},{0x7577, 0xDEC5},{0x7578, 0xB7EE},
- {0x7579, 0xDEC4},{0x757D, 0xE2D8},{0x757E, 0xE6AE},{0x757F, 0xBD42},{0x7580, 0xEA6A},{0x7584, 0xED73},{0x7586, 0xC3A6},{0x7587, 0xC3A5},
- {0x758A, 0xC57C},{0x758B, 0xA5D4},{0x758C, 0xCD73},{0x758F, 0xB2A8},{0x7590, 0xE2D9},{0x7591, 0xBAC3},{0x7594, 0xCB6F},{0x7595, 0xCB70},
- {0x7598, 0xCD74},{0x7599, 0xAAB8},{0x759A, 0xAAB9},{0x759D, 0xAAB7},{0x75A2, 0xACCF},{0x75A3, 0xACD0},{0x75A4, 0xACCD},{0x75A5, 0xACCE},
- {0x75A7, 0xCFDC},{0x75AA, 0xCFDD},{0x75AB, 0xACCC},{0x75B0, 0xD2C3},{0x75B2, 0xAF68},{0x75B3, 0xAF69},{0x75B5, 0xB2AB},{0x75B6, 0xD2C9},
- {0x75B8, 0xAF6E},{0x75B9, 0xAF6C},{0x75BA, 0xD2CA},{0x75BB, 0xD2C5},{0x75BC, 0xAF6B},{0x75BD, 0xAF6A},{0x75BE, 0xAF65},{0x75BF, 0xD2C8},
- {0x75C0, 0xD2C7},{0x75C1, 0xD2C4},{0x75C2, 0xAF6D},{0x75C4, 0xD2C6},{0x75C5, 0xAF66},{0x75C7, 0xAF67},{0x75CA, 0xB2AC},{0x75CB, 0xD6A1},
- {0x75CC, 0xD6A2},{0x75CD, 0xB2AD},{0x75CE, 0xD67C},{0x75CF, 0xD67E},{0x75D0, 0xD6A4},{0x75D1, 0xD6A3},{0x75D2, 0xD67D},{0x75D4, 0xB2A9},
- {0x75D5, 0xB2AA},{0x75D7, 0xDAB6},{0x75D8, 0xB56B},{0x75D9, 0xB56A},{0x75DA, 0xDAB0},{0x75DB, 0xB568},{0x75DD, 0xDAB3},{0x75DE, 0xB56C},
- {0x75DF, 0xDAB4},{0x75E0, 0xB56D},{0x75E1, 0xDAB1},{0x75E2, 0xB567},{0x75E3, 0xB569},{0x75E4, 0xDAB5},{0x75E6, 0xDAB2},{0x75E7, 0xDAAF},
- {0x75ED, 0xDED2},{0x75EF, 0xDEC7},{0x75F0, 0xB7F0},{0x75F1, 0xB7F3},{0x75F2, 0xB7F2},{0x75F3, 0xB7F7},{0x75F4, 0xB7F6},{0x75F5, 0xDED3},
- {0x75F6, 0xDED1},{0x75F7, 0xDECA},{0x75F8, 0xDECE},{0x75F9, 0xDECD},{0x75FA, 0xB7F4},{0x75FB, 0xDED0},{0x75FC, 0xDECC},{0x75FD, 0xDED4},
- {0x75FE, 0xDECB},{0x75FF, 0xB7F5},{0x7600, 0xB7EF},{0x7601, 0xB7F1},{0x7603, 0xDEC9},{0x7608, 0xE2DB},{0x7609, 0xBAC7},{0x760A, 0xE2DF},
- {0x760B, 0xBAC6},{0x760C, 0xE2DC},{0x760D, 0xBAC5},{0x760F, 0xDEC8},{0x7610, 0xDECF},{0x7611, 0xE2DE},{0x7613, 0xBAC8},{0x7614, 0xE2E0},
- {0x7615, 0xE2DD},{0x7616, 0xE2DA},{0x7619, 0xE6B1},{0x761A, 0xE6B5},{0x761B, 0xE6B7},{0x761C, 0xE6B3},{0x761D, 0xE6B2},{0x761E, 0xE6B0},
- {0x761F, 0xBD45},{0x7620, 0xBD43},{0x7621, 0xBD48},{0x7622, 0xBD49},{0x7623, 0xE6B4},{0x7624, 0xBD46},{0x7625, 0xE6AF},{0x7626, 0xBD47},
- {0x7627, 0xBAC4},{0x7628, 0xE6B6},{0x7629, 0xBD44},{0x762D, 0xEA6C},{0x762F, 0xEA6B},{0x7630, 0xEA73},{0x7631, 0xEA6D},{0x7632, 0xEA72},
- {0x7633, 0xEA6F},{0x7634, 0xBF60},{0x7635, 0xEA71},{0x7638, 0xBF61},{0x763A, 0xBF62},{0x763C, 0xEA70},{0x763D, 0xEA6E},{0x7642, 0xC0F8},
- {0x7643, 0xED74},{0x7646, 0xC0F7},{0x7647, 0xED77},{0x7648, 0xED75},{0x7649, 0xED76},{0x764C, 0xC0F9},{0x7650, 0xF04D},{0x7652, 0xC2A1},
- {0x7653, 0xF04E},{0x7656, 0xC27D},{0x7657, 0xF04F},{0x7658, 0xC27E},{0x7659, 0xF04C},{0x765A, 0xF050},{0x765C, 0xF04A},{0x765F, 0xC3A7},
- {0x7660, 0xF278},{0x7661, 0xC3A8},{0x7662, 0xC46F},{0x7664, 0xF04B},{0x7665, 0xC470},{0x7669, 0xC4EE},{0x766A, 0xF5DF},{0x766C, 0xC57E},
- {0x766D, 0xF6F4},{0x766E, 0xC57D},{0x7670, 0xF7EA},{0x7671, 0xC5F5},{0x7672, 0xC5F6},{0x7675, 0xF9CC},{0x7678, 0xACD1},{0x7679, 0xCFDE},
- {0x767B, 0xB56E},{0x767C, 0xB56F},{0x767D, 0xA5D5},{0x767E, 0xA6CA},{0x767F, 0xCA47},{0x7681, 0xCB71},{0x7682, 0xA86D},{0x7684, 0xAABA},
- {0x7686, 0xACD2},{0x7687, 0xACD3},{0x7688, 0xACD4},{0x7689, 0xD6A6},{0x768A, 0xD2CB},{0x768B, 0xAF6F},{0x768E, 0xB2AE},{0x768F, 0xD6A5},
- {0x7692, 0xDAB8},{0x7693, 0xB571},{0x7695, 0xDAB7},{0x7696, 0xB570},{0x7699, 0xDED5},{0x769A, 0xBD4A},{0x769B, 0xE6BB},{0x769C, 0xE6B8},
- {0x769D, 0xE6B9},{0x769E, 0xE6BA},{0x76A4, 0xED78},{0x76A6, 0xF051},{0x76AA, 0xF471},{0x76AB, 0xF470},{0x76AD, 0xF6F5},{0x76AE, 0xA5D6},
- {0x76AF, 0xCD75},{0x76B0, 0xAF70},{0x76B4, 0xB572},{0x76B5, 0xDED6},{0x76B8, 0xE2E1},{0x76BA, 0xBD4B},{0x76BB, 0xEA74},{0x76BD, 0xF052},
- {0x76BE, 0xF472},{0x76BF, 0xA5D7},{0x76C2, 0xAABB},{0x76C3, 0xACD7},{0x76C4, 0xCFDF},{0x76C5, 0xACD8},{0x76C6, 0xACD6},{0x76C8, 0xACD5},
- {0x76C9, 0xD2CC},{0x76CA, 0xAF71},{0x76CD, 0xAF72},{0x76CE, 0xAF73},{0x76D2, 0xB2B0},{0x76D3, 0xD6A7},{0x76D4, 0xB2AF},{0x76DA, 0xDAB9},
- {0x76DB, 0xB2B1},{0x76DC, 0xB573},{0x76DD, 0xDED7},{0x76DE, 0xB7F8},{0x76DF, 0xB7F9},{0x76E1, 0xBAC9},{0x76E3, 0xBACA},{0x76E4, 0xBD4C},
- {0x76E5, 0xBF64},{0x76E6, 0xEA75},{0x76E7, 0xBF63},{0x76E9, 0xED79},{0x76EA, 0xC0FA},{0x76EC, 0xF053},{0x76ED, 0xF473},{0x76EE, 0xA5D8},
- {0x76EF, 0xA86E},{0x76F0, 0xCD78},{0x76F1, 0xCD77},{0x76F2, 0xAABC},{0x76F3, 0xCD76},{0x76F4, 0xAABD},{0x76F5, 0xCD79},{0x76F7, 0xCFE5},
- {0x76F8, 0xACDB},{0x76F9, 0xACDA},{0x76FA, 0xCFE7},{0x76FB, 0xCFE6},{0x76FC, 0xACDF},{0x76FE, 0xACDE},{0x7701, 0xACD9},{0x7703, 0xCFE1},
- {0x7704, 0xCFE2},{0x7705, 0xCFE3},{0x7707, 0xACE0},{0x7708, 0xCFE0},{0x7709, 0xACDC},{0x770A, 0xCFE4},{0x770B, 0xACDD},{0x7710, 0xD2CF},
- {0x7711, 0xD2D3},{0x7712, 0xD2D1},{0x7713, 0xD2D0},{0x7715, 0xD2D4},{0x7719, 0xD2D5},{0x771A, 0xD2D6},{0x771B, 0xD2CE},{0x771D, 0xD2CD},
- {0x771F, 0xAF75},{0x7720, 0xAF76},{0x7722, 0xD2D7},{0x7723, 0xD2D2},{0x7725, 0xD6B0},{0x7727, 0xD2D8},{0x7728, 0xAF77},{0x7729, 0xAF74},
- {0x772D, 0xD6AA},{0x772F, 0xD6A9},{0x7731, 0xD6AB},{0x7732, 0xD6AC},{0x7733, 0xD6AE},{0x7734, 0xD6AD},{0x7735, 0xD6B2},{0x7736, 0xB2B5},
- {0x7737, 0xB2B2},{0x7738, 0xB2B6},{0x7739, 0xD6A8},{0x773A, 0xB2B7},{0x773B, 0xD6B1},{0x773C, 0xB2B4},{0x773D, 0xD6AF},{0x773E, 0xB2B3},
- {0x7744, 0xDABC},{0x7745, 0xDABE},{0x7746, 0xDABA},{0x7747, 0xDABB},{0x774A, 0xDABF},{0x774B, 0xDAC1},{0x774C, 0xDAC2},{0x774D, 0xDABD},
- {0x774E, 0xDAC0},{0x774F, 0xB574},{0x7752, 0xDEDB},{0x7754, 0xDEE0},{0x7755, 0xDED8},{0x7756, 0xDEDC},{0x7759, 0xDEE1},{0x775A, 0xDEDD},
- {0x775B, 0xB7FA},{0x775C, 0xB843},{0x775E, 0xB7FD},{0x775F, 0xDED9},{0x7760, 0xDEDA},{0x7761, 0xBACE},{0x7762, 0xB846},{0x7763, 0xB7FE},
- {0x7765, 0xB844},{0x7766, 0xB7FC},{0x7767, 0xDEDF},{0x7768, 0xB845},{0x7769, 0xDEDE},{0x776A, 0xB841},{0x776B, 0xB7FB},{0x776C, 0xB842},
- {0x776D, 0xDEE2},{0x776E, 0xE2E6},{0x776F, 0xE2E8},{0x7779, 0xB840},{0x777C, 0xE2E3},{0x777D, 0xBACC},{0x777E, 0xE2E9},{0x777F, 0xBACD},
- {0x7780, 0xE2E7},{0x7781, 0xE2E2},{0x7782, 0xE2E5},{0x7783, 0xE2EA},{0x7784, 0xBACB},{0x7785, 0xE2E4},{0x7787, 0xBD4E},{0x7788, 0xE6BF},
- {0x7789, 0xE6BE},{0x778B, 0xBD51},{0x778C, 0xBD4F},{0x778D, 0xE6BC},{0x778E, 0xBD4D},{0x778F, 0xE6BD},{0x7791, 0xBD50},{0x7795, 0xEA7D},
- {0x7797, 0xEAA1},{0x7799, 0xEA7E},{0x779A, 0xEA76},{0x779B, 0xEA7A},{0x779C, 0xEA79},{0x779D, 0xEA77},{0x779E, 0xBF66},{0x779F, 0xBF67},
- {0x77A0, 0xBF65},{0x77A1, 0xEA78},{0x77A2, 0xEA7B},{0x77A3, 0xEA7C},{0x77A5, 0xBF68},{0x77A7, 0xC140},{0x77A8, 0xEDA3},{0x77AA, 0xC0FC},
- {0x77AB, 0xED7B},{0x77AC, 0xC0FE},{0x77AD, 0xC141},{0x77B0, 0xC0FD},{0x77B1, 0xEDA2},{0x77B2, 0xED7C},{0x77B3, 0xC0FB},{0x77B4, 0xEDA1},
- {0x77B5, 0xED7A},{0x77B6, 0xED7E},{0x77B7, 0xED7D},{0x77BA, 0xF055},{0x77BB, 0xC2A4},{0x77BC, 0xC2A5},{0x77BD, 0xC2A2},{0x77BF, 0xC2A3},
- {0x77C2, 0xF054},{0x77C4, 0xF27B},{0x77C7, 0xC3A9},{0x77C9, 0xF279},{0x77CA, 0xF27A},{0x77CC, 0xF474},{0x77CD, 0xF477},{0x77CE, 0xF475},
- {0x77CF, 0xF476},{0x77D0, 0xF5E0},{0x77D3, 0xC4EF},{0x77D4, 0xF7EB},{0x77D5, 0xF8B4},{0x77D7, 0xC5F7},{0x77D8, 0xF8F8},{0x77D9, 0xF8F9},
- {0x77DA, 0xC666},{0x77DB, 0xA5D9},{0x77DC, 0xACE1},{0x77DE, 0xDAC3},{0x77E0, 0xDEE3},{0x77E2, 0xA5DA},{0x77E3, 0xA86F},{0x77E5, 0xAABE},
- {0x77E7, 0xCFE8},{0x77E8, 0xCFE9},{0x77E9, 0xAF78},{0x77EC, 0xDAC4},{0x77ED, 0xB575},{0x77EE, 0xB847},{0x77EF, 0xC142},{0x77F0, 0xEDA4},
- {0x77F1, 0xF27C},{0x77F2, 0xF478},{0x77F3, 0xA5DB},{0x77F7, 0xCDA1},{0x77F8, 0xCD7A},{0x77F9, 0xCD7C},{0x77FA, 0xCD7E},{0x77FB, 0xCD7D},
- {0x77FC, 0xCD7B},{0x77FD, 0xAABF},{0x7802, 0xACE2},{0x7803, 0xCFF2},{0x7805, 0xCFED},{0x7806, 0xCFEA},{0x7809, 0xCFF1},{0x780C, 0xACE4},
- {0x780D, 0xACE5},{0x780E, 0xCFF0},{0x780F, 0xCFEF},{0x7810, 0xCFEE},{0x7811, 0xCFEB},{0x7812, 0xCFEC},{0x7813, 0xCFF3},{0x7814, 0xACE3},
- {0x781D, 0xAF7C},{0x781F, 0xAFA4},{0x7820, 0xAFA3},{0x7821, 0xD2E1},{0x7822, 0xD2DB},{0x7823, 0xD2D9},{0x7825, 0xAFA1},{0x7826, 0xD6B9},
- {0x7827, 0xAF7A},{0x7828, 0xD2DE},{0x7829, 0xD2E2},{0x782A, 0xD2E4},{0x782B, 0xD2E0},{0x782C, 0xD2DA},{0x782D, 0xAFA2},{0x782E, 0xD2DF},
- {0x782F, 0xD2DD},{0x7830, 0xAF79},{0x7831, 0xD2E5},{0x7832, 0xAFA5},{0x7833, 0xD2E3},{0x7834, 0xAF7D},{0x7835, 0xD2DC},{0x7837, 0xAF7E},
- {0x7838, 0xAF7B},{0x7843, 0xB2B9},{0x7845, 0xD6BA},{0x7848, 0xD6B3},{0x7849, 0xD6B5},{0x784A, 0xD6B7},{0x784C, 0xD6B8},{0x784D, 0xD6B6},
- {0x784E, 0xB2BA},{0x7850, 0xD6BB},{0x7852, 0xD6B4},{0x785C, 0xDAC8},{0x785D, 0xB576},{0x785E, 0xDAD0},{0x7860, 0xDAC5},{0x7862, 0xDAD1},
- {0x7864, 0xDAC6},{0x7865, 0xDAC7},{0x7868, 0xDACF},{0x7869, 0xDACE},{0x786A, 0xDACB},{0x786B, 0xB2B8},{0x786C, 0xB577},{0x786D, 0xDAC9},
- {0x786E, 0xDACC},{0x786F, 0xB578},{0x7870, 0xDACD},{0x7871, 0xDACA},{0x7879, 0xDEEE},{0x787B, 0xDEF2},{0x787C, 0xB84E},{0x787E, 0xE2F0},
- {0x787F, 0xB851},{0x7880, 0xDEF0},{0x7883, 0xDEED},{0x7884, 0xDEE8},{0x7885, 0xDEEA},{0x7886, 0xDEEB},{0x7887, 0xDEE4},{0x7889, 0xB84D},
- {0x788C, 0xB84C},{0x788E, 0xB848},{0x788F, 0xDEE7},{0x7891, 0xB84F},{0x7893, 0xB850},{0x7894, 0xDEE6},{0x7895, 0xDEE9},{0x7896, 0xDEF1},
- {0x7897, 0xB84A},{0x7898, 0xB84B},{0x7899, 0xDEEF},{0x789A, 0xDEE5},{0x789E, 0xE2F2},{0x789F, 0xBAD0},{0x78A0, 0xE2F4},{0x78A1, 0xDEEC},
- {0x78A2, 0xE2F6},{0x78A3, 0xBAD4},{0x78A4, 0xE2F7},{0x78A5, 0xE2F3},{0x78A7, 0xBAD1},{0x78A8, 0xE2EF},{0x78A9, 0xBAD3},{0x78AA, 0xE2EC},
- {0x78AB, 0xE2F1},{0x78AC, 0xE2F5},{0x78AD, 0xE2EE},{0x78B0, 0xB849},{0x78B2, 0xE2EB},{0x78B3, 0xBAD2},{0x78B4, 0xE2ED},{0x78BA, 0xBD54},
- {0x78BB, 0xE6C1},{0x78BC, 0xBD58},{0x78BE, 0xBD56},{0x78C1, 0xBACF},{0x78C3, 0xE6C8},{0x78C4, 0xE6C9},{0x78C5, 0xBD53},{0x78C8, 0xE6C7},
- {0x78C9, 0xE6CA},{0x78CA, 0xBD55},{0x78CB, 0xBD52},{0x78CC, 0xE6C3},{0x78CD, 0xE6C0},{0x78CE, 0xE6C5},{0x78CF, 0xE6C2},{0x78D0, 0xBD59},
- {0x78D1, 0xE6C4},{0x78D4, 0xE6C6},{0x78D5, 0xBD57},{0x78DA, 0xBF6A},{0x78DB, 0xEAA8},{0x78DD, 0xEAA2},{0x78DE, 0xEAA6},{0x78DF, 0xEAAC},
- {0x78E0, 0xEAAD},{0x78E1, 0xEAA9},{0x78E2, 0xEAAA},{0x78E3, 0xEAA7},{0x78E5, 0xEAA4},{0x78E7, 0xBF6C},{0x78E8, 0xBF69},{0x78E9, 0xEAA3},
- {0x78EA, 0xEAA5},{0x78EC, 0xBF6B},{0x78ED, 0xEAAB},{0x78EF, 0xC146},{0x78F2, 0xEDAA},{0x78F3, 0xEDA5},{0x78F4, 0xC145},{0x78F7, 0xC143},
- {0x78F9, 0xEDAC},{0x78FA, 0xC144},{0x78FB, 0xEDA8},{0x78FC, 0xEDA9},{0x78FD, 0xEDA6},{0x78FE, 0xEDAD},{0x78FF, 0xF056},{0x7901, 0xC147},
- {0x7902, 0xEDA7},{0x7904, 0xEDAE},{0x7905, 0xEDAB},{0x7909, 0xF05A},{0x790C, 0xF057},{0x790E, 0xC2A6},{0x7910, 0xF05B},{0x7911, 0xF05D},
- {0x7912, 0xF05C},{0x7913, 0xF058},{0x7914, 0xF059},{0x7917, 0xF2A3},{0x7919, 0xC3AA},{0x791B, 0xF27E},{0x791C, 0xF2A2},{0x791D, 0xF27D},
- {0x791E, 0xF2A4},{0x7921, 0xF2A1},{0x7923, 0xF47A},{0x7924, 0xF47D},{0x7925, 0xF479},{0x7926, 0xC471},{0x7927, 0xF47B},{0x7928, 0xF47C},
- {0x7929, 0xF47E},{0x792A, 0xC472},{0x792B, 0xC474},{0x792C, 0xC473},{0x792D, 0xF5E1},{0x792F, 0xF5E3},{0x7931, 0xF5E2},{0x7935, 0xF6F6},
- {0x7938, 0xF8B5},{0x7939, 0xF8FA},{0x793A, 0xA5DC},{0x793D, 0xCB72},{0x793E, 0xAAC0},{0x793F, 0xCDA3},{0x7940, 0xAAC1},{0x7941, 0xAAC2},
- {0x7942, 0xCDA2},{0x7944, 0xCFF8},{0x7945, 0xCFF7},{0x7946, 0xACE6},{0x7947, 0xACE9},{0x7948, 0xACE8},{0x7949, 0xACE7},{0x794A, 0xCFF4},
- {0x794B, 0xCFF6},{0x794C, 0xCFF5},{0x794F, 0xD2E8},{0x7950, 0xAFA7},{0x7951, 0xD2EC},{0x7952, 0xD2EB},{0x7953, 0xD2EA},{0x7954, 0xD2E6},
- {0x7955, 0xAFA6},{0x7956, 0xAFAA},{0x7957, 0xAFAD},{0x795A, 0xAFAE},{0x795B, 0xD2E7},{0x795C, 0xD2E9},{0x795D, 0xAFAC},{0x795E, 0xAFAB},
- {0x795F, 0xAFA9},{0x7960, 0xAFA8},{0x7961, 0xD6C2},{0x7963, 0xD6C0},{0x7964, 0xD6BC},{0x7965, 0xB2BB},{0x7967, 0xD6BD},{0x7968, 0xB2BC},
- {0x7969, 0xD6BE},{0x796A, 0xD6BF},{0x796B, 0xD6C1},{0x796D, 0xB2BD},{0x7970, 0xDAD5},{0x7972, 0xDAD4},{0x7973, 0xDAD3},{0x7974, 0xDAD2},
- {0x7979, 0xDEF6},{0x797A, 0xB852},{0x797C, 0xDEF3},{0x797D, 0xDEF5},{0x797F, 0xB853},{0x7981, 0xB854},{0x7982, 0xDEF4},{0x7988, 0xE341},
- {0x798A, 0xE2F9},{0x798B, 0xE2FA},{0x798D, 0xBAD7},{0x798E, 0xBAD5},{0x798F, 0xBAD6},{0x7990, 0xE343},{0x7992, 0xE342},{0x7993, 0xE2FE},
- {0x7994, 0xE2FD},{0x7995, 0xE2FC},{0x7996, 0xE2FB},{0x7997, 0xE340},{0x7998, 0xE2F8},{0x799A, 0xE6CB},{0x799B, 0xE6D0},{0x799C, 0xE6CE},
- {0x79A0, 0xE6CD},{0x79A1, 0xE6CC},{0x79A2, 0xE6CF},{0x79A4, 0xEAAE},{0x79A6, 0xBF6D},{0x79A7, 0xC148},{0x79A8, 0xEDB0},{0x79AA, 0xC149},
- {0x79AB, 0xEDAF},{0x79AC, 0xF05F},{0x79AD, 0xF05E},{0x79AE, 0xC2A7},{0x79B0, 0xF2A5},{0x79B1, 0xC3AB},{0x79B2, 0xF4A1},{0x79B3, 0xC5A1},
- {0x79B4, 0xF6F7},{0x79B6, 0xF8B7},{0x79B7, 0xF8B6},{0x79B8, 0xC9A8},{0x79B9, 0xACEA},{0x79BA, 0xACEB},{0x79BB, 0xD6C3},{0x79BD, 0xB856},
- {0x79BE, 0xA5DD},{0x79BF, 0xA872},{0x79C0, 0xA871},{0x79C1, 0xA870},{0x79C5, 0xCDA4},{0x79C8, 0xAAC4},{0x79C9, 0xAAC3},{0x79CB, 0xACEE},
- {0x79CD, 0xCFFA},{0x79CE, 0xCFFD},{0x79CF, 0xCFFB},{0x79D1, 0xACEC},{0x79D2, 0xACED},{0x79D5, 0xCFF9},{0x79D6, 0xCFFC},{0x79D8, 0xAFB5},
- {0x79DC, 0xD2F3},{0x79DD, 0xD2F5},{0x79DE, 0xD2F4},{0x79DF, 0xAFB2},{0x79E0, 0xD2EF},{0x79E3, 0xAFB0},{0x79E4, 0xAFAF},{0x79E6, 0xAFB3},
- {0x79E7, 0xAFB1},{0x79E9, 0xAFB4},{0x79EA, 0xD2F2},{0x79EB, 0xD2ED},{0x79EC, 0xD2EE},{0x79ED, 0xD2F1},{0x79EE, 0xD2F0},{0x79F6, 0xD6C6},
- {0x79F7, 0xD6C7},{0x79F8, 0xD6C5},{0x79FA, 0xD6C4},{0x79FB, 0xB2BE},{0x7A00, 0xB57D},{0x7A02, 0xDAD6},{0x7A03, 0xDAD8},{0x7A04, 0xDADA},
- {0x7A05, 0xB57C},{0x7A08, 0xB57A},{0x7A0A, 0xDAD7},{0x7A0B, 0xB57B},{0x7A0C, 0xDAD9},{0x7A0D, 0xB579},{0x7A10, 0xDF41},{0x7A11, 0xDEF7},
- {0x7A12, 0xDEFA},{0x7A13, 0xDEFE},{0x7A14, 0xB85A},{0x7A15, 0xDEFC},{0x7A17, 0xDEFB},{0x7A18, 0xDEF8},{0x7A19, 0xDEF9},{0x7A1A, 0xB858},
- {0x7A1B, 0xDF40},{0x7A1C, 0xB857},{0x7A1E, 0xB85C},{0x7A1F, 0xB85B},{0x7A20, 0xB859},{0x7A22, 0xDEFD},{0x7A26, 0xE349},{0x7A28, 0xE348},
- {0x7A2B, 0xE344},{0x7A2E, 0xBAD8},{0x7A2F, 0xE347},{0x7A30, 0xE346},{0x7A31, 0xBAD9},{0x7A37, 0xBD5E},{0x7A39, 0xE6D2},{0x7A3B, 0xBD5F},
- {0x7A3C, 0xBD5B},{0x7A3D, 0xBD5D},{0x7A3F, 0xBD5A},{0x7A40, 0xBD5C},{0x7A44, 0xEAAF},{0x7A46, 0xBF70},{0x7A47, 0xEAB1},{0x7A48, 0xEAB0},
- {0x7A4A, 0xE345},{0x7A4B, 0xBF72},{0x7A4C, 0xBF71},{0x7A4D, 0xBF6E},{0x7A4E, 0xBF6F},{0x7A54, 0xEDB5},{0x7A56, 0xEDB3},{0x7A57, 0xC14A},
- {0x7A58, 0xEDB4},{0x7A5A, 0xEDB6},{0x7A5B, 0xEDB2},{0x7A5C, 0xEDB1},{0x7A5F, 0xF060},{0x7A60, 0xC2AA},{0x7A61, 0xC2A8},{0x7A62, 0xC2A9},
- {0x7A67, 0xF2A6},{0x7A68, 0xF2A7},{0x7A69, 0xC3AD},{0x7A6B, 0xC3AC},{0x7A6C, 0xF4A3},{0x7A6D, 0xF4A4},{0x7A6E, 0xF4A2},{0x7A70, 0xF6F8},
- {0x7A71, 0xF6F9},{0x7A74, 0xA5DE},{0x7A75, 0xCA48},{0x7A76, 0xA873},{0x7A78, 0xCDA5},{0x7A79, 0xAAC6},{0x7A7A, 0xAAC5},{0x7A7B, 0xCDA6},
- {0x7A7E, 0xD040},{0x7A7F, 0xACEF},{0x7A80, 0xCFFE},{0x7A81, 0xACF0},{0x7A84, 0xAFB6},{0x7A85, 0xD2F8},{0x7A86, 0xD2F6},{0x7A87, 0xD2FC},
- {0x7A88, 0xAFB7},{0x7A89, 0xD2F7},{0x7A8A, 0xD2FB},{0x7A8B, 0xD2F9},{0x7A8C, 0xD2FA},{0x7A8F, 0xD6C8},{0x7A90, 0xD6CA},{0x7A92, 0xB2BF},
- {0x7A94, 0xD6C9},{0x7A95, 0xB2C0},{0x7A96, 0xB5A2},{0x7A97, 0xB5A1},{0x7A98, 0xB57E},{0x7A99, 0xDADB},{0x7A9E, 0xDF44},{0x7A9F, 0xB85D},
- {0x7AA0, 0xB85E},{0x7AA2, 0xDF43},{0x7AA3, 0xDF42},{0x7AA8, 0xE34A},{0x7AA9, 0xBADB},{0x7AAA, 0xBADA},{0x7AAB, 0xE34B},{0x7AAC, 0xE34C},
- {0x7AAE, 0xBD61},{0x7AAF, 0xBD60},{0x7AB1, 0xEAB5},{0x7AB2, 0xE6D3},{0x7AB3, 0xE6D5},{0x7AB4, 0xE6D4},{0x7AB5, 0xEAB4},{0x7AB6, 0xEAB2},
- {0x7AB7, 0xEAB6},{0x7AB8, 0xEAB3},{0x7ABA, 0xBF73},{0x7ABE, 0xEDB7},{0x7ABF, 0xC14B},{0x7AC0, 0xEDB8},{0x7AC1, 0xEDB9},{0x7AC4, 0xC2AB},
- {0x7AC5, 0xC2AC},{0x7AC7, 0xC475},{0x7ACA, 0xC5D1},{0x7ACB, 0xA5DF},{0x7AD1, 0xD041},{0x7AD8, 0xD2FD},{0x7AD9, 0xAFB8},{0x7ADF, 0xB3BA},
- {0x7AE0, 0xB3B9},{0x7AE3, 0xB5A4},{0x7AE4, 0xDADD},{0x7AE5, 0xB5A3},{0x7AE6, 0xDADC},{0x7AEB, 0xDF45},{0x7AED, 0xBADC},{0x7AEE, 0xE34D},
- {0x7AEF, 0xBADD},{0x7AF6, 0xC476},{0x7AF7, 0xF4A5},{0x7AF9, 0xA6CB},{0x7AFA, 0xAAC7},{0x7AFB, 0xCDA7},{0x7AFD, 0xACF2},{0x7AFF, 0xACF1},
- {0x7B00, 0xD042},{0x7B01, 0xD043},{0x7B04, 0xD340},{0x7B05, 0xD342},{0x7B06, 0xAFB9},{0x7B08, 0xD344},{0x7B09, 0xD347},{0x7B0A, 0xD345},
- {0x7B0E, 0xD346},{0x7B0F, 0xD343},{0x7B10, 0xD2FE},{0x7B11, 0xAFBA},{0x7B12, 0xD348},{0x7B13, 0xD341},{0x7B18, 0xD6D3},{0x7B19, 0xB2C6},
- {0x7B1A, 0xD6DC},{0x7B1B, 0xB2C3},{0x7B1D, 0xD6D5},{0x7B1E, 0xB2C7},{0x7B20, 0xB2C1},{0x7B22, 0xD6D0},{0x7B23, 0xD6DD},{0x7B24, 0xD6D1},
- {0x7B25, 0xD6CE},{0x7B26, 0xB2C5},{0x7B28, 0xB2C2},{0x7B2A, 0xD6D4},{0x7B2B, 0xD6D7},{0x7B2C, 0xB2C4},{0x7B2D, 0xD6D8},{0x7B2E, 0xB2C8},
- {0x7B2F, 0xD6D9},{0x7B30, 0xD6CF},{0x7B31, 0xD6D6},{0x7B32, 0xD6DA},{0x7B33, 0xD6D2},{0x7B34, 0xD6CD},{0x7B35, 0xD6CB},{0x7B38, 0xD6DB},
- {0x7B3B, 0xDADF},{0x7B40, 0xDAE4},{0x7B44, 0xDAE0},{0x7B45, 0xDAE6},{0x7B46, 0xB5A7},{0x7B47, 0xD6CC},{0x7B48, 0xDAE1},{0x7B49, 0xB5A5},
- {0x7B4A, 0xDADE},{0x7B4B, 0xB5AC},{0x7B4C, 0xDAE2},{0x7B4D, 0xB5AB},{0x7B4E, 0xDAE3},{0x7B4F, 0xB5AD},{0x7B50, 0xB5A8},{0x7B51, 0xB5AE},
- {0x7B52, 0xB5A9},{0x7B54, 0xB5AA},{0x7B56, 0xB5A6},{0x7B58, 0xDAE5},{0x7B60, 0xB861},{0x7B61, 0xDF50},{0x7B63, 0xDF53},{0x7B64, 0xDF47},
- {0x7B65, 0xDF4C},{0x7B66, 0xDF46},{0x7B67, 0xB863},{0x7B69, 0xDF4A},{0x7B6D, 0xDF48},{0x7B6E, 0xB862},{0x7B70, 0xDF4F},{0x7B71, 0xDF4E},
- {0x7B72, 0xDF4B},{0x7B73, 0xDF4D},{0x7B74, 0xDF49},{0x7B75, 0xBAE1},{0x7B76, 0xDF52},{0x7B77, 0xB85F},{0x7B78, 0xDF51},{0x7B82, 0xE35D},
- {0x7B84, 0xBAE8},{0x7B85, 0xE358},{0x7B87, 0xBAE7},{0x7B88, 0xE34E},{0x7B8A, 0xE350},{0x7B8B, 0xBAE0},{0x7B8C, 0xE355},{0x7B8D, 0xE354},
- {0x7B8E, 0xE357},{0x7B8F, 0xBAE5},{0x7B90, 0xE352},{0x7B91, 0xE351},{0x7B94, 0xBAE4},{0x7B95, 0xBADF},{0x7B96, 0xE353},{0x7B97, 0xBAE2},
- {0x7B98, 0xE359},{0x7B99, 0xE35B},{0x7B9B, 0xE356},{0x7B9C, 0xE34F},{0x7B9D, 0xBAE3},{0x7BA0, 0xBD69},{0x7BA1, 0xBADE},{0x7BA4, 0xE35C},
- {0x7BAC, 0xE6D9},{0x7BAD, 0xBD62},{0x7BAF, 0xE6DB},{0x7BB1, 0xBD63},{0x7BB4, 0xBD65},{0x7BB5, 0xE6DE},{0x7BB7, 0xE6D6},{0x7BB8, 0xBAE6},
- {0x7BB9, 0xE6DC},{0x7BBE, 0xE6D8},{0x7BC0, 0xB860},{0x7BC1, 0xBD68},{0x7BC4, 0xBD64},{0x7BC6, 0xBD66},{0x7BC7, 0xBD67},{0x7BC9, 0xBF76},
- {0x7BCA, 0xE6DD},{0x7BCB, 0xE6D7},{0x7BCC, 0xBD6A},{0x7BCE, 0xE6DA},{0x7BD4, 0xEAC0},{0x7BD5, 0xEABB},{0x7BD8, 0xEAC5},{0x7BD9, 0xBF74},
- {0x7BDA, 0xEABD},{0x7BDB, 0xBF78},{0x7BDC, 0xEAC3},{0x7BDD, 0xEABA},{0x7BDE, 0xEAB7},{0x7BDF, 0xEAC6},{0x7BE0, 0xC151},{0x7BE1, 0xBF79},
- {0x7BE2, 0xEAC2},{0x7BE3, 0xEAB8},{0x7BE4, 0xBF77},{0x7BE5, 0xEABC},{0x7BE6, 0xBF7B},{0x7BE7, 0xEAB9},{0x7BE8, 0xEABE},{0x7BE9, 0xBF7A},
- {0x7BEA, 0xEAC1},{0x7BEB, 0xEAC4},{0x7BF0, 0xEDCB},{0x7BF1, 0xEDCC},{0x7BF2, 0xEDBC},{0x7BF3, 0xEDC3},{0x7BF4, 0xEDC1},{0x7BF7, 0xC14F},
- {0x7BF8, 0xEDC8},{0x7BF9, 0xEABF},{0x7BFB, 0xEDBF},{0x7BFD, 0xEDC9},{0x7BFE, 0xC14E},{0x7BFF, 0xEDBE},{0x7C00, 0xEDBD},{0x7C01, 0xEDC7},
- {0x7C02, 0xEDC4},{0x7C03, 0xEDC6},{0x7C05, 0xEDBA},{0x7C06, 0xEDCA},{0x7C07, 0xC14C},{0x7C09, 0xEDC5},{0x7C0A, 0xEDCE},{0x7C0B, 0xEDC2},
- {0x7C0C, 0xC150},{0x7C0D, 0xC14D},{0x7C0E, 0xEDC0},{0x7C0F, 0xEDBB},{0x7C10, 0xEDCD},{0x7C11, 0xBF75},{0x7C19, 0xF063},{0x7C1C, 0xF061},
- {0x7C1D, 0xF067},{0x7C1E, 0xC2B0},{0x7C1F, 0xF065},{0x7C20, 0xF064},{0x7C21, 0xC2B2},{0x7C22, 0xF06A},{0x7C23, 0xC2B1},{0x7C25, 0xF06B},
- {0x7C26, 0xF068},{0x7C27, 0xC2AE},{0x7C28, 0xF069},{0x7C29, 0xF062},{0x7C2A, 0xC2AF},{0x7C2B, 0xC2AD},{0x7C2C, 0xF2AB},{0x7C2D, 0xF066},
- {0x7C30, 0xF06C},{0x7C33, 0xF2A8},{0x7C37, 0xC3B2},{0x7C38, 0xC3B0},{0x7C39, 0xF2AA},{0x7C3B, 0xF2AC},{0x7C3C, 0xF2A9},{0x7C3D, 0xC3B1},
- {0x7C3E, 0xC3AE},{0x7C3F, 0xC3AF},{0x7C40, 0xC3B3},{0x7C43, 0xC478},{0x7C45, 0xF4AA},{0x7C47, 0xF4A9},{0x7C48, 0xF4A7},{0x7C49, 0xF4A6},
- {0x7C4A, 0xF4A8},{0x7C4C, 0xC477},{0x7C4D, 0xC479},{0x7C50, 0xC4F0},{0x7C53, 0xF5E5},{0x7C54, 0xF5E4},{0x7C57, 0xF6FA},{0x7C59, 0xF6FC},
- {0x7C5A, 0xF6FE},{0x7C5B, 0xF6FD},{0x7C5C, 0xF6FB},{0x7C5F, 0xC5A3},{0x7C60, 0xC5A2},{0x7C63, 0xC5D3},{0x7C64, 0xC5D2},{0x7C65, 0xC5D4},
- {0x7C66, 0xF7ED},{0x7C67, 0xF7EC},{0x7C69, 0xF8FB},{0x7C6A, 0xF8B8},{0x7C6B, 0xF8FC},{0x7C6C, 0xC658},{0x7C6E, 0xC659},{0x7C6F, 0xF96D},
- {0x7C72, 0xC67E},{0x7C73, 0xA6CC},{0x7C75, 0xCDA8},{0x7C78, 0xD045},{0x7C79, 0xD046},{0x7C7A, 0xD044},{0x7C7D, 0xACF3},{0x7C7F, 0xD047},
- {0x7C80, 0xD048},{0x7C81, 0xD049},{0x7C84, 0xD349},{0x7C85, 0xD34F},{0x7C88, 0xD34D},{0x7C89, 0xAFBB},{0x7C8A, 0xD34B},{0x7C8C, 0xD34C},
- {0x7C8D, 0xD34E},{0x7C91, 0xD34A},{0x7C92, 0xB2C9},{0x7C94, 0xD6DE},{0x7C95, 0xB2CB},{0x7C96, 0xD6E0},{0x7C97, 0xB2CA},{0x7C98, 0xD6DF},
- {0x7C9E, 0xDAE8},{0x7C9F, 0xB5AF},{0x7CA1, 0xDAEA},{0x7CA2, 0xDAE7},{0x7CA3, 0xD6E1},{0x7CA5, 0xB5B0},{0x7CA8, 0xDAE9},{0x7CAF, 0xDF56},
- {0x7CB1, 0xB864},{0x7CB2, 0xDF54},{0x7CB3, 0xB865},{0x7CB4, 0xDF55},{0x7CB5, 0xB866},{0x7CB9, 0xBAE9},{0x7CBA, 0xE361},{0x7CBB, 0xE35E},
- {0x7CBC, 0xE360},{0x7CBD, 0xBAEA},{0x7CBE, 0xBAEB},{0x7CBF, 0xE35F},{0x7CC5, 0xE6DF},{0x7CC8, 0xE6E0},{0x7CCA, 0xBD6B},{0x7CCB, 0xE6E2},
- {0x7CCC, 0xE6E1},{0x7CCE, 0xA261},{0x7CD0, 0xEACA},{0x7CD1, 0xEACB},{0x7CD2, 0xEAC7},{0x7CD4, 0xEAC8},{0x7CD5, 0xBF7C},{0x7CD6, 0xBF7D},
- {0x7CD7, 0xEAC9},{0x7CD9, 0xC157},{0x7CDC, 0xC153},{0x7CDD, 0xC158},{0x7CDE, 0xC154},{0x7CDF, 0xC156},{0x7CE0, 0xC152},{0x7CE2, 0xC155},
- {0x7CE7, 0xC2B3},{0x7CE8, 0xEDCF},{0x7CEA, 0xF2AE},{0x7CEC, 0xF2AD},{0x7CEE, 0xF4AB},{0x7CEF, 0xC47A},{0x7CF0, 0xC47B},{0x7CF1, 0xF741},
- {0x7CF2, 0xF5E6},{0x7CF4, 0xF740},{0x7CF6, 0xF8FD},{0x7CF7, 0xF9A4},{0x7CF8, 0xA6CD},{0x7CFB, 0xA874},{0x7CFD, 0xCDA9},{0x7CFE, 0xAAC8},
- {0x7D00, 0xACF6},{0x7D01, 0xD04C},{0x7D02, 0xACF4},{0x7D03, 0xD04A},{0x7D04, 0xACF9},{0x7D05, 0xACF5},{0x7D06, 0xACFA},{0x7D07, 0xACF8},
- {0x7D08, 0xD04B},{0x7D09, 0xACF7},{0x7D0A, 0xAFBF},{0x7D0B, 0xAFBE},{0x7D0C, 0xD35A},{0x7D0D, 0xAFC7},{0x7D0E, 0xD353},{0x7D0F, 0xD359},
- {0x7D10, 0xAFC3},{0x7D11, 0xD352},{0x7D12, 0xD358},{0x7D13, 0xD356},{0x7D14, 0xAFC2},{0x7D15, 0xAFC4},{0x7D16, 0xD355},{0x7D17, 0xAFBD},
- {0x7D18, 0xD354},{0x7D19, 0xAFC8},{0x7D1A, 0xAFC5},{0x7D1B, 0xAFC9},{0x7D1C, 0xAFC6},{0x7D1D, 0xD351},{0x7D1E, 0xD350},{0x7D1F, 0xD357},
- {0x7D20, 0xAFC0},{0x7D21, 0xAFBC},{0x7D22, 0xAFC1},{0x7D28, 0xD6F0},{0x7D29, 0xD6E9},{0x7D2B, 0xB5B5},{0x7D2C, 0xD6E8},{0x7D2E, 0xB2CF},
- {0x7D2F, 0xB2D6},{0x7D30, 0xB2D3},{0x7D31, 0xB2D9},{0x7D32, 0xB2D8},{0x7D33, 0xB2D4},{0x7D35, 0xD6E2},{0x7D36, 0xD6E5},{0x7D38, 0xD6E4},
- {0x7D39, 0xB2D0},{0x7D3A, 0xD6E6},{0x7D3B, 0xD6EF},{0x7D3C, 0xB2D1},{0x7D3D, 0xD6E3},{0x7D3E, 0xD6EC},{0x7D3F, 0xD6ED},{0x7D40, 0xB2D2},
- {0x7D41, 0xD6EA},{0x7D42, 0xB2D7},{0x7D43, 0xB2CD},{0x7D44, 0xB2D5},{0x7D45, 0xD6E7},{0x7D46, 0xB2CC},{0x7D47, 0xD6EB},{0x7D4A, 0xD6EE},
- {0x7D4E, 0xDAFB},{0x7D4F, 0xDAF2},{0x7D50, 0xB5B2},{0x7D51, 0xDAF9},{0x7D52, 0xDAF6},{0x7D53, 0xDAEE},{0x7D54, 0xDAF7},{0x7D55, 0xB5B4},
- {0x7D56, 0xDAEF},{0x7D58, 0xDAEB},{0x7D5B, 0xB86C},{0x7D5C, 0xDAF4},{0x7D5E, 0xB5B1},{0x7D5F, 0xDAFA},{0x7D61, 0xB5B8},{0x7D62, 0xB5BA},
- {0x7D63, 0xDAED},{0x7D66, 0xB5B9},{0x7D67, 0xDAF0},{0x7D68, 0xB5B3},{0x7D69, 0xDAF8},{0x7D6A, 0xDAF1},{0x7D6B, 0xDAF5},{0x7D6D, 0xDAF3},
- {0x7D6E, 0xB5B6},{0x7D6F, 0xDAEC},{0x7D70, 0xB5BB},{0x7D71, 0xB2CE},{0x7D72, 0xB5B7},{0x7D73, 0xB5BC},{0x7D79, 0xB868},{0x7D7A, 0xDF5D},
- {0x7D7B, 0xDF5F},{0x7D7C, 0xDF61},{0x7D7D, 0xDF65},{0x7D7F, 0xDF5B},{0x7D80, 0xDF59},{0x7D81, 0xB86A},{0x7D83, 0xDF60},{0x7D84, 0xDF64},
- {0x7D85, 0xDF5C},{0x7D86, 0xDF58},{0x7D88, 0xDF57},{0x7D8C, 0xDF62},{0x7D8D, 0xDF5A},{0x7D8E, 0xDF5E},{0x7D8F, 0xB86B},{0x7D91, 0xB869},
- {0x7D92, 0xDF66},{0x7D93, 0xB867},{0x7D94, 0xDF63},{0x7D96, 0xE372},{0x7D9C, 0xBAEE},{0x7D9D, 0xE36A},{0x7D9E, 0xBD78},{0x7D9F, 0xE374},
- {0x7DA0, 0xBAF1},{0x7DA1, 0xE378},{0x7DA2, 0xBAF7},{0x7DA3, 0xE365},{0x7DA6, 0xE375},{0x7DA7, 0xE362},{0x7DA9, 0xE377},{0x7DAA, 0xE366},
- {0x7DAC, 0xBAFE},{0x7DAD, 0xBAFB},{0x7DAE, 0xE376},{0x7DAF, 0xE370},{0x7DB0, 0xBAED},{0x7DB1, 0xBAF5},{0x7DB2, 0xBAF4},{0x7DB4, 0xBAF3},
- {0x7DB5, 0xBAF9},{0x7DB7, 0xE363},{0x7DB8, 0xBAFA},{0x7DB9, 0xE371},{0x7DBA, 0xBAF6},{0x7DBB, 0xBAEC},{0x7DBC, 0xE373},{0x7DBD, 0xBAEF},
- {0x7DBE, 0xBAF0},{0x7DBF, 0xBAF8},{0x7DC0, 0xE368},{0x7DC1, 0xE367},{0x7DC2, 0xE364},{0x7DC4, 0xE36C},{0x7DC5, 0xE369},{0x7DC6, 0xE36D},
- {0x7DC7, 0xBAFD},{0x7DC9, 0xE379},{0x7DCA, 0xBAF2},{0x7DCB, 0xE36E},{0x7DCC, 0xE36F},{0x7DCE, 0xE36B},{0x7DD2, 0xBAFC},{0x7DD7, 0xE6E7},
- {0x7DD8, 0xBD70},{0x7DD9, 0xBD79},{0x7DDA, 0xBD75},{0x7DDB, 0xE6E4},{0x7DDD, 0xBD72},{0x7DDE, 0xBD76},{0x7DDF, 0xE6F0},{0x7DE0, 0xBD6C},
- {0x7DE1, 0xE6E8},{0x7DE3, 0xBD74},{0x7DE6, 0xE6EB},{0x7DE7, 0xE6E6},{0x7DE8, 0xBD73},{0x7DE9, 0xBD77},{0x7DEA, 0xE6E5},{0x7DEC, 0xBD71},
- {0x7DEE, 0xE6EF},{0x7DEF, 0xBD6E},{0x7DF0, 0xE6EE},{0x7DF1, 0xE6ED},{0x7DF2, 0xBD7A},{0x7DF3, 0xE572},{0x7DF4, 0xBD6D},{0x7DF6, 0xE6EC},
- {0x7DF7, 0xE6E3},{0x7DF9, 0xBD7B},{0x7DFA, 0xE6EA},{0x7DFB, 0xBD6F},{0x7E03, 0xE6E9},{0x7E08, 0xBFA2},{0x7E09, 0xBFA7},{0x7E0A, 0xBF7E},
- {0x7E0B, 0xEAD8},{0x7E0C, 0xEACF},{0x7E0D, 0xEADB},{0x7E0E, 0xEAD3},{0x7E0F, 0xEAD9},{0x7E10, 0xBFA8},{0x7E11, 0xBFA1},{0x7E12, 0xEACC},
- {0x7E13, 0xEAD2},{0x7E14, 0xEADC},{0x7E15, 0xEAD5},{0x7E16, 0xEADA},{0x7E17, 0xEACE},{0x7E1A, 0xEAD6},{0x7E1B, 0xBFA3},{0x7E1C, 0xEAD4},
- {0x7E1D, 0xBFA6},{0x7E1E, 0xBFA5},{0x7E1F, 0xEAD0},{0x7E20, 0xEAD1},{0x7E21, 0xEACD},{0x7E22, 0xEAD7},{0x7E23, 0xBFA4},{0x7E24, 0xEADE},
- {0x7E25, 0xEADD},{0x7E29, 0xEDDA},{0x7E2A, 0xEDD6},{0x7E2B, 0xC15F},{0x7E2D, 0xEDD0},{0x7E2E, 0xC159},{0x7E2F, 0xC169},{0x7E30, 0xEDDC},
- {0x7E31, 0xC161},{0x7E32, 0xC15D},{0x7E33, 0xEDD3},{0x7E34, 0xC164},{0x7E35, 0xC167},{0x7E36, 0xEDDE},{0x7E37, 0xC15C},{0x7E38, 0xEDD5},
- {0x7E39, 0xC165},{0x7E3A, 0xEDE0},{0x7E3B, 0xEDDD},{0x7E3C, 0xEDD1},{0x7E3D, 0xC160},{0x7E3E, 0xC15A},{0x7E3F, 0xC168},{0x7E40, 0xEDD8},
- {0x7E41, 0xC163},{0x7E42, 0xEDD2},{0x7E43, 0xC15E},{0x7E44, 0xEDDF},{0x7E45, 0xC162},{0x7E46, 0xC15B},{0x7E47, 0xEDD9},{0x7E48, 0xC166},
- {0x7E49, 0xEDD7},{0x7E4C, 0xEDDB},{0x7E50, 0xF06E},{0x7E51, 0xF074},{0x7E52, 0xC2B9},{0x7E53, 0xF077},{0x7E54, 0xC2B4},{0x7E55, 0xC2B5},
- {0x7E56, 0xF06F},{0x7E57, 0xF076},{0x7E58, 0xF071},{0x7E59, 0xC2BA},{0x7E5A, 0xC2B7},{0x7E5C, 0xF06D},{0x7E5E, 0xC2B6},{0x7E5F, 0xF073},
- {0x7E60, 0xF075},{0x7E61, 0xC2B8},{0x7E62, 0xF072},{0x7E63, 0xF070},{0x7E68, 0xF2B8},{0x7E69, 0xC3B7},{0x7E6A, 0xC3B8},{0x7E6B, 0xC3B4},
- {0x7E6D, 0xC3B5},{0x7E6F, 0xF2B4},{0x7E70, 0xF2B2},{0x7E72, 0xF2B6},{0x7E73, 0xC3BA},{0x7E74, 0xF2B7},{0x7E75, 0xF2B0},{0x7E76, 0xF2AF},
- {0x7E77, 0xF2B3},{0x7E78, 0xF2B1},{0x7E79, 0xC3B6},{0x7E7A, 0xF2B5},{0x7E7B, 0xF4AC},{0x7E7C, 0xC47E},{0x7E7D, 0xC47D},{0x7E7E, 0xF4AD},
- {0x7E80, 0xF4AF},{0x7E81, 0xF4AE},{0x7E82, 0xC4A1},{0x7E86, 0xF5EB},{0x7E87, 0xF5E8},{0x7E88, 0xF5E9},{0x7E8A, 0xF5E7},{0x7E8B, 0xF5EA},
- {0x7E8C, 0xC4F2},{0x7E8D, 0xF5EC},{0x7E8F, 0xC4F1},{0x7E91, 0xF742},{0x7E93, 0xC5D5},{0x7E94, 0xC5D7},{0x7E95, 0xF7EE},{0x7E96, 0xC5D6},
- {0x7E97, 0xF8B9},{0x7E98, 0xF940},{0x7E99, 0xF942},{0x7E9A, 0xF8FE},{0x7E9B, 0xF941},{0x7E9C, 0xC66C},{0x7F36, 0xA6CE},{0x7F38, 0xACFB},
- {0x7F39, 0xD26F},{0x7F3A, 0xAFCA},{0x7F3D, 0xB2DA},{0x7F3E, 0xDAFC},{0x7F3F, 0xDAFD},{0x7F43, 0xEADF},{0x7F44, 0xC16A},{0x7F45, 0xEDE1},
- {0x7F48, 0xC2BB},{0x7F4A, 0xF2BA},{0x7F4B, 0xF2B9},{0x7F4C, 0xC4A2},{0x7F4D, 0xF5ED},{0x7F4F, 0xF743},{0x7F50, 0xC5F8},{0x7F51, 0xCA49},
- {0x7F54, 0xAAC9},{0x7F55, 0xA875},{0x7F58, 0xD04D},{0x7F5B, 0xD360},{0x7F5C, 0xD35B},{0x7F5D, 0xD35F},{0x7F5E, 0xD35D},{0x7F5F, 0xAFCB},
- {0x7F60, 0xD35E},{0x7F61, 0xD35C},{0x7F63, 0xD6F1},{0x7F65, 0xDAFE},{0x7F66, 0xDB40},{0x7F67, 0xDF69},{0x7F68, 0xDF6A},{0x7F69, 0xB86E},
- {0x7F6A, 0xB86F},{0x7F6B, 0xDF68},{0x7F6C, 0xDF6B},{0x7F6D, 0xDF67},{0x7F6E, 0xB86D},{0x7F70, 0xBB40},{0x7F72, 0xB870},{0x7F73, 0xE37A},
- {0x7F75, 0xBD7C},{0x7F76, 0xE6F1},{0x7F77, 0xBD7D},{0x7F79, 0xBFA9},{0x7F7A, 0xEAE2},{0x7F7B, 0xEAE0},{0x7F7C, 0xEAE1},{0x7F7D, 0xEDE4},
- {0x7F7E, 0xEDE3},{0x7F7F, 0xEDE2},{0x7F83, 0xF2BB},{0x7F85, 0xC3B9},{0x7F86, 0xF2BC},{0x7F87, 0xF744},{0x7F88, 0xC5F9},{0x7F89, 0xF8BA},
- {0x7F8A, 0xA6CF},{0x7F8B, 0xAACB},{0x7F8C, 0xAACA},{0x7F8D, 0xD04F},{0x7F8E, 0xACFC},{0x7F91, 0xD04E},{0x7F92, 0xD362},{0x7F94, 0xAFCC},
- {0x7F95, 0xD6F2},{0x7F96, 0xD361},{0x7F9A, 0xB2DC},{0x7F9B, 0xD6F5},{0x7F9C, 0xD6F3},{0x7F9D, 0xD6F4},{0x7F9E, 0xB2DB},{0x7FA0, 0xDB42},
- {0x7FA1, 0xDB43},{0x7FA2, 0xDB41},{0x7FA4, 0xB873},{0x7FA5, 0xDF6D},{0x7FA6, 0xDF6C},{0x7FA7, 0xDF6E},{0x7FA8, 0xB872},{0x7FA9, 0xB871},
- {0x7FAC, 0xE6F2},{0x7FAD, 0xE6F4},{0x7FAF, 0xBD7E},{0x7FB0, 0xE6F3},{0x7FB1, 0xEAE3},{0x7FB2, 0xBFAA},{0x7FB3, 0xF079},{0x7FB5, 0xF078},
- {0x7FB6, 0xC3BB},{0x7FB7, 0xF2BD},{0x7FB8, 0xC3BD},{0x7FB9, 0xC3BC},{0x7FBA, 0xF4B0},{0x7FBB, 0xF5EE},{0x7FBC, 0xC4F3},{0x7FBD, 0xA6D0},
- {0x7FBE, 0xD050},{0x7FBF, 0xACFD},{0x7FC0, 0xD365},{0x7FC1, 0xAFCE},{0x7FC2, 0xD364},{0x7FC3, 0xD363},{0x7FC5, 0xAFCD},{0x7FC7, 0xD6FB},
- {0x7FC9, 0xD6FD},{0x7FCA, 0xD6F6},{0x7FCB, 0xD6F7},{0x7FCC, 0xB2DD},{0x7FCD, 0xD6F8},{0x7FCE, 0xB2DE},{0x7FCF, 0xD6FC},{0x7FD0, 0xD6F9},
- {0x7FD1, 0xD6FA},{0x7FD2, 0xB2DF},{0x7FD4, 0xB5BE},{0x7FD5, 0xB5BF},{0x7FD7, 0xDB44},{0x7FDB, 0xDF6F},{0x7FDC, 0xDF70},{0x7FDE, 0xE37E},
- {0x7FDF, 0xBB43},{0x7FE0, 0xBB41},{0x7FE1, 0xBB42},{0x7FE2, 0xE37B},{0x7FE3, 0xE37C},{0x7FE5, 0xE37D},{0x7FE6, 0xE6F9},{0x7FE8, 0xE6FA},
- {0x7FE9, 0xBDA1},{0x7FEA, 0xE6F7},{0x7FEB, 0xE6F6},{0x7FEC, 0xE6F8},{0x7FED, 0xE6F5},{0x7FEE, 0xBFAD},{0x7FEF, 0xEAE4},{0x7FF0, 0xBFAB},
- {0x7FF1, 0xBFAC},{0x7FF2, 0xEDE6},{0x7FF3, 0xC16B},{0x7FF4, 0xEDE5},{0x7FF5, 0xEFA8},{0x7FF7, 0xF07A},{0x7FF8, 0xF07B},{0x7FF9, 0xC2BC},
- {0x7FFB, 0xC2BD},{0x7FFC, 0xC16C},{0x7FFD, 0xF2BE},{0x7FFE, 0xF2BF},{0x7FFF, 0xF4B1},{0x8000, 0xC4A3},{0x8001, 0xA6D1},{0x8003, 0xA6D2},
- {0x8004, 0xACFE},{0x8005, 0xAACC},{0x8006, 0xAFCF},{0x8007, 0xD051},{0x800B, 0xB5C0},{0x800C, 0xA6D3},{0x800D, 0xAD41},{0x800E, 0xD052},
- {0x800F, 0xD053},{0x8010, 0xAD40},{0x8011, 0xAD42},{0x8012, 0xA6D4},{0x8014, 0xD054},{0x8015, 0xAFD1},{0x8016, 0xD366},{0x8017, 0xAFD3},
- {0x8018, 0xAFD0},{0x8019, 0xAFD2},{0x801B, 0xD741},{0x801C, 0xB2E0},{0x801E, 0xD740},{0x801F, 0xD6FE},{0x8021, 0xDF71},{0x8024, 0xE3A1},
- {0x8026, 0xBDA2},{0x8028, 0xBFAE},{0x8029, 0xEAE6},{0x802A, 0xEAE5},{0x802C, 0xEDE7},{0x8030, 0xF5EF},{0x8033, 0xA6D5},{0x8034, 0xCB73},
- {0x8035, 0xCDAA},{0x8036, 0xAD43},{0x8037, 0xD055},{0x8039, 0xD368},{0x803D, 0xAFD4},{0x803E, 0xD367},{0x803F, 0xAFD5},{0x8043, 0xD743},
- {0x8046, 0xB2E2},{0x8047, 0xD742},{0x8048, 0xD744},{0x804A, 0xB2E1},{0x804F, 0xDB46},{0x8050, 0xDB47},{0x8051, 0xDB45},{0x8052, 0xB5C1},
- {0x8056, 0xB874},{0x8058, 0xB875},{0x805A, 0xBB45},{0x805C, 0xE3A3},{0x805D, 0xE3A2},{0x805E, 0xBB44},{0x8064, 0xE6FB},{0x8067, 0xE6FC},
- {0x806C, 0xEAE7},{0x806F, 0xC170},{0x8070, 0xC16F},{0x8071, 0xC16D},{0x8072, 0xC16E},{0x8073, 0xC171},{0x8075, 0xF07C},{0x8076, 0xC2BF},
- {0x8077, 0xC2BE},{0x8078, 0xF2C0},{0x8079, 0xF4B2},{0x807D, 0xC5A5},{0x807E, 0xC5A4},{0x807F, 0xA6D6},{0x8082, 0xD1FB},{0x8084, 0xB877},
- {0x8085, 0xB5C2},{0x8086, 0xB876},{0x8087, 0xBB46},{0x8089, 0xA6D7},{0x808A, 0xC9A9},{0x808B, 0xA6D8},{0x808C, 0xA6D9},{0x808F, 0xCDAB},
- {0x8090, 0xCB76},{0x8092, 0xCB77},{0x8093, 0xA877},{0x8095, 0xCB74},{0x8096, 0xA876},{0x8098, 0xA879},{0x8099, 0xCB75},{0x809A, 0xA87B},
- {0x809B, 0xA87A},{0x809C, 0xCB78},{0x809D, 0xA878},{0x80A1, 0xAAD1},{0x80A2, 0xAACF},{0x80A3, 0xCDAD},{0x80A5, 0xAACE},{0x80A9, 0xAAD3},
- {0x80AA, 0xAAD5},{0x80AB, 0xAAD2},{0x80AD, 0xCDB0},{0x80AE, 0xCDAC},{0x80AF, 0xAAD6},{0x80B1, 0xAAD0},{0x80B2, 0xA87C},{0x80B4, 0xAAD4},
- {0x80B5, 0xCDAF},{0x80B8, 0xCDAE},{0x80BA, 0xAACD},{0x80C2, 0xD05B},{0x80C3, 0xAD47},{0x80C4, 0xAD48},{0x80C5, 0xD05D},{0x80C7, 0xD057},
- {0x80C8, 0xD05A},{0x80C9, 0xD063},{0x80CA, 0xD061},{0x80CC, 0xAD49},{0x80CD, 0xD067},{0x80CE, 0xAD4C},{0x80CF, 0xD064},{0x80D0, 0xD05C},
- {0x80D1, 0xD059},{0x80D4, 0xDB49},{0x80D5, 0xD062},{0x80D6, 0xAD44},{0x80D7, 0xD065},{0x80D8, 0xD056},{0x80D9, 0xD05F},{0x80DA, 0xAD46},
- {0x80DB, 0xAD4B},{0x80DC, 0xD060},{0x80DD, 0xAD4F},{0x80DE, 0xAD4D},{0x80E0, 0xD058},{0x80E1, 0xAD4A},{0x80E3, 0xD05E},{0x80E4, 0xAD4E},
- {0x80E5, 0xAD45},{0x80E6, 0xD066},{0x80ED, 0xAFDA},{0x80EF, 0xAFE3},{0x80F0, 0xAFD8},{0x80F1, 0xAFD6},{0x80F2, 0xD36A},{0x80F3, 0xAFDE},
- {0x80F4, 0xAFDB},{0x80F5, 0xD36C},{0x80F8, 0xAFDD},{0x80F9, 0xD36B},{0x80FA, 0xD369},{0x80FB, 0xD36E},{0x80FC, 0xAFE2},{0x80FD, 0xAFE0},
- {0x80FE, 0xDB48},{0x8100, 0xD36F},{0x8101, 0xD36D},{0x8102, 0xAFD7},{0x8105, 0xAFD9},{0x8106, 0xAFDC},{0x8108, 0xAFDF},{0x810A, 0xAFE1},
- {0x8115, 0xD74E},{0x8116, 0xB2E4},{0x8118, 0xD745},{0x8119, 0xD747},{0x811B, 0xD748},{0x811D, 0xD750},{0x811E, 0xD74C},{0x811F, 0xD74A},
- {0x8121, 0xD74D},{0x8122, 0xD751},{0x8123, 0xB2E5},{0x8124, 0xB2E9},{0x8125, 0xD746},{0x8127, 0xD74F},{0x8129, 0xB2E7},{0x812B, 0xB2E6},
- {0x812C, 0xD74B},{0x812D, 0xD749},{0x812F, 0xB2E3},{0x8130, 0xB2E8},{0x8139, 0xB5C8},{0x813A, 0xDB51},{0x813D, 0xDB4F},{0x813E, 0xB5CA},
- {0x8143, 0xDB4A},{0x8144, 0xDFA1},{0x8146, 0xB5C9},{0x8147, 0xDB4E},{0x814A, 0xDB4B},{0x814B, 0xB5C5},{0x814C, 0xB5CB},{0x814D, 0xDB50},
- {0x814E, 0xB5C7},{0x814F, 0xDB4D},{0x8150, 0xBB47},{0x8151, 0xB5C6},{0x8152, 0xDB4C},{0x8153, 0xB5CC},{0x8154, 0xB5C4},{0x8155, 0xB5C3},
- {0x815B, 0xDF77},{0x815C, 0xDF75},{0x815E, 0xDF7B},{0x8160, 0xDF73},{0x8161, 0xDFA2},{0x8162, 0xDF78},{0x8164, 0xDF72},{0x8165, 0xB87B},
- {0x8166, 0xB8A3},{0x8167, 0xDF7D},{0x8169, 0xDF76},{0x816B, 0xB87E},{0x816E, 0xB87C},{0x816F, 0xDF7E},{0x8170, 0xB879},{0x8171, 0xB878},
- {0x8172, 0xDF79},{0x8173, 0xB87D},{0x8174, 0xB5CD},{0x8176, 0xDF7C},{0x8177, 0xDF74},{0x8178, 0xB87A},{0x8179, 0xB8A1},{0x817A, 0xB8A2},
- {0x817F, 0xBB4C},{0x8180, 0xBB48},{0x8182, 0xBB4D},{0x8183, 0xE3A6},{0x8186, 0xE3A5},{0x8187, 0xE3A7},{0x8188, 0xBB4A},{0x8189, 0xE3A4},
- {0x818A, 0xBB4B},{0x818B, 0xE3AA},{0x818C, 0xE3A9},{0x818D, 0xE3A8},{0x818F, 0xBB49},{0x8195, 0xE741},{0x8197, 0xE744},{0x8198, 0xBDA8},
- {0x8199, 0xE743},{0x819A, 0xBDA7},{0x819B, 0xBDA3},{0x819C, 0xBDA4},{0x819D, 0xBDA5},{0x819E, 0xE740},{0x819F, 0xE6FE},{0x81A0, 0xBDA6},
- {0x81A2, 0xE742},{0x81A3, 0xE6FD},{0x81A6, 0xEAE9},{0x81A7, 0xEAF3},{0x81A8, 0xBFB1},{0x81A9, 0xBFB0},{0x81AB, 0xEAED},{0x81AC, 0xEAEF},
- {0x81AE, 0xEAEA},{0x81B0, 0xEAEE},{0x81B1, 0xEAE8},{0x81B2, 0xEAF1},{0x81B3, 0xBFAF},{0x81B4, 0xEAF0},{0x81B5, 0xEAEC},{0x81B7, 0xEAF2},
- {0x81B9, 0xEAEB},{0x81BA, 0xC174},{0x81BB, 0xEDE8},{0x81BC, 0xEDEE},{0x81BD, 0xC178},{0x81BE, 0xC17A},{0x81BF, 0xC177},{0x81C0, 0xC176},
- {0x81C2, 0xC175},{0x81C3, 0xC173},{0x81C4, 0xEDE9},{0x81C5, 0xEDEC},{0x81C6, 0xC172},{0x81C7, 0xEDED},{0x81C9, 0xC179},{0x81CA, 0xEDEB},
- {0x81CC, 0xEDEA},{0x81CD, 0xC2C0},{0x81CF, 0xC2C1},{0x81D0, 0xF0A1},{0x81D1, 0xF07D},{0x81D2, 0xF07E},{0x81D5, 0xF2C2},{0x81D7, 0xF2C1},
- {0x81D8, 0xC3BE},{0x81D9, 0xF4B4},{0x81DA, 0xC4A4},{0x81DB, 0xF4B3},{0x81DD, 0xF5F0},{0x81DE, 0xF745},{0x81DF, 0xC5A6},{0x81E0, 0xF943},
- {0x81E1, 0xF944},{0x81E2, 0xC5D8},{0x81E3, 0xA6DA},{0x81E5, 0xAAD7},{0x81E6, 0xDB52},{0x81E7, 0xBB4E},{0x81E8, 0xC17B},{0x81E9, 0xEDEF},
- {0x81EA, 0xA6DB},{0x81EC, 0xAFE5},{0x81ED, 0xAFE4},{0x81EE, 0xDB53},{0x81F2, 0xEAF4},{0x81F3, 0xA6DC},{0x81F4, 0xAD50},{0x81F7, 0xDB54},
- {0x81F8, 0xDB55},{0x81F9, 0xDB56},{0x81FA, 0xBB4F},{0x81FB, 0xBFB2},{0x81FC, 0xA6DD},{0x81FE, 0xAAD8},{0x81FF, 0xD068},{0x8200, 0xAFE6},
- {0x8201, 0xD370},{0x8202, 0xB2EA},{0x8204, 0xDB57},{0x8205, 0xB8A4},{0x8207, 0xBB50},{0x8208, 0xBFB3},{0x8209, 0xC17C},{0x820A, 0xC2C2},
- {0x820B, 0xF4B5},{0x820C, 0xA6DE},{0x820D, 0xAAD9},{0x8210, 0xAFE7},{0x8211, 0xD752},{0x8212, 0xB5CE},{0x8214, 0xBB51},{0x8215, 0xE3AB},
- {0x8216, 0xE745},{0x821B, 0xA6DF},{0x821C, 0xB5CF},{0x821D, 0xDFA3},{0x821E, 0xBB52},{0x821F, 0xA6E0},{0x8220, 0xCDB1},{0x8221, 0xD069},
- {0x8222, 0xAD51},{0x8225, 0xD372},{0x8228, 0xAFEA},{0x822A, 0xAFE8},{0x822B, 0xAFE9},{0x822C, 0xAFEB},{0x822F, 0xD371},{0x8232, 0xD757},
- {0x8233, 0xD754},{0x8234, 0xD756},{0x8235, 0xB2EB},{0x8236, 0xB2ED},{0x8237, 0xB2EC},{0x8238, 0xD753},{0x8239, 0xB2EE},{0x823A, 0xD755},
- {0x823C, 0xDB58},{0x823D, 0xDB59},{0x823F, 0xDB5A},{0x8240, 0xDFA6},{0x8242, 0xDFA7},{0x8244, 0xDFA5},{0x8245, 0xDFA8},{0x8247, 0xB8A5},
- {0x8249, 0xDFA4},{0x824B, 0xBB53},{0x824E, 0xE74A},{0x824F, 0xE746},{0x8250, 0xE749},{0x8251, 0xE74B},{0x8252, 0xE748},{0x8253, 0xE747},
- {0x8255, 0xEAF5},{0x8256, 0xEAF6},{0x8257, 0xEAF7},{0x8258, 0xBFB4},{0x8259, 0xBFB5},{0x825A, 0xEDF1},{0x825B, 0xEDF0},{0x825C, 0xEDF2},
- {0x825E, 0xF0A3},{0x825F, 0xF0A2},{0x8261, 0xF2C4},{0x8263, 0xF2C5},{0x8264, 0xF2C3},{0x8266, 0xC4A5},{0x8268, 0xF4B6},{0x8269, 0xF4B7},
- {0x826B, 0xF746},{0x826C, 0xF7EF},{0x826D, 0xF8BB},{0x826E, 0xA6E1},{0x826F, 0xA87D},{0x8271, 0xC17D},{0x8272, 0xA6E2},{0x8274, 0xD758},
- {0x8275, 0xDB5B},{0x8277, 0xC641},{0x8278, 0xCA4A},{0x827C, 0xCA4B},{0x827D, 0xCA4D},{0x827E, 0xA6E3},{0x827F, 0xCA4E},{0x8280, 0xCA4C},
- {0x8283, 0xCBA2},{0x8284, 0xCBA3},{0x8285, 0xCB7B},{0x828A, 0xCBA1},{0x828B, 0xA8A1},{0x828D, 0xA8A2},{0x828E, 0xCB7C},{0x828F, 0xCB7A},
- {0x8290, 0xCB79},{0x8291, 0xCB7D},{0x8292, 0xA87E},{0x8293, 0xCB7E},{0x8294, 0xD06A},{0x8298, 0xCDB6},{0x8299, 0xAADC},{0x829A, 0xCDB5},
- {0x829B, 0xCDB7},{0x829D, 0xAADB},{0x829E, 0xCDBC},{0x829F, 0xAADF},{0x82A0, 0xCDB2},{0x82A1, 0xCDC0},{0x82A2, 0xCDC6},{0x82A3, 0xAAE6},
- {0x82A4, 0xCDC3},{0x82A5, 0xAAE3},{0x82A7, 0xCDB9},{0x82A8, 0xCDBF},{0x82A9, 0xCDC1},{0x82AB, 0xCDB4},{0x82AC, 0xAAE2},{0x82AD, 0xAADD},
- {0x82AE, 0xCDBA},{0x82AF, 0xAAE4},{0x82B0, 0xAAE7},{0x82B1, 0xAAE1},{0x82B3, 0xAADA},{0x82B4, 0xCDBE},{0x82B5, 0xCDB8},{0x82B6, 0xCDC5},
- {0x82B7, 0xAAE9},{0x82B8, 0xAAE5},{0x82B9, 0xAAE0},{0x82BA, 0xCDBD},{0x82BB, 0xAFEC},{0x82BC, 0xCDBB},{0x82BD, 0xAADE},{0x82BE, 0xAAE8},
- {0x82C0, 0xCDB3},{0x82C2, 0xCDC2},{0x82C3, 0xCDC4},{0x82D1, 0xAD62},{0x82D2, 0xAD5C},{0x82D3, 0xAD64},{0x82D4, 0xAD61},{0x82D5, 0xD071},
- {0x82D6, 0xD074},{0x82D7, 0xAD5D},{0x82D9, 0xD06B},{0x82DB, 0xAD56},{0x82DC, 0xAD60},{0x82DE, 0xAD63},{0x82DF, 0xAD65},{0x82E0, 0xD0A2},
- {0x82E1, 0xD077},{0x82E3, 0xAD55},{0x82E4, 0xD0A1},{0x82E5, 0xAD59},{0x82E6, 0xAD57},{0x82E7, 0xAD52},{0x82E8, 0xD06F},{0x82EA, 0xD07E},
- {0x82EB, 0xD073},{0x82EC, 0xD076},{0x82ED, 0xD0A5},{0x82EF, 0xAD66},{0x82F0, 0xD07D},{0x82F1, 0xAD5E},{0x82F2, 0xD078},{0x82F3, 0xD0A4},
- {0x82F4, 0xD075},{0x82F5, 0xD079},{0x82F6, 0xD07C},{0x82F9, 0xD06D},{0x82FA, 0xD0A3},{0x82FB, 0xD07B},{0x82FE, 0xD06C},{0x8300, 0xD070},
- {0x8301, 0xAD5F},{0x8302, 0xAD5A},{0x8303, 0xAD53},{0x8304, 0xAD58},{0x8305, 0xAD54},{0x8306, 0xAD67},{0x8307, 0xD06E},{0x8308, 0xD3A5},
- {0x8309, 0xAD5B},{0x830C, 0xD07A},{0x830D, 0xCE41},{0x8316, 0xD3A8},{0x8317, 0xAFFA},{0x8319, 0xD376},{0x831B, 0xD3A3},{0x831C, 0xD37D},
- {0x831E, 0xD3B2},{0x8320, 0xD3AA},{0x8322, 0xD37E},{0x8324, 0xD3A9},{0x8325, 0xD378},{0x8326, 0xD37C},{0x8327, 0xD3B5},{0x8328, 0xAFFD},
- {0x8329, 0xD3AD},{0x832A, 0xD3A4},{0x832B, 0xAFED},{0x832C, 0xD3B3},{0x832D, 0xD374},{0x832F, 0xD3AC},{0x8331, 0xAFFC},{0x8332, 0xAFF7},
- {0x8333, 0xD373},{0x8334, 0xAFF5},{0x8335, 0xAFF4},{0x8336, 0xAFF9},{0x8337, 0xD3AB},{0x8338, 0xAFF1},{0x8339, 0xAFF8},{0x833A, 0xD072},
- {0x833B, 0xDB5C},{0x833C, 0xD3A6},{0x833F, 0xD37A},{0x8340, 0xAFFB},{0x8341, 0xD37B},{0x8342, 0xD3A1},{0x8343, 0xAFFE},{0x8344, 0xD375},
- {0x8345, 0xD3AF},{0x8347, 0xD3AE},{0x8348, 0xD3B6},{0x8349, 0xAFF3},{0x834A, 0xAFF0},{0x834B, 0xD3B4},{0x834C, 0xD3B0},{0x834D, 0xD3A7},
- {0x834E, 0xD3A2},{0x834F, 0xAFF6},{0x8350, 0xAFF2},{0x8351, 0xD377},{0x8352, 0xAFEE},{0x8353, 0xD3B1},{0x8354, 0xAFEF},{0x8356, 0xD379},
- {0x8373, 0xD75E},{0x8374, 0xD760},{0x8375, 0xD765},{0x8376, 0xD779},{0x8377, 0xB2FC},{0x8378, 0xB2F2},{0x837A, 0xD75D},{0x837B, 0xB2FD},
- {0x837C, 0xB2FE},{0x837D, 0xD768},{0x837E, 0xD76F},{0x837F, 0xD775},{0x8381, 0xD762},{0x8383, 0xD769},{0x8386, 0xB340},{0x8387, 0xD777},
- {0x8388, 0xD772},{0x8389, 0xB2FA},{0x838A, 0xB2F8},{0x838B, 0xD76E},{0x838C, 0xD76A},{0x838D, 0xD75C},{0x838E, 0xB2EF},{0x838F, 0xD761},
- {0x8390, 0xD759},{0x8392, 0xB2F7},{0x8393, 0xB2F9},{0x8394, 0xD766},{0x8395, 0xD763},{0x8396, 0xB2F4},{0x8397, 0xD773},{0x8398, 0xB2F1},
- {0x8399, 0xD764},{0x839A, 0xD77A},{0x839B, 0xD76C},{0x839D, 0xD76B},{0x839E, 0xB2F0},{0x83A0, 0xB2FB},{0x83A2, 0xB2F3},{0x83A3, 0xD75A},
- {0x83A4, 0xD75F},{0x83A5, 0xD770},{0x83A6, 0xD776},{0x83A7, 0xB341},{0x83A8, 0xD75B},{0x83A9, 0xD767},{0x83AA, 0xD76D},{0x83AB, 0xB2F6},
- {0x83AE, 0xD778},{0x83AF, 0xD771},{0x83B0, 0xD774},{0x83BD, 0xB2F5},{0x83BF, 0xDB6C},{0x83C0, 0xDB60},{0x83C1, 0xB5D7},{0x83C2, 0xDB7D},
- {0x83C3, 0xDBA7},{0x83C4, 0xDBAA},{0x83C5, 0xB5D5},{0x83C6, 0xDB68},{0x83C7, 0xDBA3},{0x83C8, 0xDB69},{0x83C9, 0xDB77},{0x83CA, 0xB5E2},
- {0x83CB, 0xDB73},{0x83CC, 0xB5DF},{0x83CE, 0xDB74},{0x83CF, 0xDB5D},{0x83D1, 0xDBA4},{0x83D4, 0xB5E8},{0x83D5, 0xDBA1},{0x83D6, 0xDB75},
- {0x83D7, 0xDBAC},{0x83D8, 0xDB70},{0x83D9, 0xDFC8},{0x83DB, 0xDBAF},{0x83DC, 0xB5E6},{0x83DD, 0xDB6E},{0x83DE, 0xDB7A},{0x83DF, 0xB5E9},
- {0x83E0, 0xB5D4},{0x83E1, 0xDB72},{0x83E2, 0xDBAD},{0x83E3, 0xDB6B},{0x83E4, 0xDB64},{0x83E5, 0xDB6F},{0x83E7, 0xDB63},{0x83E8, 0xDB61},
- {0x83E9, 0xB5D0},{0x83EA, 0xDBA5},{0x83EB, 0xDB6A},{0x83EC, 0xDBA8},{0x83EE, 0xDBA9},{0x83EF, 0xB5D8},{0x83F0, 0xB5DD},{0x83F1, 0xB5D9},
- {0x83F2, 0xB5E1},{0x83F3, 0xDB7E},{0x83F4, 0xB5DA},{0x83F5, 0xDB76},{0x83F6, 0xDB66},{0x83F8, 0xB5D2},{0x83F9, 0xDB5E},{0x83FA, 0xDBA2},
- {0x83FB, 0xDBAB},{0x83FC, 0xDB65},{0x83FD, 0xB5E0},{0x83FE, 0xDBB0},{0x83FF, 0xDB71},{0x8401, 0xDB6D},{0x8403, 0xB5D1},{0x8404, 0xB5E5},
- {0x8406, 0xDB7C},{0x8407, 0xB5E7},{0x8409, 0xDB78},{0x840A, 0xB5DC},{0x840B, 0xB5D6},{0x840C, 0xB5DE},{0x840D, 0xB5D3},{0x840E, 0xB5E4},
- {0x840F, 0xDB79},{0x8410, 0xDB67},{0x8411, 0xDB7B},{0x8412, 0xDB62},{0x8413, 0xDBA6},{0x841B, 0xDBAE},{0x8423, 0xDB5F},{0x8429, 0xDFC7},
- {0x842B, 0xDFDD},{0x842C, 0xB855},{0x842D, 0xDFCC},{0x842F, 0xDFCA},{0x8430, 0xDFB5},{0x8431, 0xB8A9},{0x8432, 0xDFC5},{0x8433, 0xDFD9},
- {0x8434, 0xDFC1},{0x8435, 0xB8B1},{0x8436, 0xDFD8},{0x8437, 0xDFBF},{0x8438, 0xB5E3},{0x8439, 0xDFCF},{0x843A, 0xDFC0},{0x843B, 0xDFD6},
- {0x843C, 0xB8B0},{0x843D, 0xB8A8},{0x843F, 0xDFAA},{0x8440, 0xDFB2},{0x8442, 0xDFCB},{0x8443, 0xDFC3},{0x8444, 0xDFDC},{0x8445, 0xDFC6},
- {0x8446, 0xB8B6},{0x8447, 0xDFD7},{0x8449, 0xB8AD},{0x844B, 0xDFC9},{0x844C, 0xDFD1},{0x844D, 0xDFB6},{0x844E, 0xDFD0},{0x8450, 0xDFE1},
- {0x8451, 0xDFB1},{0x8452, 0xDFD2},{0x8454, 0xDFDF},{0x8456, 0xDFAB},{0x8457, 0xB5DB},{0x8459, 0xDFB9},{0x845A, 0xDFB8},{0x845B, 0xB8AF},
- {0x845D, 0xDFBC},{0x845E, 0xDFBE},{0x845F, 0xDFCD},{0x8460, 0xDFDE},{0x8461, 0xB8B2},{0x8463, 0xB8B3},{0x8465, 0xDFB0},{0x8466, 0xB8AB},
- {0x8467, 0xDFB4},{0x8468, 0xDFDA},{0x8469, 0xB8B4},{0x846B, 0xB8AC},{0x846C, 0xB8AE},{0x846D, 0xB8B5},{0x846E, 0xDFE0},{0x846F, 0xDFD3},
- {0x8470, 0xDFCE},{0x8473, 0xDFBB},{0x8474, 0xDFBA},{0x8475, 0xB8AA},{0x8476, 0xDFAC},{0x8477, 0xB8A7},{0x8478, 0xDFC4},{0x8479, 0xDFAD},
- {0x847A, 0xDFC2},{0x847D, 0xDFB7},{0x847E, 0xDFDB},{0x8482, 0xB8A6},{0x8486, 0xDFB3},{0x848D, 0xDFAF},{0x848E, 0xDFD5},{0x848F, 0xDFAE},
- {0x8490, 0xBB60},{0x8491, 0xE3D3},{0x8494, 0xE3C2},{0x8497, 0xE3AC},{0x8498, 0xE3CA},{0x8499, 0xBB58},{0x849A, 0xE3BB},{0x849B, 0xE3C5},
- {0x849C, 0xBB5B},{0x849D, 0xE3BE},{0x849E, 0xBB59},{0x849F, 0xE3AF},{0x84A0, 0xE3CD},{0x84A1, 0xE3AE},{0x84A2, 0xE3C1},{0x84A4, 0xE3AD},
- {0x84A7, 0xE3BF},{0x84A8, 0xE3C8},{0x84A9, 0xE3C6},{0x84AA, 0xE3BA},{0x84AB, 0xE3B5},{0x84AC, 0xE3B3},{0x84AE, 0xE3B4},{0x84AF, 0xE3C7},
- {0x84B0, 0xE3D2},{0x84B1, 0xE3BC},{0x84B2, 0xBB5A},{0x84B4, 0xE3B7},{0x84B6, 0xE3CB},{0x84B8, 0xBB5D},{0x84B9, 0xE3B6},{0x84BA, 0xE3B0},
- {0x84BB, 0xE3C0},{0x84BC, 0xBB61},{0x84BF, 0xBB55},{0x84C0, 0xBB5E},{0x84C1, 0xE3B8},{0x84C2, 0xE3B2},{0x84C4, 0xBB57},{0x84C5, 0xDFD4},
- {0x84C6, 0xBB56},{0x84C7, 0xE3C3},{0x84C9, 0xBB54},{0x84CA, 0xBB63},{0x84CB, 0xBB5C},{0x84CC, 0xE3C4},{0x84CD, 0xE3B9},{0x84CE, 0xE3B1},
- {0x84CF, 0xE3CC},{0x84D0, 0xE3BD},{0x84D1, 0xBB62},{0x84D2, 0xE3D0},{0x84D3, 0xBB5F},{0x84D4, 0xE3CF},{0x84D6, 0xE3C9},{0x84D7, 0xE3CE},
- {0x84DB, 0xE3D1},{0x84E7, 0xE773},{0x84E8, 0xE774},{0x84E9, 0xE767},{0x84EA, 0xE766},{0x84EB, 0xE762},{0x84EC, 0xBDB4},{0x84EE, 0xBDAC},
- {0x84EF, 0xE776},{0x84F0, 0xE775},{0x84F1, 0xDFA9},{0x84F2, 0xE75F},{0x84F3, 0xE763},{0x84F4, 0xE75D},{0x84F6, 0xE770},{0x84F7, 0xE761},
- {0x84F9, 0xE777},{0x84FA, 0xE75A},{0x84FB, 0xE758},{0x84FC, 0xE764},{0x84FD, 0xE76E},{0x84FE, 0xE769},{0x84FF, 0xBDB6},{0x8500, 0xE74F},
- {0x8502, 0xE76D},{0x8506, 0xBDB7},{0x8507, 0xDFBD},{0x8508, 0xE75B},{0x8509, 0xE752},{0x850A, 0xE755},{0x850B, 0xE77B},{0x850C, 0xE75C},
- {0x850D, 0xE753},{0x850E, 0xE751},{0x850F, 0xE74E},{0x8511, 0xBDB0},{0x8512, 0xE765},{0x8513, 0xBDAF},{0x8514, 0xBDB3},{0x8515, 0xE760},
- {0x8516, 0xE768},{0x8517, 0xBDA9},{0x8518, 0xE778},{0x8519, 0xE77C},{0x851A, 0xBDAB},{0x851C, 0xE757},{0x851D, 0xE76B},{0x851E, 0xE76F},
- {0x851F, 0xE754},{0x8520, 0xE779},{0x8521, 0xBDB2},{0x8523, 0xBDB1},{0x8524, 0xE74C},{0x8525, 0xBDB5},{0x8526, 0xE772},{0x8527, 0xE756},
- {0x8528, 0xE76A},{0x8529, 0xE750},{0x852A, 0xE75E},{0x852B, 0xE759},{0x852C, 0xBDAD},{0x852D, 0xBDAE},{0x852E, 0xE76C},{0x852F, 0xE77D},
- {0x8530, 0xE77A},{0x8531, 0xE771},{0x853B, 0xE74D},{0x853D, 0xBDAA},{0x853E, 0xEB49},{0x8540, 0xEB40},{0x8541, 0xEB43},{0x8543, 0xBFBB},
- {0x8544, 0xEB45},{0x8545, 0xEAF9},{0x8546, 0xEB41},{0x8547, 0xEB47},{0x8548, 0xBFB8},{0x8549, 0xBFBC},{0x854A, 0xBFB6},{0x854D, 0xEAFB},
- {0x854E, 0xEB4C},{0x8551, 0xEB46},{0x8553, 0xEAFC},{0x8554, 0xEB55},{0x8555, 0xEB4F},{0x8556, 0xEAF8},{0x8557, 0xEE46},{0x8558, 0xEAFE},
- {0x8559, 0xBFB7},{0x855B, 0xEB4A},{0x855D, 0xEB54},{0x855E, 0xBFBF},{0x8560, 0xEB51},{0x8561, 0xEAFD},{0x8562, 0xEB44},{0x8563, 0xEB48},
- {0x8564, 0xEB42},{0x8565, 0xEB56},{0x8566, 0xEB53},{0x8567, 0xEB50},{0x8568, 0xBFB9},{0x8569, 0xBFBA},{0x856A, 0xBFBE},{0x856B, 0xEAFA},
- {0x856C, 0xEB57},{0x856D, 0xBFBD},{0x856E, 0xEB4D},{0x8571, 0xEB4B},{0x8575, 0xEB4E},{0x8576, 0xEE53},{0x8577, 0xEE40},{0x8578, 0xEE45},
- {0x8579, 0xEE52},{0x857A, 0xEE44},{0x857B, 0xEDFB},{0x857C, 0xEE41},{0x857E, 0xC1A2},{0x8580, 0xEDF4},{0x8581, 0xEE4D},{0x8582, 0xEE4F},
- {0x8583, 0xEDF3},{0x8584, 0xC1A1},{0x8585, 0xEE51},{0x8586, 0xEE49},{0x8587, 0xC1A8},{0x8588, 0xEE50},{0x8589, 0xEE42},{0x858A, 0xC1AA},
- {0x858B, 0xEDF9},{0x858C, 0xEB52},{0x858D, 0xEE4A},{0x858E, 0xEE47},{0x858F, 0xEDF5},{0x8590, 0xEE55},{0x8591, 0xC1A4},{0x8594, 0xC1A5},
- {0x8595, 0xEDF7},{0x8596, 0xEE48},{0x8598, 0xEE54},{0x8599, 0xEE4B},{0x859A, 0xEDFD},{0x859B, 0xC1A7},{0x859C, 0xC1A3},{0x859D, 0xEE4C},
- {0x859E, 0xEDFE},{0x859F, 0xEE56},{0x85A0, 0xEDF8},{0x85A1, 0xEE43},{0x85A2, 0xEE4E},{0x85A3, 0xEDFA},{0x85A4, 0xEDFC},{0x85A6, 0xC2CB},
- {0x85A7, 0xEDF6},{0x85A8, 0xC1A9},{0x85A9, 0xC2C4},{0x85AA, 0xC17E},{0x85AF, 0xC1A6},{0x85B0, 0xC2C8},{0x85B1, 0xF0B3},{0x85B3, 0xF0A9},
- {0x85B4, 0xF0A4},{0x85B5, 0xF0AA},{0x85B6, 0xF0B4},{0x85B7, 0xF0B8},{0x85B8, 0xF0B7},{0x85B9, 0xC2CA},{0x85BA, 0xC2C9},{0x85BD, 0xF0AB},
- {0x85BE, 0xF0B9},{0x85BF, 0xF0AE},{0x85C0, 0xF0A6},{0x85C2, 0xF0A8},{0x85C3, 0xF0A7},{0x85C4, 0xF0AD},{0x85C5, 0xF0B2},{0x85C6, 0xF0A5},
- {0x85C7, 0xF0AC},{0x85C8, 0xF0B1},{0x85C9, 0xC2C7},{0x85CB, 0xF0AF},{0x85CD, 0xC2C5},{0x85CE, 0xF0B0},{0x85CF, 0xC2C3},{0x85D0, 0xC2C6},
- {0x85D1, 0xF2D5},{0x85D2, 0xF0B5},{0x85D5, 0xC3C2},{0x85D7, 0xF2CD},{0x85D8, 0xF2D1},{0x85D9, 0xF2C9},{0x85DA, 0xF2CC},{0x85DC, 0xF2D4},
- {0x85DD, 0xC3C0},{0x85DE, 0xF2D9},{0x85DF, 0xF2D2},{0x85E1, 0xF2CA},{0x85E2, 0xF2DA},{0x85E3, 0xF2D3},{0x85E4, 0xC3C3},{0x85E5, 0xC3C4},
- {0x85E6, 0xF2D7},{0x85E8, 0xF2CB},{0x85E9, 0xC3BF},{0x85EA, 0xC3C1},{0x85EB, 0xF2C6},{0x85EC, 0xF2CE},{0x85ED, 0xF2C8},{0x85EF, 0xF2D8},
- {0x85F0, 0xF2D6},{0x85F1, 0xF2C7},{0x85F2, 0xF2CF},{0x85F6, 0xF4BE},{0x85F7, 0xC3C5},{0x85F8, 0xF2D0},{0x85F9, 0xC4A7},{0x85FA, 0xC4A9},
- {0x85FB, 0xC4A6},{0x85FD, 0xF4C3},{0x85FE, 0xF4BB},{0x85FF, 0xF4B9},{0x8600, 0xF4BD},{0x8601, 0xF4BA},{0x8604, 0xF4BF},{0x8605, 0xF4C1},
- {0x8606, 0xC4AA},{0x8607, 0xC4AC},{0x8609, 0xF4C0},{0x860A, 0xC4AD},{0x860B, 0xC4AB},{0x860C, 0xF4C2},{0x8611, 0xC4A8},{0x8617, 0xC4F4},
- {0x8618, 0xF5F1},{0x8619, 0xF5F7},{0x861A, 0xC4F6},{0x861B, 0xF4BC},{0x861C, 0xF5F6},{0x861E, 0xF5FD},{0x861F, 0xF5F4},{0x8620, 0xF5FB},
- {0x8621, 0xF5FA},{0x8622, 0xF4B8},{0x8623, 0xF5F5},{0x8624, 0xF0B6},{0x8625, 0xF5FE},{0x8626, 0xF5F3},{0x8627, 0xF5F8},{0x8629, 0xF5FC},
- {0x862A, 0xF5F2},{0x862C, 0xF74A},{0x862D, 0xC4F5},{0x862E, 0xF5F9},{0x8631, 0xF7F4},{0x8632, 0xF74B},{0x8633, 0xF749},{0x8634, 0xF747},
- {0x8635, 0xF748},{0x8636, 0xF74C},{0x8638, 0xC5D9},{0x8639, 0xF7F2},{0x863A, 0xF7F0},{0x863B, 0xF7F5},{0x863C, 0xF7F3},{0x863E, 0xF7F6},
- {0x863F, 0xC5DA},{0x8640, 0xF7F1},{0x8643, 0xF8BC},{0x8646, 0xF945},{0x8647, 0xF946},{0x8648, 0xF947},{0x864B, 0xF9C7},{0x864C, 0xF9BD},
- {0x864D, 0xCA4F},{0x864E, 0xAAEA},{0x8650, 0xAD68},{0x8652, 0xD3B8},{0x8653, 0xD3B7},{0x8654, 0xB040},{0x8655, 0xB342},{0x8656, 0xD77C},
- {0x8659, 0xD77B},{0x865B, 0xB5EA},{0x865C, 0xB8B8},{0x865E, 0xB8B7},{0x865F, 0xB8B9},{0x8661, 0xE3D4},{0x8662, 0xE77E},{0x8663, 0xEB58},
- {0x8664, 0xEB5A},{0x8665, 0xEB59},{0x8667, 0xC1AB},{0x8668, 0xEE57},{0x8669, 0xF0BA},{0x866A, 0xF9A5},{0x866B, 0xA6E4},{0x866D, 0xCDC9},
- {0x866E, 0xCDCA},{0x866F, 0xCDC8},{0x8670, 0xCDC7},{0x8671, 0xAAEB},{0x8673, 0xD0A9},{0x8674, 0xD0A7},{0x8677, 0xD0A6},{0x8679, 0xAD69},
- {0x867A, 0xAD6B},{0x867B, 0xAD6A},{0x867C, 0xD0A8},{0x8685, 0xD3C4},{0x8686, 0xD3C1},{0x8687, 0xD3BF},{0x868A, 0xB041},{0x868B, 0xD3C2},
- {0x868C, 0xB046},{0x868D, 0xD3BC},{0x868E, 0xD3CB},{0x8690, 0xD3CD},{0x8691, 0xD3BD},{0x8693, 0xB043},{0x8694, 0xD3CE},{0x8695, 0xD3C9},
- {0x8696, 0xD3BB},{0x8697, 0xD3C0},{0x8698, 0xD3CA},{0x8699, 0xD3C6},{0x869A, 0xD3C3},{0x869C, 0xB048},{0x869D, 0xD3CC},{0x869E, 0xD3BE},
- {0x86A1, 0xD3C7},{0x86A2, 0xD3B9},{0x86A3, 0xB047},{0x86A4, 0xB044},{0x86A5, 0xD3C5},{0x86A7, 0xD3C8},{0x86A8, 0xD3BA},{0x86A9, 0xB045},
- {0x86AA, 0xB042},{0x86AF, 0xB34C},{0x86B0, 0xD7A5},{0x86B1, 0xB34B},{0x86B3, 0xD7A8},{0x86B4, 0xD7AB},{0x86B5, 0xB348},{0x86B6, 0xB346},
- {0x86B7, 0xD77E},{0x86B8, 0xD7A9},{0x86B9, 0xD7A7},{0x86BA, 0xD7A4},{0x86BB, 0xD7AC},{0x86BC, 0xD7AD},{0x86BD, 0xD7AF},{0x86BE, 0xD7B0},
- {0x86BF, 0xD77D},{0x86C0, 0xB345},{0x86C1, 0xD7A2},{0x86C2, 0xD7A1},{0x86C3, 0xD7AE},{0x86C4, 0xB347},{0x86C5, 0xD7A3},{0x86C6, 0xB349},
- {0x86C7, 0xB344},{0x86C8, 0xD7A6},{0x86C9, 0xB34D},{0x86CB, 0xB34A},{0x86CC, 0xD7AA},{0x86D0, 0xB5F1},{0x86D1, 0xDBBF},{0x86D3, 0xDBB4},
- {0x86D4, 0xB5EE},{0x86D6, 0xDFE7},{0x86D7, 0xDBBD},{0x86D8, 0xDBB1},{0x86D9, 0xB5EC},{0x86DA, 0xDBB6},{0x86DB, 0xB5EF},{0x86DC, 0xDBBA},
- {0x86DD, 0xDBB8},{0x86DE, 0xB5F2},{0x86DF, 0xB5EB},{0x86E2, 0xDBB2},{0x86E3, 0xDBB5},{0x86E4, 0xB5F0},{0x86E6, 0xDBB3},{0x86E8, 0xDBBE},
- {0x86E9, 0xDBBC},{0x86EA, 0xDBB7},{0x86EB, 0xDBB9},{0x86EC, 0xDBBB},{0x86ED, 0xB5ED},{0x86F5, 0xDFE8},{0x86F6, 0xDFEE},{0x86F7, 0xDFE4},
- {0x86F8, 0xDFEA},{0x86F9, 0xB8BA},{0x86FA, 0xDFE6},{0x86FB, 0xB8C0},{0x86FE, 0xB8BF},{0x8700, 0xB8BE},{0x8701, 0xDFED},{0x8702, 0xB8C1},
- {0x8703, 0xB8C2},{0x8704, 0xDFE3},{0x8705, 0xDFF0},{0x8706, 0xB8C3},{0x8707, 0xB8BD},{0x8708, 0xB8BC},{0x8709, 0xDFEC},{0x870A, 0xB8C4},
- {0x870B, 0xDFE2},{0x870C, 0xDFE5},{0x870D, 0xDFEF},{0x870E, 0xDFEB},{0x8711, 0xE3F4},{0x8712, 0xE3E9},{0x8713, 0xB8BB},{0x8718, 0xBB6A},
- {0x8719, 0xE3DD},{0x871A, 0xE3F2},{0x871B, 0xE3DE},{0x871C, 0xBB65},{0x871E, 0xE3DB},{0x8720, 0xE3E4},{0x8721, 0xE3DC},{0x8722, 0xBB67},
- {0x8723, 0xE3D6},{0x8724, 0xE3F1},{0x8725, 0xBB68},{0x8726, 0xE3EE},{0x8727, 0xE3EF},{0x8728, 0xE3D7},{0x8729, 0xBB6D},{0x872A, 0xE3E6},
- {0x872C, 0xE3E0},{0x872D, 0xE3E7},{0x872E, 0xE3DA},{0x8730, 0xE3F3},{0x8731, 0xE3EB},{0x8732, 0xE3E5},{0x8733, 0xE3D5},{0x8734, 0xBB69},
- {0x8735, 0xE3EC},{0x8737, 0xBB6C},{0x8738, 0xE3F0},{0x873A, 0xE3EA},{0x873B, 0xBB66},{0x873C, 0xE3E8},{0x873E, 0xE3E2},{0x873F, 0xBB64},
- {0x8740, 0xE3D9},{0x8741, 0xE3E1},{0x8742, 0xE3ED},{0x8743, 0xE3DF},{0x8746, 0xE3E3},{0x874C, 0xBDC1},{0x874D, 0xDFE9},{0x874E, 0xE7B2},
- {0x874F, 0xE7BB},{0x8750, 0xE7B1},{0x8751, 0xE7AD},{0x8752, 0xE7AA},{0x8753, 0xBDC2},{0x8754, 0xE7A8},{0x8755, 0xBB6B},{0x8756, 0xE7A1},
- {0x8757, 0xBDC0},{0x8758, 0xE7A7},{0x8759, 0xBDBF},{0x875A, 0xE7AC},{0x875B, 0xE7A9},{0x875C, 0xE7B9},{0x875D, 0xE7B4},{0x875E, 0xE7AE},
- {0x875F, 0xE7B3},{0x8760, 0xBDBB},{0x8761, 0xE7AB},{0x8762, 0xE7BE},{0x8763, 0xE7A2},{0x8764, 0xE7A3},{0x8765, 0xE7BA},{0x8766, 0xBDBC},
- {0x8767, 0xE7BF},{0x8768, 0xBDBE},{0x8769, 0xE7C0},{0x876A, 0xE7B0},{0x876B, 0xE3D8},{0x876C, 0xE7B6},{0x876D, 0xE7AF},{0x876E, 0xE7B8},
- {0x876F, 0xE7B5},{0x8773, 0xE7A6},{0x8774, 0xBDB9},{0x8775, 0xE7BD},{0x8776, 0xBDBA},{0x8777, 0xE7A4},{0x8778, 0xBDBD},{0x8779, 0xEB64},
- {0x877A, 0xE7B7},{0x877B, 0xE7BC},{0x8781, 0xEB61},{0x8782, 0xBDB8},{0x8783, 0xBFC0},{0x8784, 0xEB6B},{0x8785, 0xEB67},{0x8787, 0xEB65},
- {0x8788, 0xEB60},{0x8789, 0xEB6F},{0x878D, 0xBFC4},{0x878F, 0xEB5C},{0x8790, 0xEB68},{0x8791, 0xEB69},{0x8792, 0xEB5F},{0x8793, 0xEB5E},
- {0x8794, 0xEB6C},{0x8796, 0xEB62},{0x8797, 0xEB5D},{0x8798, 0xEB63},{0x879A, 0xEB6E},{0x879B, 0xEB5B},{0x879C, 0xEB6D},{0x879D, 0xEB6A},
- {0x879E, 0xBFC2},{0x879F, 0xBFC1},{0x87A2, 0xBFC3},{0x87A3, 0xEB66},{0x87A4, 0xF0CB},{0x87AA, 0xEE59},{0x87AB, 0xC1B1},{0x87AC, 0xEE5D},
- {0x87AD, 0xEE5A},{0x87AE, 0xEE61},{0x87AF, 0xEE67},{0x87B0, 0xEE5C},{0x87B2, 0xEE70},{0x87B3, 0xC1AE},{0x87B4, 0xEE6A},{0x87B5, 0xEE5F},
- {0x87B6, 0xEE6B},{0x87B7, 0xEE66},{0x87B8, 0xEE6D},{0x87B9, 0xEE5E},{0x87BA, 0xC1B3},{0x87BB, 0xC1B2},{0x87BC, 0xEE60},{0x87BD, 0xEE6E},
- {0x87BE, 0xEE58},{0x87BF, 0xEE6C},{0x87C0, 0xC1AC},{0x87C2, 0xEE64},{0x87C3, 0xEE63},{0x87C4, 0xEE68},{0x87C5, 0xEE5B},{0x87C6, 0xC1B0},
- {0x87C8, 0xC1B4},{0x87C9, 0xEE62},{0x87CA, 0xEE69},{0x87CB, 0xC1B5},{0x87CC, 0xEE65},{0x87D1, 0xC1AD},{0x87D2, 0xC1AF},{0x87D3, 0xF0C7},
- {0x87D4, 0xF0C5},{0x87D7, 0xF0CC},{0x87D8, 0xF0C9},{0x87D9, 0xF0CD},{0x87DB, 0xF0BE},{0x87DC, 0xF0C6},{0x87DD, 0xF0D1},{0x87DE, 0xEE6F},
- {0x87DF, 0xF0C2},{0x87E0, 0xC2CF},{0x87E1, 0xE7A5},{0x87E2, 0xF0BD},{0x87E3, 0xF0CA},{0x87E4, 0xF0C4},{0x87E5, 0xF0C1},{0x87E6, 0xF0BC},
- {0x87E7, 0xF0BB},{0x87E8, 0xF0D0},{0x87EA, 0xF0C0},{0x87EB, 0xF0BF},{0x87EC, 0xC2CD},{0x87ED, 0xF0C8},{0x87EF, 0xC2CC},{0x87F2, 0xC2CE},
- {0x87F3, 0xF0C3},{0x87F4, 0xF0CF},{0x87F6, 0xF2DE},{0x87F7, 0xF2DF},{0x87F9, 0xC3C9},{0x87FA, 0xF2DC},{0x87FB, 0xC3C6},{0x87FC, 0xF2E4},
- {0x87FE, 0xC3CA},{0x87FF, 0xF2E6},{0x8800, 0xF2DB},{0x8801, 0xF0CE},{0x8802, 0xF2E8},{0x8803, 0xF2DD},{0x8805, 0xC3C7},{0x8806, 0xF2E3},
- {0x8808, 0xF2E5},{0x8809, 0xF2E0},{0x880A, 0xF2E7},{0x880B, 0xF2E2},{0x880C, 0xF2E1},{0x880D, 0xC3C8},{0x8810, 0xF4C5},{0x8811, 0xF4C6},
- {0x8813, 0xF4C8},{0x8814, 0xC4AE},{0x8815, 0xC4AF},{0x8816, 0xF4C9},{0x8817, 0xF4C7},{0x8819, 0xF4C4},{0x881B, 0xF642},{0x881C, 0xF645},
- {0x881D, 0xF641},{0x881F, 0xC4FA},{0x8820, 0xF643},{0x8821, 0xC4F9},{0x8822, 0xC4F8},{0x8823, 0xC4F7},{0x8824, 0xF644},{0x8825, 0xF751},
- {0x8826, 0xF74F},{0x8828, 0xF74E},{0x8829, 0xF640},{0x882A, 0xF750},{0x882B, 0xF646},{0x882C, 0xF74D},{0x882E, 0xF7F9},{0x882F, 0xF7D7},
- {0x8830, 0xF7F7},{0x8831, 0xC5DB},{0x8832, 0xF7F8},{0x8833, 0xF7FA},{0x8835, 0xF8BF},{0x8836, 0xC5FA},{0x8837, 0xF8BE},{0x8838, 0xF8BD},
- {0x8839, 0xC5FB},{0x883B, 0xC65A},{0x883C, 0xF96E},{0x883D, 0xF9A7},{0x883E, 0xF9A6},{0x883F, 0xF9A8},{0x8840, 0xA6E5},{0x8841, 0xD0AA},
- {0x8843, 0xD3CF},{0x8844, 0xD3D0},{0x8848, 0xDBC0},{0x884A, 0xF647},{0x884B, 0xF8C0},{0x884C, 0xA6E6},{0x884D, 0xAD6C},{0x884E, 0xD0AB},
- {0x8852, 0xD7B1},{0x8853, 0xB34E},{0x8855, 0xDBC2},{0x8856, 0xDBC1},{0x8857, 0xB5F3},{0x8859, 0xB8C5},{0x885A, 0xE7C1},{0x885B, 0xBDC3},
- {0x885D, 0xBDC4},{0x8861, 0xBFC5},{0x8862, 0xC5FC},{0x8863, 0xA6E7},{0x8867, 0xD0AC},{0x8868, 0xAAED},{0x8869, 0xD0AE},{0x886A, 0xD0AD},
- {0x886B, 0xAD6D},{0x886D, 0xD3D1},{0x886F, 0xD3D8},{0x8870, 0xB049},{0x8871, 0xD3D6},{0x8872, 0xD3D4},{0x8874, 0xD3DB},{0x8875, 0xD3D2},
- {0x8876, 0xD3D3},{0x8877, 0xB04A},{0x8879, 0xB04E},{0x887C, 0xD3DC},{0x887D, 0xB04D},{0x887E, 0xD3DA},{0x887F, 0xD3D7},{0x8880, 0xD3D5},
- {0x8881, 0xB04B},{0x8882, 0xB04C},{0x8883, 0xD3D9},{0x8888, 0xB350},{0x8889, 0xD7B2},{0x888B, 0xB355},{0x888C, 0xD7C2},{0x888D, 0xB354},
- {0x888E, 0xD7C4},{0x8891, 0xD7B8},{0x8892, 0xB352},{0x8893, 0xD7C3},{0x8895, 0xD7B3},{0x8896, 0xB353},{0x8897, 0xD7BF},{0x8898, 0xD7BB},
- {0x8899, 0xD7BD},{0x889A, 0xD7B7},{0x889B, 0xD7BE},{0x889E, 0xB34F},{0x889F, 0xD7BA},{0x88A1, 0xD7B9},{0x88A2, 0xD7B5},{0x88A4, 0xD7C0},
- {0x88A7, 0xD7BC},{0x88A8, 0xD7B4},{0x88AA, 0xD7B6},{0x88AB, 0xB351},{0x88AC, 0xD7C1},{0x88B1, 0xB5F6},{0x88B2, 0xDBCD},{0x88B6, 0xDBC9},
- {0x88B7, 0xDBCB},{0x88B8, 0xDBC6},{0x88B9, 0xDBC5},{0x88BA, 0xDBC3},{0x88BC, 0xDBCA},{0x88BD, 0xDBCC},{0x88BE, 0xDBC8},{0x88C0, 0xDBC7},
- {0x88C1, 0xB5F4},{0x88C2, 0xB5F5},{0x88C9, 0xDBCF},{0x88CA, 0xB8CD},{0x88CB, 0xDFF2},{0x88CC, 0xDFF8},{0x88CD, 0xDFF3},{0x88CE, 0xDFF4},
- {0x88D0, 0xDFF9},{0x88D2, 0xB8CF},{0x88D4, 0xB8C7},{0x88D5, 0xB8CE},{0x88D6, 0xDFF1},{0x88D7, 0xDBC4},{0x88D8, 0xB8CA},{0x88D9, 0xB8C8},
- {0x88DA, 0xDFF7},{0x88DB, 0xDFF6},{0x88DC, 0xB8C9},{0x88DD, 0xB8CB},{0x88DE, 0xDFF5},{0x88DF, 0xB8C6},{0x88E1, 0xB8CC},{0x88E7, 0xE3F6},
- {0x88E8, 0xBB74},{0x88EB, 0xE442},{0x88EC, 0xE441},{0x88EE, 0xE3FB},{0x88EF, 0xBB76},{0x88F0, 0xE440},{0x88F1, 0xE3F7},{0x88F2, 0xE3F8},
- {0x88F3, 0xBB6E},{0x88F4, 0xBB70},{0x88F6, 0xE3FD},{0x88F7, 0xE3F5},{0x88F8, 0xBB72},{0x88F9, 0xBB71},{0x88FA, 0xE3F9},{0x88FB, 0xE3FE},
- {0x88FC, 0xE3FC},{0x88FD, 0xBB73},{0x88FE, 0xE3FA},{0x8901, 0xDBCE},{0x8902, 0xBB6F},{0x8905, 0xE7C2},{0x8906, 0xE7C9},{0x8907, 0xBDC6},
- {0x8909, 0xE7CD},{0x890A, 0xBDCA},{0x890B, 0xE7C5},{0x890C, 0xE7C3},{0x890E, 0xE7CC},{0x8910, 0xBDC5},{0x8911, 0xE7CB},{0x8912, 0xBDC7},
- {0x8913, 0xBDC8},{0x8914, 0xE7C4},{0x8915, 0xBDC9},{0x8916, 0xE7CA},{0x8917, 0xE7C6},{0x8918, 0xE7C7},{0x8919, 0xE7C8},{0x891A, 0xBB75},
- {0x891E, 0xEB70},{0x891F, 0xEB7C},{0x8921, 0xBFCA},{0x8922, 0xEB77},{0x8923, 0xEB79},{0x8925, 0xBFC8},{0x8926, 0xEB71},{0x8927, 0xEB75},
- {0x8929, 0xEB78},{0x892A, 0xBFC6},{0x892B, 0xBFC9},{0x892C, 0xEB7B},{0x892D, 0xEB73},{0x892E, 0xEB74},{0x892F, 0xEB7A},{0x8930, 0xEB72},
- {0x8931, 0xEB76},{0x8932, 0xBFC7},{0x8933, 0xEE72},{0x8935, 0xEE71},{0x8936, 0xC1B7},{0x8937, 0xEE77},{0x8938, 0xC1B9},{0x893B, 0xC1B6},
- {0x893C, 0xEE73},{0x893D, 0xC1BA},{0x893E, 0xEE74},{0x8941, 0xEE75},{0x8942, 0xEE78},{0x8944, 0xC1B8},{0x8946, 0xF0D6},{0x8949, 0xF0D9},
- {0x894B, 0xF0D3},{0x894C, 0xF0D5},{0x894F, 0xF0D4},{0x8950, 0xF0D7},{0x8951, 0xF0D8},{0x8952, 0xEE76},{0x8953, 0xF0D2},{0x8956, 0xC3CD},
- {0x8957, 0xF2EC},{0x8958, 0xF2EF},{0x8959, 0xF2F1},{0x895A, 0xF2EA},{0x895B, 0xF2EB},{0x895C, 0xF2EE},{0x895D, 0xF2F0},{0x895E, 0xC3CE},
- {0x895F, 0xC3CC},{0x8960, 0xC3CB},{0x8961, 0xF2ED},{0x8962, 0xF2E9},{0x8963, 0xF4CA},{0x8964, 0xC4B0},{0x8966, 0xF4CB},{0x8969, 0xF649},
- {0x896A, 0xC4FB},{0x896B, 0xF64B},{0x896C, 0xC4FC},{0x896D, 0xF648},{0x896E, 0xF64A},{0x896F, 0xC5A8},{0x8971, 0xF752},{0x8972, 0xC5A7},
- {0x8973, 0xF7FD},{0x8974, 0xF7FC},{0x8976, 0xF7FB},{0x8979, 0xF948},{0x897A, 0xF949},{0x897B, 0xF94B},{0x897C, 0xF94A},{0x897E, 0xCA50},
- {0x897F, 0xA6E8},{0x8981, 0xAD6E},{0x8982, 0xD7C5},{0x8983, 0xB5F7},{0x8985, 0xDFFA},{0x8986, 0xC2D0},{0x8988, 0xF2F2},{0x898B, 0xA8A3},
- {0x898F, 0xB357},{0x8993, 0xB356},{0x8995, 0xDBD0},{0x8996, 0xB5F8},{0x8997, 0xDBD2},{0x8998, 0xDBD1},{0x899B, 0xDFFB},{0x899C, 0xB8D0},
- {0x899D, 0xE443},{0x899E, 0xE446},{0x899F, 0xE445},{0x89A1, 0xE444},{0x89A2, 0xE7CE},{0x89A3, 0xE7D0},{0x89A4, 0xE7CF},{0x89A6, 0xBFCC},
- {0x89AA, 0xBFCB},{0x89AC, 0xC1BB},{0x89AD, 0xEE79},{0x89AE, 0xEE7B},{0x89AF, 0xEE7A},{0x89B2, 0xC2D1},{0x89B6, 0xF2F4},{0x89B7, 0xF2F3},
- {0x89B9, 0xF4CC},{0x89BA, 0xC4B1},{0x89BD, 0xC4FD},{0x89BE, 0xF754},{0x89BF, 0xF753},{0x89C0, 0xC65B},{0x89D2, 0xA8A4},{0x89D3, 0xD0AF},
- {0x89D4, 0xAD6F},{0x89D5, 0xD7C8},{0x89D6, 0xD7C6},{0x89D9, 0xD7C7},{0x89DA, 0xDBD4},{0x89DB, 0xDBD5},{0x89DC, 0xE043},{0x89DD, 0xDBD3},
- {0x89DF, 0xDFFC},{0x89E0, 0xE041},{0x89E1, 0xE040},{0x89E2, 0xE042},{0x89E3, 0xB8D1},{0x89E4, 0xDFFE},{0x89E5, 0xDFFD},{0x89E6, 0xE044},
- {0x89E8, 0xE449},{0x89E9, 0xE447},{0x89EB, 0xE448},{0x89EC, 0xE7D3},{0x89ED, 0xE7D1},{0x89F0, 0xE7D2},{0x89F1, 0xEB7D},{0x89F2, 0xEE7C},
- {0x89F3, 0xEE7D},{0x89F4, 0xC2D2},{0x89F6, 0xF2F5},{0x89F7, 0xF4CD},{0x89F8, 0xC4B2},{0x89FA, 0xF64C},{0x89FB, 0xF755},{0x89FC, 0xC5A9},
- {0x89FE, 0xF7FE},{0x89FF, 0xF94C},{0x8A00, 0xA8A5},{0x8A02, 0xAD71},{0x8A03, 0xAD72},{0x8A04, 0xD0B0},{0x8A07, 0xD0B1},{0x8A08, 0xAD70},
- {0x8A0A, 0xB054},{0x8A0C, 0xB052},{0x8A0E, 0xB051},{0x8A0F, 0xB058},{0x8A10, 0xB050},{0x8A11, 0xB059},{0x8A12, 0xD3DD},{0x8A13, 0xB056},
- {0x8A15, 0xB053},{0x8A16, 0xB057},{0x8A17, 0xB055},{0x8A18, 0xB04F},{0x8A1B, 0xB35F},{0x8A1D, 0xB359},{0x8A1E, 0xD7CC},{0x8A1F, 0xB35E},
- {0x8A22, 0xB360},{0x8A23, 0xB35A},{0x8A25, 0xB35B},{0x8A27, 0xD7CA},{0x8A2A, 0xB358},{0x8A2C, 0xD7CB},{0x8A2D, 0xB35D},{0x8A30, 0xD7C9},
- {0x8A31, 0xB35C},{0x8A34, 0xB644},{0x8A36, 0xB646},{0x8A39, 0xDBD8},{0x8A3A, 0xB645},{0x8A3B, 0xB5F9},{0x8A3C, 0xB5FD},{0x8A3E, 0xB8E4},
- {0x8A3F, 0xE049},{0x8A40, 0xDBDA},{0x8A41, 0xB5FE},{0x8A44, 0xDBDD},{0x8A45, 0xDBDE},{0x8A46, 0xB643},{0x8A48, 0xDBE0},{0x8A4A, 0xDBE2},
- {0x8A4C, 0xDBE3},{0x8A4D, 0xDBD7},{0x8A4E, 0xDBD6},{0x8A4F, 0xDBE4},{0x8A50, 0xB642},{0x8A51, 0xDBE1},{0x8A52, 0xDBDF},{0x8A54, 0xB640},
- {0x8A55, 0xB5FB},{0x8A56, 0xB647},{0x8A57, 0xDBDB},{0x8A58, 0xDBDC},{0x8A59, 0xDBD9},{0x8A5B, 0xB641},{0x8A5E, 0xB5FC},{0x8A60, 0xB5FA},
- {0x8A61, 0xE048},{0x8A62, 0xB8DF},{0x8A63, 0xB8DA},{0x8A66, 0xB8D5},{0x8A68, 0xB8E5},{0x8A69, 0xB8D6},{0x8A6B, 0xB8D2},{0x8A6C, 0xB8E1},
- {0x8A6D, 0xB8DE},{0x8A6E, 0xB8E0},{0x8A70, 0xB8D7},{0x8A71, 0xB8DC},{0x8A72, 0xB8D3},{0x8A73, 0xB8D4},{0x8A74, 0xE050},{0x8A75, 0xE04D},
- {0x8A76, 0xE045},{0x8A77, 0xE04A},{0x8A79, 0xB8E2},{0x8A7A, 0xE051},{0x8A7B, 0xB8E3},{0x8A7C, 0xB8D9},{0x8A7F, 0xE047},{0x8A81, 0xE04F},
- {0x8A82, 0xE04B},{0x8A83, 0xE04E},{0x8A84, 0xE04C},{0x8A85, 0xB8DD},{0x8A86, 0xE046},{0x8A87, 0xB8D8},{0x8A8B, 0xE44C},{0x8A8C, 0xBB78},
- {0x8A8D, 0xBB7B},{0x8A8F, 0xE44E},{0x8A91, 0xBBA5},{0x8A92, 0xE44D},{0x8A93, 0xBB7D},{0x8A95, 0xBDCF},{0x8A96, 0xE44F},{0x8A98, 0xBBA4},
- {0x8A99, 0xE44B},{0x8A9A, 0xBBA6},{0x8A9E, 0xBB79},{0x8AA0, 0xB8DB},{0x8AA1, 0xBB7C},{0x8AA3, 0xBB7A},{0x8AA4, 0xBB7E},{0x8AA5, 0xBBA2},
- {0x8AA6, 0xBB77},{0x8AA7, 0xBBA7},{0x8AA8, 0xBBA3},{0x8AAA, 0xBBA1},{0x8AAB, 0xE44A},{0x8AB0, 0xBDD6},{0x8AB2, 0xBDD2},{0x8AB6, 0xBDD9},
- {0x8AB8, 0xE7D6},{0x8AB9, 0xBDDA},{0x8ABA, 0xE7E2},{0x8ABB, 0xE7DB},{0x8ABC, 0xBDCB},{0x8ABD, 0xE7E3},{0x8ABE, 0xE7DD},{0x8ABF, 0xBDD5},
- {0x8AC0, 0xE7DE},{0x8AC2, 0xBDD4},{0x8AC3, 0xE7E1},{0x8AC4, 0xBDCE},{0x8AC5, 0xE7DF},{0x8AC6, 0xE7D5},{0x8AC7, 0xBDCD},{0x8AC8, 0xEBAA},
- {0x8AC9, 0xBDD3},{0x8ACB, 0xBDD0},{0x8ACD, 0xBDD8},{0x8ACF, 0xE7D4},{0x8AD1, 0xE7D8},{0x8AD2, 0xBDCC},{0x8AD3, 0xE7D7},{0x8AD4, 0xE7D9},
- {0x8AD5, 0xE7DA},{0x8AD6, 0xBDD7},{0x8AD7, 0xE7DC},{0x8AD8, 0xE7E0},{0x8AD9, 0xE7E4},{0x8ADB, 0xBDDB},{0x8ADC, 0xBFD2},{0x8ADD, 0xEBA5},
- {0x8ADE, 0xEBAB},{0x8ADF, 0xEBA8},{0x8AE0, 0xEB7E},{0x8AE1, 0xEBAC},{0x8AE2, 0xEBA1},{0x8AE4, 0xEBA7},{0x8AE6, 0xBFCD},{0x8AE7, 0xBFD3},
- {0x8AE8, 0xEBAD},{0x8AEB, 0xBFCF},{0x8AED, 0xBFD9},{0x8AEE, 0xBFD4},{0x8AEF, 0xEBAF},{0x8AF0, 0xEBA9},{0x8AF1, 0xBFD0},{0x8AF2, 0xEBA2},
- {0x8AF3, 0xBFDA},{0x8AF4, 0xEBA3},{0x8AF5, 0xEBA4},{0x8AF6, 0xBFDB},{0x8AF7, 0xBFD8},{0x8AF8, 0xBDD1},{0x8AFA, 0xBFCE},{0x8AFB, 0xEBB0},
- {0x8AFC, 0xBFDC},{0x8AFE, 0xBFD5},{0x8AFF, 0xEBAE},{0x8B00, 0xBFD1},{0x8B01, 0xBFD6},{0x8B02, 0xBFD7},{0x8B04, 0xC1C3},{0x8B05, 0xEEA4},
- {0x8B06, 0xEEAD},{0x8B07, 0xEEAA},{0x8B08, 0xEEAC},{0x8B0A, 0xC1C0},{0x8B0B, 0xEEA5},{0x8B0D, 0xEEAB},{0x8B0E, 0xC1BC},{0x8B0F, 0xEEA7},
- {0x8B10, 0xC1C4},{0x8B11, 0xEEA3},{0x8B12, 0xEEA8},{0x8B13, 0xEEAF},{0x8B14, 0xEBA6},{0x8B15, 0xEEA9},{0x8B16, 0xEEA2},{0x8B17, 0xC1BD},
- {0x8B18, 0xEEA1},{0x8B19, 0xC1BE},{0x8B1A, 0xEEB0},{0x8B1B, 0xC1BF},{0x8B1C, 0xEEAE},{0x8B1D, 0xC1C2},{0x8B1E, 0xEE7E},{0x8B20, 0xC1C1},
- {0x8B22, 0xEEA6},{0x8B23, 0xF0DC},{0x8B24, 0xF0EA},{0x8B25, 0xF0E5},{0x8B26, 0xF0E7},{0x8B27, 0xF0DB},{0x8B28, 0xC2D3},{0x8B2A, 0xF0DA},
- {0x8B2B, 0xC2D6},{0x8B2C, 0xC2D5},{0x8B2E, 0xF0E9},{0x8B2F, 0xF0E1},{0x8B30, 0xF0DE},{0x8B31, 0xF0E4},{0x8B33, 0xF0DD},{0x8B35, 0xF0DF},
- {0x8B36, 0xF0E8},{0x8B37, 0xF0E6},{0x8B39, 0xC2D4},{0x8B3A, 0xF0ED},{0x8B3B, 0xF0EB},{0x8B3C, 0xF0E2},{0x8B3D, 0xF0EC},{0x8B3E, 0xF0E3},
- {0x8B40, 0xF2F9},{0x8B41, 0xC3CF},{0x8B42, 0xF341},{0x8B45, 0xF64F},{0x8B46, 0xC3D6},{0x8B47, 0xF0E0},{0x8B48, 0xF2F7},{0x8B49, 0xC3D2},
- {0x8B4A, 0xF2F8},{0x8B4B, 0xF2FD},{0x8B4E, 0xC3D4},{0x8B4F, 0xC3D5},{0x8B50, 0xF2F6},{0x8B51, 0xF340},{0x8B52, 0xF342},{0x8B53, 0xF2FA},
- {0x8B54, 0xF2FC},{0x8B55, 0xF2FE},{0x8B56, 0xF2FB},{0x8B57, 0xF343},{0x8B58, 0xC3D1},{0x8B59, 0xC3D7},{0x8B5A, 0xC3D3},{0x8B5C, 0xC3D0},
- {0x8B5D, 0xF4D0},{0x8B5F, 0xC4B7},{0x8B60, 0xF4CE},{0x8B63, 0xF4D2},{0x8B65, 0xF4D3},{0x8B66, 0xC4B5},{0x8B67, 0xF4D4},{0x8B68, 0xF4D1},
- {0x8B6A, 0xF4CF},{0x8B6B, 0xC4B8},{0x8B6C, 0xC4B4},{0x8B6D, 0xF4D5},{0x8B6F, 0xC4B6},{0x8B70, 0xC4B3},{0x8B74, 0xC4FE},{0x8B77, 0xC540},
- {0x8B78, 0xF64E},{0x8B79, 0xF64D},{0x8B7A, 0xF650},{0x8B7B, 0xF651},{0x8B7D, 0xC541},{0x8B7E, 0xF756},{0x8B7F, 0xF75B},{0x8B80, 0xC5AA},
- {0x8B82, 0xF758},{0x8B84, 0xF757},{0x8B85, 0xF75A},{0x8B86, 0xF759},{0x8B88, 0xF843},{0x8B8A, 0xC5DC},{0x8B8B, 0xF842},{0x8B8C, 0xF840},
- {0x8B8E, 0xF841},{0x8B92, 0xC5FE},{0x8B93, 0xC5FD},{0x8B94, 0xF8C1},{0x8B95, 0xF8C2},{0x8B96, 0xC640},{0x8B98, 0xF94D},{0x8B99, 0xF94E},
- {0x8B9A, 0xC667},{0x8B9C, 0xC66D},{0x8B9E, 0xF9A9},{0x8B9F, 0xF9C8},{0x8C37, 0xA8A6},{0x8C39, 0xD7CD},{0x8C3B, 0xD7CE},{0x8C3C, 0xE052},
- {0x8C3D, 0xE450},{0x8C3E, 0xE7E5},{0x8C3F, 0xC1C6},{0x8C41, 0xC1C5},{0x8C42, 0xF0EE},{0x8C43, 0xF344},{0x8C45, 0xF844},{0x8C46, 0xA8A7},
- {0x8C47, 0xD3DE},{0x8C48, 0xB05A},{0x8C49, 0xB361},{0x8C4A, 0xE054},{0x8C4B, 0xE053},{0x8C4C, 0xBDDC},{0x8C4D, 0xE7E6},{0x8C4E, 0xBDDD},
- {0x8C4F, 0xEEB1},{0x8C50, 0xC2D7},{0x8C54, 0xC676},{0x8C55, 0xA8A8},{0x8C56, 0xCDCB},{0x8C57, 0xD3DF},{0x8C5A, 0xB362},{0x8C5C, 0xD7CF},
- {0x8C5D, 0xD7D0},{0x8C5F, 0xDBE5},{0x8C61, 0xB648},{0x8C62, 0xB8E6},{0x8C64, 0xE056},{0x8C65, 0xE055},{0x8C66, 0xE057},{0x8C68, 0xE451},
- {0x8C69, 0xE452},{0x8C6A, 0xBBA8},{0x8C6B, 0xBFDD},{0x8C6C, 0xBDDE},{0x8C6D, 0xBFDE},{0x8C6F, 0xEEB5},{0x8C70, 0xEEB2},{0x8C71, 0xEEB4},
- {0x8C72, 0xEEB3},{0x8C73, 0xC1C7},{0x8C75, 0xF0EF},{0x8C76, 0xF346},{0x8C77, 0xF345},{0x8C78, 0xCBA4},{0x8C79, 0xB05C},{0x8C7A, 0xB05B},
- {0x8C7B, 0xD3E0},{0x8C7D, 0xD7D1},{0x8C80, 0xDBE7},{0x8C81, 0xDBE6},{0x8C82, 0xB649},{0x8C84, 0xE059},{0x8C85, 0xE05A},{0x8C86, 0xE058},
- {0x8C89, 0xB8E8},{0x8C8A, 0xB8E7},{0x8C8C, 0xBBAA},{0x8C8D, 0xBBA9},{0x8C8F, 0xE7E7},{0x8C90, 0xEBB3},{0x8C91, 0xEBB1},{0x8C92, 0xEBB2},
- {0x8C93, 0xBFDF},{0x8C94, 0xEEB7},{0x8C95, 0xEEB6},{0x8C97, 0xF0F2},{0x8C98, 0xF0F1},{0x8C99, 0xF0F0},{0x8C9A, 0xF347},{0x8C9C, 0xF9AA},
- {0x8C9D, 0xA8A9},{0x8C9E, 0xAD73},{0x8CA0, 0xAD74},{0x8CA1, 0xB05D},{0x8CA2, 0xB05E},{0x8CA3, 0xD3E2},{0x8CA4, 0xD3E1},{0x8CA5, 0xD7D2},
- {0x8CA7, 0xB368},{0x8CA8, 0xB366},{0x8CA9, 0xB363},{0x8CAA, 0xB367},{0x8CAB, 0xB365},{0x8CAC, 0xB364},{0x8CAF, 0xB64A},{0x8CB0, 0xDBEA},
- {0x8CB2, 0xB8ED},{0x8CB3, 0xB64C},{0x8CB4, 0xB651},{0x8CB5, 0xDBEC},{0x8CB6, 0xB653},{0x8CB7, 0xB652},{0x8CB8, 0xB655},{0x8CB9, 0xDBEB},
- {0x8CBA, 0xDBE8},{0x8CBB, 0xB64F},{0x8CBC, 0xB64B},{0x8CBD, 0xB64D},{0x8CBE, 0xDBE9},{0x8CBF, 0xB654},{0x8CC0, 0xB650},{0x8CC1, 0xB64E},
- {0x8CC2, 0xB8EF},{0x8CC3, 0xB8EE},{0x8CC4, 0xB8EC},{0x8CC5, 0xB8F0},{0x8CC7, 0xB8EA},{0x8CC8, 0xB8EB},{0x8CCA, 0xB8E9},{0x8CCC, 0xE05B},
- {0x8CCF, 0xE454},{0x8CD1, 0xBBAC},{0x8CD2, 0xBBAD},{0x8CD3, 0xBBAB},{0x8CD5, 0xE453},{0x8CD7, 0xE455},{0x8CD9, 0xE7EA},{0x8CDA, 0xE7EC},
- {0x8CDC, 0xBDE7},{0x8CDD, 0xE7ED},{0x8CDE, 0xBDE0},{0x8CDF, 0xE7E9},{0x8CE0, 0xBDDF},{0x8CE1, 0xBDE9},{0x8CE2, 0xBDE5},{0x8CE3, 0xBDE6},
- {0x8CE4, 0xBDE2},{0x8CE5, 0xE7E8},{0x8CE6, 0xBDE1},{0x8CE7, 0xE7EE},{0x8CE8, 0xE7EB},{0x8CEA, 0xBDE8},{0x8CEC, 0xBDE3},{0x8CED, 0xBDE4},
- {0x8CEE, 0xEBB5},{0x8CF0, 0xEBB7},{0x8CF1, 0xEBB6},{0x8CF3, 0xEBB8},{0x8CF4, 0xBFE0},{0x8CF5, 0xEBB4},{0x8CF8, 0xC1CB},{0x8CF9, 0xEEB8},
- {0x8CFA, 0xC1C8},{0x8CFB, 0xC1CC},{0x8CFC, 0xC1CA},{0x8CFD, 0xC1C9},{0x8CFE, 0xF0F3},{0x8D00, 0xF0F6},{0x8D02, 0xF0F5},{0x8D04, 0xF0F4},
- {0x8D05, 0xC2D8},{0x8D06, 0xF348},{0x8D07, 0xF349},{0x8D08, 0xC3D8},{0x8D09, 0xF34A},{0x8D0A, 0xC3D9},{0x8D0D, 0xC4BA},{0x8D0F, 0xC4B9},
- {0x8D10, 0xF652},{0x8D13, 0xC542},{0x8D14, 0xF653},{0x8D15, 0xF75C},{0x8D16, 0xC5AB},{0x8D17, 0xC5AC},{0x8D19, 0xF845},{0x8D1B, 0xC642},
- {0x8D64, 0xA8AA},{0x8D66, 0xB36A},{0x8D67, 0xB369},{0x8D68, 0xE05C},{0x8D69, 0xE05D},{0x8D6B, 0xBBAE},{0x8D6C, 0xEBB9},{0x8D6D, 0xBDEA},
- {0x8D6E, 0xEBBA},{0x8D6F, 0xEEB9},{0x8D70, 0xA8AB},{0x8D72, 0xD0B2},{0x8D73, 0xAD76},{0x8D74, 0xAD75},{0x8D76, 0xD3E3},{0x8D77, 0xB05F},
- {0x8D78, 0xD3E4},{0x8D79, 0xD7D5},{0x8D7B, 0xD7D4},{0x8D7D, 0xD7D3},{0x8D80, 0xDBEE},{0x8D81, 0xB658},{0x8D84, 0xDBED},{0x8D85, 0xB657},
- {0x8D89, 0xDBEF},{0x8D8A, 0xB656},{0x8D8C, 0xE05F},{0x8D8D, 0xE062},{0x8D8E, 0xE060},{0x8D8F, 0xE061},{0x8D90, 0xE065},{0x8D91, 0xE05E},
- {0x8D92, 0xE066},{0x8D93, 0xE063},{0x8D94, 0xE064},{0x8D95, 0xBBB0},{0x8D96, 0xE456},{0x8D99, 0xBBAF},{0x8D9B, 0xE7F2},{0x8D9C, 0xE7F0},
- {0x8D9F, 0xBDEB},{0x8DA0, 0xE7EF},{0x8DA1, 0xE7F1},{0x8DA3, 0xBDEC},{0x8DA5, 0xEBBB},{0x8DA7, 0xEBBC},{0x8DA8, 0xC1CD},{0x8DAA, 0xF34C},
- {0x8DAB, 0xF34E},{0x8DAC, 0xF34B},{0x8DAD, 0xF34D},{0x8DAE, 0xF4D6},{0x8DAF, 0xF654},{0x8DB2, 0xF96F},{0x8DB3, 0xA8AC},{0x8DB4, 0xAD77},
- {0x8DB5, 0xD3E5},{0x8DB6, 0xD3E7},{0x8DB7, 0xD3E6},{0x8DB9, 0xD7D8},{0x8DBA, 0xB36C},{0x8DBC, 0xD7D6},{0x8DBE, 0xB36B},{0x8DBF, 0xD7D9},
- {0x8DC1, 0xD7DA},{0x8DC2, 0xD7D7},{0x8DC5, 0xDBFB},{0x8DC6, 0xB660},{0x8DC7, 0xDBF3},{0x8DC8, 0xDBF9},{0x8DCB, 0xB65B},{0x8DCC, 0xB65E},
- {0x8DCD, 0xDBF2},{0x8DCE, 0xB659},{0x8DCF, 0xDBF6},{0x8DD0, 0xE06C},{0x8DD1, 0xB65D},{0x8DD3, 0xDBF1},{0x8DD5, 0xDBF7},{0x8DD6, 0xDBF4},
- {0x8DD7, 0xDBFA},{0x8DD8, 0xDBF0},{0x8DD9, 0xDBF8},{0x8DDA, 0xB65C},{0x8DDB, 0xB65F},{0x8DDC, 0xDBF5},{0x8DDD, 0xB65A},{0x8DDF, 0xB8F2},
- {0x8DE0, 0xE068},{0x8DE1, 0xB8F1},{0x8DE2, 0xE06F},{0x8DE3, 0xE06E},{0x8DE4, 0xB8F8},{0x8DE6, 0xB8F9},{0x8DE7, 0xE070},{0x8DE8, 0xB8F3},
- {0x8DE9, 0xE06D},{0x8DEA, 0xB8F7},{0x8DEB, 0xE072},{0x8DEC, 0xE069},{0x8DEE, 0xE06B},{0x8DEF, 0xB8F4},{0x8DF0, 0xE067},{0x8DF1, 0xE06A},
- {0x8DF2, 0xE071},{0x8DF3, 0xB8F5},{0x8DF4, 0xE073},{0x8DFA, 0xB8F6},{0x8DFC, 0xBBB1},{0x8DFD, 0xE45B},{0x8DFE, 0xE461},{0x8DFF, 0xE459},
- {0x8E00, 0xE462},{0x8E02, 0xE458},{0x8E03, 0xE45D},{0x8E04, 0xE463},{0x8E05, 0xE460},{0x8E06, 0xE45F},{0x8E07, 0xE45E},{0x8E09, 0xE457},
- {0x8E0A, 0xE45C},{0x8E0D, 0xE45A},{0x8E0F, 0xBDF1},{0x8E10, 0xBDEE},{0x8E11, 0xE7FB},{0x8E12, 0xE841},{0x8E13, 0xE843},{0x8E14, 0xE840},
- {0x8E15, 0xE7F8},{0x8E16, 0xE7FA},{0x8E17, 0xE845},{0x8E18, 0xE842},{0x8E19, 0xE7FC},{0x8E1A, 0xE846},{0x8E1B, 0xE7F9},{0x8E1C, 0xE844},
- {0x8E1D, 0xBDEF},{0x8E1E, 0xBDF5},{0x8E1F, 0xBDF3},{0x8E20, 0xE7F3},{0x8E21, 0xBDF4},{0x8E22, 0xBDF0},{0x8E23, 0xE7F4},{0x8E24, 0xE7F6},
- {0x8E25, 0xE7F5},{0x8E26, 0xE7FD},{0x8E27, 0xE7FE},{0x8E29, 0xBDF2},{0x8E2B, 0xBDED},{0x8E2E, 0xE7F7},{0x8E30, 0xEBC6},{0x8E31, 0xBFE2},
- {0x8E33, 0xEBBD},{0x8E34, 0xBFE3},{0x8E35, 0xBFE6},{0x8E36, 0xEBC2},{0x8E38, 0xEBBF},{0x8E39, 0xBFE5},{0x8E3C, 0xEBC3},{0x8E3D, 0xEBC4},
- {0x8E3E, 0xEBBE},{0x8E3F, 0xEBC7},{0x8E40, 0xEBC0},{0x8E41, 0xEBC5},{0x8E42, 0xBFE4},{0x8E44, 0xBFE1},{0x8E45, 0xEBC1},{0x8E47, 0xEEBF},
- {0x8E48, 0xC1D0},{0x8E49, 0xC1CE},{0x8E4A, 0xC1D1},{0x8E4B, 0xC1CF},{0x8E4C, 0xEEBE},{0x8E4D, 0xEEBB},{0x8E4E, 0xEEBA},{0x8E50, 0xEEBD},
- {0x8E53, 0xEEBC},{0x8E54, 0xF145},{0x8E55, 0xC2DE},{0x8E56, 0xF0FB},{0x8E57, 0xF0FA},{0x8E59, 0xC2D9},{0x8E5A, 0xF141},{0x8E5B, 0xF140},
- {0x8E5C, 0xF0F7},{0x8E5D, 0xF143},{0x8E5E, 0xF0FC},{0x8E5F, 0xC2DD},{0x8E60, 0xF0F9},{0x8E61, 0xF142},{0x8E62, 0xF0F8},{0x8E63, 0xC2DA},
- {0x8E64, 0xC2DC},{0x8E65, 0xF0FD},{0x8E66, 0xC2DB},{0x8E67, 0xF0FE},{0x8E69, 0xF144},{0x8E6A, 0xF352},{0x8E6C, 0xC3DE},{0x8E6D, 0xF34F},
- {0x8E6F, 0xF353},{0x8E72, 0xC3DB},{0x8E73, 0xF351},{0x8E74, 0xC3E0},{0x8E76, 0xC3DD},{0x8E78, 0xF350},{0x8E7A, 0xC3DF},{0x8E7B, 0xF354},
- {0x8E7C, 0xC3DA},{0x8E81, 0xC4BC},{0x8E82, 0xC4BE},{0x8E84, 0xF4D9},{0x8E85, 0xC4BD},{0x8E86, 0xF4D7},{0x8E87, 0xC3DC},{0x8E88, 0xF4D8},
- {0x8E89, 0xC4BB},{0x8E8A, 0xC543},{0x8E8B, 0xC545},{0x8E8C, 0xF656},{0x8E8D, 0xC544},{0x8E8E, 0xF655},{0x8E90, 0xF761},{0x8E91, 0xC5AD},
- {0x8E92, 0xF760},{0x8E93, 0xC5AE},{0x8E94, 0xF75E},{0x8E95, 0xF75D},{0x8E96, 0xF762},{0x8E97, 0xF763},{0x8E98, 0xF846},{0x8E9A, 0xF75F},
- {0x8E9D, 0xF8C6},{0x8E9E, 0xF8C3},{0x8E9F, 0xF8C4},{0x8EA0, 0xF8C5},{0x8EA1, 0xC65C},{0x8EA3, 0xF951},{0x8EA4, 0xF950},{0x8EA5, 0xF94F},
- {0x8EA6, 0xF970},{0x8EA8, 0xF9BE},{0x8EA9, 0xF9AB},{0x8EAA, 0xC66E},{0x8EAB, 0xA8AD},{0x8EAC, 0xB060},{0x8EB2, 0xB8FA},{0x8EBA, 0xBDF6},
- {0x8EBD, 0xEBC8},{0x8EC0, 0xC2DF},{0x8EC2, 0xF355},{0x8EC9, 0xF9AC},{0x8ECA, 0xA8AE},{0x8ECB, 0xAAEE},{0x8ECC, 0xAD79},{0x8ECD, 0xAD78},
- {0x8ECF, 0xB063},{0x8ED1, 0xD3E8},{0x8ED2, 0xB061},{0x8ED3, 0xD3E9},{0x8ED4, 0xB062},{0x8ED7, 0xD7DF},{0x8ED8, 0xD7DB},{0x8EDB, 0xB36D},
- {0x8EDC, 0xD7DE},{0x8EDD, 0xD7DD},{0x8EDE, 0xD7DC},{0x8EDF, 0xB36E},{0x8EE0, 0xD7E0},{0x8EE1, 0xD7E1},{0x8EE5, 0xDC43},{0x8EE6, 0xDC41},
- {0x8EE7, 0xDC45},{0x8EE8, 0xDC46},{0x8EE9, 0xDC4C},{0x8EEB, 0xDC48},{0x8EEC, 0xDC4A},{0x8EEE, 0xDC42},{0x8EEF, 0xDBFC},{0x8EF1, 0xDC49},
- {0x8EF4, 0xDC4B},{0x8EF5, 0xDC44},{0x8EF6, 0xDC47},{0x8EF7, 0xDBFD},{0x8EF8, 0xB662},{0x8EF9, 0xDC40},{0x8EFA, 0xDBFE},{0x8EFB, 0xB661},
- {0x8EFC, 0xB663},{0x8EFE, 0xB8FD},{0x8EFF, 0xE075},{0x8F00, 0xE077},{0x8F01, 0xE076},{0x8F02, 0xE07B},{0x8F03, 0xB8FB},{0x8F05, 0xE078},
- {0x8F06, 0xE074},{0x8F07, 0xE079},{0x8F08, 0xE07A},{0x8F09, 0xB8FC},{0x8F0A, 0xB8FE},{0x8F0B, 0xE07C},{0x8F0D, 0xE467},{0x8F0E, 0xE466},
- {0x8F10, 0xE464},{0x8F11, 0xE465},{0x8F12, 0xBBB3},{0x8F13, 0xBBB5},{0x8F14, 0xBBB2},{0x8F15, 0xBBB4},{0x8F16, 0xE84D},{0x8F17, 0xE84E},
- {0x8F18, 0xE849},{0x8F1A, 0xE84A},{0x8F1B, 0xBDF8},{0x8F1C, 0xBDFD},{0x8F1D, 0xBDF7},{0x8F1E, 0xBDFE},{0x8F1F, 0xBDF9},{0x8F20, 0xE84B},
- {0x8F23, 0xE84C},{0x8F24, 0xE848},{0x8F25, 0xBE40},{0x8F26, 0xBDFB},{0x8F29, 0xBDFA},{0x8F2A, 0xBDFC},{0x8F2C, 0xE847},{0x8F2E, 0xEBCA},
- {0x8F2F, 0xBFE8},{0x8F32, 0xEBCC},{0x8F33, 0xBFEA},{0x8F34, 0xEBCF},{0x8F35, 0xEBCB},{0x8F36, 0xEBC9},{0x8F37, 0xEBCE},{0x8F38, 0xBFE9},
- {0x8F39, 0xEBCD},{0x8F3B, 0xBFE7},{0x8F3E, 0xC1D3},{0x8F3F, 0xC1D6},{0x8F40, 0xEEC1},{0x8F42, 0xC1D4},{0x8F43, 0xEEC0},{0x8F44, 0xC1D2},
- {0x8F45, 0xC1D5},{0x8F46, 0xF146},{0x8F47, 0xF147},{0x8F48, 0xF148},{0x8F49, 0xC2E0},{0x8F4B, 0xF149},{0x8F4D, 0xC2E1},{0x8F4E, 0xC3E2},
- {0x8F4F, 0xF358},{0x8F50, 0xF359},{0x8F51, 0xF357},{0x8F52, 0xF356},{0x8F53, 0xF35A},{0x8F54, 0xC3E1},{0x8F55, 0xF4DD},{0x8F56, 0xF4DB},
- {0x8F57, 0xF4DC},{0x8F58, 0xF4DE},{0x8F59, 0xF4DA},{0x8F5A, 0xF4DF},{0x8F5B, 0xF658},{0x8F5D, 0xF659},{0x8F5E, 0xF657},{0x8F5F, 0xC546},
- {0x8F60, 0xF764},{0x8F61, 0xC5AF},{0x8F62, 0xF765},{0x8F63, 0xF848},{0x8F64, 0xF847},{0x8F9B, 0xA8AF},{0x8F9C, 0xB664},{0x8F9F, 0xB940},
- {0x8FA3, 0xBBB6},{0x8FA6, 0xBFEC},{0x8FA8, 0xBFEB},{0x8FAD, 0xC3E3},{0x8FAE, 0xC47C},{0x8FAF, 0xC547},{0x8FB0, 0xA8B0},{0x8FB1, 0xB064},
- {0x8FB2, 0xB941},{0x8FB4, 0xF35B},{0x8FBF, 0xCBA6},{0x8FC2, 0xA8B1},{0x8FC4, 0xA8B4},{0x8FC5, 0xA8B3},{0x8FC6, 0xA8B2},{0x8FC9, 0xCBA5},
- {0x8FCB, 0xCDCD},{0x8FCD, 0xCDCF},{0x8FCE, 0xAAEF},{0x8FD1, 0xAAF1},{0x8FD2, 0xCDCC},{0x8FD3, 0xCDCE},{0x8FD4, 0xAAF0},{0x8FD5, 0xCDD1},
- {0x8FD6, 0xCDD0},{0x8FD7, 0xCDD2},{0x8FE0, 0xD0B6},{0x8FE1, 0xD0B4},{0x8FE2, 0xAD7C},{0x8FE3, 0xD0B3},{0x8FE4, 0xADA3},{0x8FE5, 0xAD7E},
- {0x8FE6, 0xAD7B},{0x8FE8, 0xADA4},{0x8FEA, 0xAD7D},{0x8FEB, 0xADA2},{0x8FED, 0xADA1},{0x8FEE, 0xD0B5},{0x8FF0, 0xAD7A},{0x8FF4, 0xB06A},
- {0x8FF5, 0xD3EB},{0x8FF6, 0xD3F1},{0x8FF7, 0xB067},{0x8FF8, 0xB06E},{0x8FFA, 0xB069},{0x8FFB, 0xD3EE},{0x8FFC, 0xD3F0},{0x8FFD, 0xB06C},
- {0x8FFE, 0xD3EA},{0x8FFF, 0xD3ED},{0x9000, 0xB068},{0x9001, 0xB065},{0x9002, 0xD3EC},{0x9003, 0xB06B},{0x9004, 0xD3EF},{0x9005, 0xB06D},
- {0x9006, 0xB066},{0x900B, 0xD7E3},{0x900C, 0xD7E6},{0x900D, 0xB370},{0x900F, 0xB37A},{0x9010, 0xB376},{0x9011, 0xD7E4},{0x9014, 0xB37E},
- {0x9015, 0xB377},{0x9016, 0xB37C},{0x9017, 0xB372},{0x9019, 0xB36F},{0x901A, 0xB371},{0x901B, 0xB37D},{0x901C, 0xD7E5},{0x901D, 0xB375},
- {0x901E, 0xB378},{0x901F, 0xB374},{0x9020, 0xB379},{0x9021, 0xD7E7},{0x9022, 0xB37B},{0x9023, 0xB373},{0x9024, 0xD7E2},{0x902D, 0xDC4D},
- {0x902E, 0xB665},{0x902F, 0xDC4F},{0x9031, 0xB667},{0x9032, 0xB669},{0x9034, 0xDC4E},{0x9035, 0xB666},{0x9036, 0xB66A},{0x9038, 0xB668},
- {0x903C, 0xB947},{0x903D, 0xE0A3},{0x903E, 0xB94F},{0x903F, 0xE07E},{0x9041, 0xB950},{0x9042, 0xB945},{0x9044, 0xE0A1},{0x9047, 0xB94A},
- {0x9049, 0xE0A2},{0x904A, 0xB943},{0x904B, 0xB942},{0x904D, 0xB94D},{0x904E, 0xB94C},{0x904F, 0xB94B},{0x9050, 0xB949},{0x9051, 0xB94E},
- {0x9052, 0xE07D},{0x9053, 0xB944},{0x9054, 0xB946},{0x9055, 0xB948},{0x9058, 0xBBB8},{0x9059, 0xBBBB},{0x905B, 0xBBBF},{0x905C, 0xBBB9},
- {0x905D, 0xBBBE},{0x905E, 0xBBBC},{0x9060, 0xBBB7},{0x9062, 0xBBBD},{0x9063, 0xBBBA},{0x9067, 0xE852},{0x9068, 0xBE43},{0x9069, 0xBE41},
- {0x906B, 0xE853},{0x906D, 0xBE44},{0x906E, 0xBE42},{0x906F, 0xE851},{0x9070, 0xE850},{0x9072, 0xBFF0},{0x9073, 0xE84F},{0x9074, 0xBFEE},
- {0x9075, 0xBFED},{0x9076, 0xEBD0},{0x9077, 0xBE45},{0x9078, 0xBFEF},{0x9079, 0xEBD1},{0x907A, 0xBFF2},{0x907B, 0xEBD2},{0x907C, 0xBFF1},
- {0x907D, 0xC1D8},{0x907E, 0xEEC3},{0x907F, 0xC1D7},{0x9080, 0xC1DC},{0x9081, 0xC1DA},{0x9082, 0xC1DB},{0x9083, 0xC2E3},{0x9084, 0xC1D9},
- {0x9085, 0xEEC2},{0x9086, 0xEBD3},{0x9087, 0xC2E2},{0x9088, 0xC2E4},{0x908A, 0xC3E4},{0x908B, 0xC3E5},{0x908D, 0xF4E0},{0x908F, 0xC5DE},
- {0x9090, 0xC5DD},{0x9091, 0xA8B6},{0x9094, 0xCA55},{0x9095, 0xB06F},{0x9097, 0xCA52},{0x9098, 0xCA53},{0x9099, 0xCA51},{0x909B, 0xCA54},
- {0x909E, 0xCBAA},{0x909F, 0xCBA7},{0x90A0, 0xCBAC},{0x90A1, 0xCBA8},{0x90A2, 0xA8B7},{0x90A3, 0xA8BA},{0x90A5, 0xCBA9},{0x90A6, 0xA8B9},
- {0x90A7, 0xCBAB},{0x90AA, 0xA8B8},{0x90AF, 0xCDD5},{0x90B0, 0xCDD7},{0x90B1, 0xAAF4},{0x90B2, 0xCDD3},{0x90B3, 0xCDD6},{0x90B4, 0xCDD4},
- {0x90B5, 0xAAF2},{0x90B6, 0xAAF5},{0x90B8, 0xAAF3},{0x90BD, 0xD0B8},{0x90BE, 0xD0BC},{0x90BF, 0xD0B9},{0x90C1, 0xADA7},{0x90C3, 0xADA8},
- {0x90C5, 0xD0BB},{0x90C7, 0xD0BD},{0x90C8, 0xD0BF},{0x90CA, 0xADA5},{0x90CB, 0xD0BE},{0x90CE, 0xADA6},{0x90D4, 0xD7EE},{0x90D5, 0xD0BA},
- {0x90D6, 0xD3F2},{0x90D7, 0xD3FB},{0x90D8, 0xD3F9},{0x90D9, 0xD3F4},{0x90DA, 0xD3F5},{0x90DB, 0xD3FA},{0x90DC, 0xD3FC},{0x90DD, 0xB071},
- {0x90DF, 0xD3F7},{0x90E0, 0xD3F3},{0x90E1, 0xB070},{0x90E2, 0xB072},{0x90E3, 0xD3F6},{0x90E4, 0xD3FD},{0x90E5, 0xD3F8},{0x90E8, 0xB3A1},
- {0x90E9, 0xD7F1},{0x90EA, 0xD7E9},{0x90EB, 0xD7EF},{0x90EC, 0xD7F0},{0x90ED, 0xB3A2},{0x90EF, 0xD7E8},{0x90F0, 0xD7EA},{0x90F1, 0xD0B7},
- {0x90F2, 0xD7EC},{0x90F3, 0xD7ED},{0x90F4, 0xD7EB},{0x90F5, 0xB66C},{0x90F9, 0xDC56},{0x90FA, 0xEBD4},{0x90FB, 0xDC57},{0x90FC, 0xDC54},
- {0x90FD, 0xB3A3},{0x90FE, 0xB66E},{0x90FF, 0xDC53},{0x9100, 0xDC59},{0x9101, 0xDC58},{0x9102, 0xB66B},{0x9103, 0xDC5C},{0x9104, 0xDC52},
- {0x9105, 0xDC5B},{0x9106, 0xDC50},{0x9107, 0xDC5A},{0x9108, 0xDC55},{0x9109, 0xB66D},{0x910B, 0xE0AA},{0x910D, 0xE0A5},{0x910E, 0xE0AB},
- {0x910F, 0xE0A6},{0x9110, 0xE0A4},{0x9111, 0xE0A7},{0x9112, 0xB951},{0x9114, 0xE0A9},{0x9116, 0xE0A8},{0x9117, 0xB952},{0x9118, 0xBBC1},
- {0x9119, 0xBBC0},{0x911A, 0xE46E},{0x911B, 0xE471},{0x911C, 0xE469},{0x911D, 0xE46D},{0x911E, 0xBBC2},{0x911F, 0xE46C},{0x9120, 0xE46A},
- {0x9121, 0xE470},{0x9122, 0xE46B},{0x9123, 0xE468},{0x9124, 0xE46F},{0x9126, 0xE859},{0x9127, 0xBE48},{0x9128, 0xF14A},{0x9129, 0xE856},
- {0x912A, 0xE857},{0x912B, 0xE855},{0x912C, 0xDC51},{0x912D, 0xBE47},{0x912E, 0xE85A},{0x912F, 0xE854},{0x9130, 0xBE46},{0x9131, 0xBE49},
- {0x9132, 0xE858},{0x9133, 0xEBD5},{0x9134, 0xBFF3},{0x9135, 0xEBD6},{0x9136, 0xEBD7},{0x9138, 0xEEC4},{0x9139, 0xC1DD},{0x913A, 0xF14B},
- {0x913B, 0xF14C},{0x913E, 0xF14D},{0x913F, 0xF35D},{0x9140, 0xF35C},{0x9141, 0xF4E2},{0x9143, 0xF4E1},{0x9144, 0xF65B},{0x9145, 0xF65C},
- {0x9146, 0xF65A},{0x9147, 0xF766},{0x9148, 0xC5B0},{0x9149, 0xA8BB},{0x914A, 0xADAA},{0x914B, 0xADA9},{0x914C, 0xB075},{0x914D, 0xB074},
- {0x914E, 0xD440},{0x914F, 0xD441},{0x9150, 0xD3FE},{0x9152, 0xB073},{0x9153, 0xD7F5},{0x9155, 0xD7F6},{0x9156, 0xD7F2},{0x9157, 0xB3A4},
- {0x9158, 0xD7F3},{0x915A, 0xD7F4},{0x915F, 0xDC5F},{0x9160, 0xDC61},{0x9161, 0xDC5D},{0x9162, 0xDC60},{0x9163, 0xB66F},{0x9164, 0xDC5E},
- {0x9165, 0xB670},{0x9168, 0xDD73},{0x9169, 0xB955},{0x916A, 0xB954},{0x916C, 0xB953},{0x916E, 0xE0AC},{0x916F, 0xE0AD},{0x9172, 0xE473},
- {0x9173, 0xE475},{0x9174, 0xBBC6},{0x9175, 0xBBC3},{0x9177, 0xBBC5},{0x9178, 0xBBC4},{0x9179, 0xE474},{0x917A, 0xE472},{0x9180, 0xE861},
- {0x9181, 0xE85E},{0x9182, 0xE85F},{0x9183, 0xBE4D},{0x9184, 0xE860},{0x9185, 0xE85B},{0x9186, 0xE85C},{0x9187, 0xBE4A},{0x9189, 0xBE4B},
- {0x918A, 0xE85D},{0x918B, 0xBE4C},{0x918D, 0xEBDB},{0x918F, 0xEBDC},{0x9190, 0xEBD9},{0x9191, 0xEBDA},{0x9192, 0xBFF4},{0x9193, 0xEBD8},
- {0x9199, 0xEEC8},{0x919A, 0xEEC5},{0x919B, 0xEEC7},{0x919C, 0xC1E0},{0x919D, 0xEECB},{0x919E, 0xC1DF},{0x919F, 0xEEC9},{0x91A0, 0xEECC},
- {0x91A1, 0xEECA},{0x91A2, 0xEEC6},{0x91A3, 0xC1DE},{0x91A5, 0xF14F},{0x91A7, 0xF150},{0x91A8, 0xF14E},{0x91AA, 0xF152},{0x91AB, 0xC2E5},
- {0x91AC, 0xC2E6},{0x91AD, 0xF35F},{0x91AE, 0xC3E7},{0x91AF, 0xF151},{0x91B0, 0xF35E},{0x91B1, 0xC3E6},{0x91B2, 0xF4E5},{0x91B3, 0xF4E6},
- {0x91B4, 0xC4BF},{0x91B5, 0xF4E4},{0x91B7, 0xF4E3},{0x91B9, 0xF65D},{0x91BA, 0xC548},{0x91BC, 0xF849},{0x91BD, 0xF8C8},{0x91BE, 0xF8C7},
- {0x91C0, 0xC643},{0x91C1, 0xC65D},{0x91C2, 0xF8C9},{0x91C3, 0xF971},{0x91C5, 0xC66F},{0x91C6, 0xA8BC},{0x91C7, 0xAAF6},{0x91C9, 0xB956},
- {0x91CB, 0xC4C0},{0x91CC, 0xA8BD},{0x91CD, 0xADAB},{0x91CE, 0xB3A5},{0x91CF, 0xB671},{0x91D0, 0xC2E7},{0x91D1, 0xAAF7},{0x91D3, 0xD0C1},
- {0x91D4, 0xD0C0},{0x91D5, 0xD442},{0x91D7, 0xB078},{0x91D8, 0xB076},{0x91D9, 0xB07A},{0x91DA, 0xD444},{0x91DC, 0xB079},{0x91DD, 0xB077},
- {0x91E2, 0xD443},{0x91E3, 0xB3A8},{0x91E4, 0xD7FC},{0x91E6, 0xB3A7},{0x91E7, 0xB3A9},{0x91E8, 0xD842},{0x91E9, 0xB3AB},{0x91EA, 0xD7FE},
- {0x91EB, 0xD840},{0x91EC, 0xD7F7},{0x91ED, 0xB3AA},{0x91EE, 0xD843},{0x91F1, 0xD7F9},{0x91F3, 0xD7FA},{0x91F4, 0xD7F8},{0x91F5, 0xB3A6},
- {0x91F7, 0xD841},{0x91F8, 0xD7FB},{0x91F9, 0xD7FD},{0x91FD, 0xDC6D},{0x91FF, 0xDC6C},{0x9200, 0xDC6A},{0x9201, 0xDC62},{0x9202, 0xDC71},
- {0x9203, 0xDC65},{0x9204, 0xDC6F},{0x9205, 0xDC76},{0x9206, 0xDC6E},{0x9207, 0xB679},{0x9209, 0xB675},{0x920A, 0xDC63},{0x920C, 0xDC69},
- {0x920D, 0xB677},{0x920F, 0xDC68},{0x9210, 0xB678},{0x9211, 0xB67A},{0x9212, 0xDC6B},{0x9214, 0xB672},{0x9215, 0xB673},{0x9216, 0xDC77},
- {0x9217, 0xDC75},{0x9219, 0xDC74},{0x921A, 0xDC66},{0x921C, 0xDC72},{0x921E, 0xB676},{0x9223, 0xB674},{0x9224, 0xDC73},{0x9225, 0xDC64},
- {0x9226, 0xDC67},{0x9227, 0xDC70},{0x922D, 0xE4BA},{0x922E, 0xE0B7},{0x9230, 0xE0B0},{0x9231, 0xE0C3},{0x9232, 0xE0CC},{0x9233, 0xE0B3},
- {0x9234, 0xB961},{0x9236, 0xE0C0},{0x9237, 0xB957},{0x9238, 0xB959},{0x9239, 0xB965},{0x923A, 0xE0B1},{0x923D, 0xB95A},{0x923E, 0xB95C},
- {0x923F, 0xB966},{0x9240, 0xB95B},{0x9245, 0xB964},{0x9246, 0xE0B9},{0x9248, 0xE0AE},{0x9249, 0xB962},{0x924A, 0xE0B8},{0x924B, 0xB95E},
- {0x924C, 0xE0CA},{0x924D, 0xB963},{0x924E, 0xE0C8},{0x924F, 0xE0BC},{0x9250, 0xE0C6},{0x9251, 0xB960},{0x9252, 0xE0AF},{0x9253, 0xE0C9},
- {0x9254, 0xE0C4},{0x9256, 0xE0CB},{0x9257, 0xB958},{0x925A, 0xB967},{0x925B, 0xB95D},{0x925E, 0xE0B5},{0x9260, 0xE0BD},{0x9261, 0xE0C1},
- {0x9263, 0xE0C5},{0x9264, 0xB95F},{0x9265, 0xE0B4},{0x9266, 0xE0B2},{0x9267, 0xE0BE},{0x926C, 0xE0BB},{0x926D, 0xE0BA},{0x926F, 0xE0BF},
- {0x9270, 0xE0C2},{0x9272, 0xE0C7},{0x9276, 0xE478},{0x9278, 0xBBC7},{0x9279, 0xE4A4},{0x927A, 0xE47A},{0x927B, 0xBBCC},{0x927C, 0xBBD0},
- {0x927D, 0xE4AD},{0x927E, 0xE4B5},{0x927F, 0xE4A6},{0x9280, 0xBBC8},{0x9282, 0xE4AA},{0x9283, 0xE0B6},{0x9285, 0xBBC9},{0x9286, 0xE4B1},
- {0x9287, 0xE4B6},{0x9288, 0xE4AE},{0x928A, 0xE4B0},{0x928B, 0xE4B9},{0x928C, 0xE4B2},{0x928D, 0xE47E},{0x928E, 0xE4A9},{0x9291, 0xBBD1},
- {0x9293, 0xBBCD},{0x9294, 0xE47C},{0x9295, 0xE4AB},{0x9296, 0xBBCB},{0x9297, 0xE4A5},{0x9298, 0xBBCA},{0x9299, 0xE4B3},{0x929A, 0xE4A2},
- {0x929B, 0xE479},{0x929C, 0xBBCE},{0x929D, 0xE4B8},{0x92A0, 0xE47B},{0x92A1, 0xE4AF},{0x92A2, 0xE4AC},{0x92A3, 0xE4A7},{0x92A4, 0xE477},
- {0x92A5, 0xE476},{0x92A6, 0xE4A1},{0x92A7, 0xE4B4},{0x92A8, 0xBBCF},{0x92A9, 0xE4B7},{0x92AA, 0xE47D},{0x92AB, 0xE4A3},{0x92AC, 0xBE52},
- {0x92B2, 0xBE5A},{0x92B3, 0xBE55},{0x92B4, 0xE8A4},{0x92B5, 0xE8A1},{0x92B6, 0xE867},{0x92B7, 0xBE50},{0x92BB, 0xBE4F},{0x92BC, 0xBE56},
- {0x92C0, 0xE865},{0x92C1, 0xBE54},{0x92C2, 0xE871},{0x92C3, 0xE863},{0x92C4, 0xE864},{0x92C5, 0xBE4E},{0x92C6, 0xE8A3},{0x92C7, 0xBE58},
- {0x92C8, 0xE874},{0x92C9, 0xE879},{0x92CA, 0xE873},{0x92CB, 0xEBEE},{0x92CC, 0xE86F},{0x92CD, 0xE877},{0x92CE, 0xE875},{0x92CF, 0xE868},
- {0x92D0, 0xE862},{0x92D1, 0xE87D},{0x92D2, 0xBE57},{0x92D3, 0xE87E},{0x92D5, 0xE878},{0x92D7, 0xE86D},{0x92D8, 0xE86B},{0x92D9, 0xE866},
- {0x92DD, 0xE86E},{0x92DE, 0xE87B},{0x92DF, 0xE86A},{0x92E0, 0xE87A},{0x92E1, 0xE8A2},{0x92E4, 0xBE53},{0x92E6, 0xE876},{0x92E7, 0xE87C},
- {0x92E8, 0xE872},{0x92E9, 0xE86C},{0x92EA, 0xBE51},{0x92EE, 0xE4A8},{0x92EF, 0xE870},{0x92F0, 0xBE59},{0x92F1, 0xE869},{0x92F7, 0xEBF4},
- {0x92F8, 0xBFF7},{0x92F9, 0xEBF3},{0x92FA, 0xEBF0},{0x92FB, 0xEC44},{0x92FC, 0xBFFB},{0x92FE, 0xEC41},{0x92FF, 0xEBF8},{0x9300, 0xEC43},
- {0x9301, 0xEBE9},{0x9302, 0xEBF6},{0x9304, 0xBFFD},{0x9306, 0xEBE1},{0x9308, 0xEBDF},{0x9309, 0xEC42},{0x930B, 0xEC40},{0x930C, 0xEBFE},
- {0x930D, 0xEBED},{0x930E, 0xEBEC},{0x930F, 0xEBE2},{0x9310, 0xC040},{0x9312, 0xEBE8},{0x9313, 0xEBF2},{0x9314, 0xEBFD},{0x9315, 0xC043},
- {0x9316, 0xEC45},{0x9318, 0xC1E8},{0x9319, 0xC045},{0x931A, 0xBFFE},{0x931B, 0xEBE6},{0x931D, 0xEBEF},{0x931E, 0xEBDE},{0x931F, 0xEBE0},
- {0x9320, 0xBFF5},{0x9321, 0xC042},{0x9322, 0xBFFA},{0x9323, 0xEBE7},{0x9324, 0xEBF7},{0x9325, 0xEBF1},{0x9326, 0xC041},{0x9327, 0xEBDD},
- {0x9328, 0xC1E3},{0x9329, 0xEBF9},{0x932A, 0xEBFC},{0x932B, 0xBFFC},{0x932D, 0xEBEB},{0x932E, 0xC044},{0x932F, 0xBFF9},{0x9333, 0xBFF8},
- {0x9334, 0xEBF5},{0x9335, 0xEBFB},{0x9336, 0xBFF6},{0x9338, 0xEBE4},{0x9339, 0xEBFA},{0x933C, 0xEBE5},{0x9346, 0xEBEA},{0x9347, 0xEED2},
- {0x9349, 0xEED7},{0x934A, 0xC1E5},{0x934B, 0xC1E7},{0x934C, 0xEEDD},{0x934D, 0xC1E1},{0x934E, 0xEEEC},{0x934F, 0xEEE3},{0x9350, 0xEED8},
- {0x9351, 0xEED9},{0x9352, 0xEEE2},{0x9354, 0xC1EE},{0x9355, 0xEEE1},{0x9356, 0xEED1},{0x9357, 0xEEE0},{0x9358, 0xEED4},{0x9359, 0xEEED},
- {0x935A, 0xC1ED},{0x935B, 0xC1EB},{0x935C, 0xEED5},{0x935E, 0xEEE8},{0x9360, 0xEEDA},{0x9361, 0xEEE7},{0x9363, 0xEEE9},{0x9364, 0xEED0},
- {0x9365, 0xC1E6},{0x9367, 0xEEEA},{0x936A, 0xEEDE},{0x936C, 0xC1EA},{0x936D, 0xEEDB},{0x9370, 0xC1EC},{0x9371, 0xEEE4},{0x9375, 0xC1E4},
- {0x9376, 0xEED6},{0x9377, 0xEEE5},{0x9379, 0xEEDF},{0x937A, 0xEBE3},{0x937B, 0xEEE6},{0x937C, 0xEED3},{0x937E, 0xC1E9},{0x9380, 0xEEEB},
- {0x9382, 0xC1E2},{0x9383, 0xEECE},{0x9388, 0xF160},{0x9389, 0xF159},{0x938A, 0xC2E9},{0x938C, 0xF154},{0x938D, 0xF163},{0x938E, 0xF15B},
- {0x938F, 0xEEDC},{0x9391, 0xF165},{0x9392, 0xF155},{0x9394, 0xC2E8},{0x9395, 0xF15F},{0x9396, 0xC2EA},{0x9397, 0xC2F2},{0x9398, 0xC2F0},
- {0x9399, 0xF161},{0x939A, 0xC2F1},{0x939B, 0xF157},{0x939D, 0xF158},{0x939E, 0xF15D},{0x939F, 0xF162},{0x93A1, 0xEECD},{0x93A2, 0xC2EB},
- {0x93A3, 0xF16A},{0x93A4, 0xF167},{0x93A5, 0xF16B},{0x93A6, 0xF15E},{0x93A7, 0xF15A},{0x93A8, 0xF168},{0x93A9, 0xF36A},{0x93AA, 0xF15C},
- {0x93AC, 0xC2EE},{0x93AE, 0xC2ED},{0x93AF, 0xEECF},{0x93B0, 0xC2EF},{0x93B1, 0xF164},{0x93B2, 0xF166},{0x93B3, 0xC2EC},{0x93B4, 0xF169},
- {0x93B5, 0xF153},{0x93B7, 0xF156},{0x93C0, 0xF373},{0x93C2, 0xF363},{0x93C3, 0xC3EB},{0x93C4, 0xF371},{0x93C7, 0xF361},{0x93C8, 0xC3EC},
- {0x93CA, 0xF36C},{0x93CC, 0xF368},{0x93CD, 0xC3F1},{0x93CE, 0xF372},{0x93CF, 0xF362},{0x93D0, 0xF365},{0x93D1, 0xC3E9},{0x93D2, 0xF374},
- {0x93D4, 0xF36D},{0x93D5, 0xF370},{0x93D6, 0xC3EF},{0x93D7, 0xC3F4},{0x93D8, 0xC3F2},{0x93D9, 0xF369},{0x93DA, 0xF364},{0x93DC, 0xC3ED},
- {0x93DD, 0xC3EE},{0x93DE, 0xF360},{0x93DF, 0xC3EA},{0x93E1, 0xC3E8},{0x93E2, 0xC3F0},{0x93E3, 0xF36F},{0x93E4, 0xC3F3},{0x93E6, 0xF36B},
- {0x93E7, 0xF375},{0x93E8, 0xC3F5},{0x93EC, 0xF367},{0x93EE, 0xF36E},{0x93F5, 0xF4F3},{0x93F6, 0xF542},{0x93F7, 0xF4F5},{0x93F8, 0xF4FC},
- {0x93F9, 0xF366},{0x93FA, 0xF4FA},{0x93FB, 0xF4E9},{0x93FC, 0xF540},{0x93FD, 0xC4C3},{0x93FE, 0xF4ED},{0x93FF, 0xF4FE},{0x9400, 0xF4F4},
- {0x9403, 0xC4C2},{0x9406, 0xF544},{0x9407, 0xF4F6},{0x9409, 0xF4FB},{0x940A, 0xF4FD},{0x940B, 0xF4E7},{0x940C, 0xF541},{0x940D, 0xF4F2},
- {0x940E, 0xF4F7},{0x940F, 0xF4EB},{0x9410, 0xF4EF},{0x9411, 0xF543},{0x9412, 0xF4F9},{0x9413, 0xF4E8},{0x9414, 0xF4EC},{0x9415, 0xF4EE},
- {0x9416, 0xF4F8},{0x9418, 0xC4C1},{0x9419, 0xF4F1},{0x9420, 0xF4EA},{0x9428, 0xF4F0},{0x9429, 0xF661},{0x942A, 0xF666},{0x942B, 0xC54F},
- {0x942C, 0xF668},{0x942E, 0xC549},{0x9430, 0xF664},{0x9431, 0xF66A},{0x9432, 0xC54E},{0x9433, 0xC54A},{0x9435, 0xC54B},{0x9436, 0xF660},
- {0x9437, 0xF667},{0x9438, 0xC54D},{0x9439, 0xF665},{0x943A, 0xC54C},{0x943B, 0xF65F},{0x943C, 0xF663},{0x943D, 0xF662},{0x943F, 0xF65E},
- {0x9440, 0xF669},{0x9444, 0xC5B1},{0x9445, 0xF76D},{0x9446, 0xF770},{0x9447, 0xF76C},{0x9448, 0xF76E},{0x9449, 0xF76F},{0x944A, 0xF769},
- {0x944B, 0xF76A},{0x944C, 0xF767},{0x944F, 0xF76B},{0x9450, 0xF768},{0x9451, 0xC5B2},{0x9452, 0xC5B3},{0x9455, 0xF84B},{0x9457, 0xF84D},
- {0x945D, 0xF84C},{0x945E, 0xF84E},{0x9460, 0xC5E0},{0x9462, 0xF84A},{0x9463, 0xC5DF},{0x9464, 0xC5E1},{0x9468, 0xF8CB},{0x9469, 0xF8CC},
- {0x946A, 0xC644},{0x946B, 0xF8CA},{0x946D, 0xF953},{0x946E, 0xF952},{0x946F, 0xF954},{0x9470, 0xC65F},{0x9471, 0xF955},{0x9472, 0xC65E},
- {0x9473, 0xF956},{0x9474, 0xF972},{0x9475, 0xF975},{0x9476, 0xF974},{0x9477, 0xC668},{0x9478, 0xF973},{0x947C, 0xC672},{0x947D, 0xC670},
- {0x947E, 0xC671},{0x947F, 0xC677},{0x9480, 0xF9C0},{0x9481, 0xF9C1},{0x9482, 0xF9BF},{0x9483, 0xF9C9},{0x9577, 0xAAF8},{0x957A, 0xD844},
- {0x957B, 0xDC78},{0x957C, 0xE8A5},{0x957D, 0xF376},{0x9580, 0xAAF9},{0x9582, 0xADAC},{0x9583, 0xB07B},{0x9586, 0xD845},{0x9588, 0xD846},
- {0x9589, 0xB3AC},{0x958B, 0xB67D},{0x958C, 0xDC7A},{0x958D, 0xDC79},{0x958E, 0xB6A3},{0x958F, 0xB67C},{0x9590, 0xDC7B},{0x9591, 0xB67E},
- {0x9592, 0xB6A2},{0x9593, 0xB6A1},{0x9594, 0xB67B},{0x9598, 0xB968},{0x959B, 0xE0D0},{0x959C, 0xE0CE},{0x959E, 0xE0CF},{0x959F, 0xE0CD},
- {0x95A1, 0xBBD2},{0x95A3, 0xBBD5},{0x95A4, 0xBBD7},{0x95A5, 0xBBD6},{0x95A8, 0xBBD3},{0x95A9, 0xBBD4},{0x95AB, 0xE8A7},{0x95AC, 0xE8A6},
- {0x95AD, 0xBE5B},{0x95AE, 0xE8A8},{0x95B0, 0xE8A9},{0x95B1, 0xBE5C},{0x95B5, 0xEC4D},{0x95B6, 0xEC4B},{0x95B7, 0xEEF3},{0x95B9, 0xEC49},
- {0x95BA, 0xEC4A},{0x95BB, 0xC046},{0x95BC, 0xEC46},{0x95BD, 0xEC4E},{0x95BE, 0xEC48},{0x95BF, 0xEC4C},{0x95C0, 0xEEEF},{0x95C3, 0xEEF1},
- {0x95C5, 0xEEF2},{0x95C6, 0xC1F3},{0x95C7, 0xEEEE},{0x95C8, 0xC1F2},{0x95C9, 0xEEF0},{0x95CA, 0xC1EF},{0x95CB, 0xC1F0},{0x95CC, 0xC1F1},
- {0x95CD, 0xEC47},{0x95D0, 0xC2F5},{0x95D1, 0xF16E},{0x95D2, 0xF16C},{0x95D3, 0xF16D},{0x95D4, 0xC2F3},{0x95D5, 0xC2F6},{0x95D6, 0xC2F4},
- {0x95DA, 0xF377},{0x95DB, 0xF378},{0x95DC, 0xC3F6},{0x95DE, 0xF545},{0x95DF, 0xF547},{0x95E0, 0xF546},{0x95E1, 0xC4C4},{0x95E2, 0xC550},
- {0x95E3, 0xF66D},{0x95E4, 0xF66C},{0x95E5, 0xF66B},{0x961C, 0xAAFA},{0x961E, 0xC9AA},{0x9620, 0xCA58},{0x9621, 0xA6E9},{0x9622, 0xCA56},
- {0x9623, 0xCA59},{0x9624, 0xCA57},{0x9628, 0xCBAE},{0x962A, 0xA8C1},{0x962C, 0xA8C2},{0x962D, 0xCBB0},{0x962E, 0xA8BF},{0x962F, 0xCBAF},
- {0x9630, 0xCBAD},{0x9631, 0xA8C0},{0x9632, 0xA8BE},{0x9639, 0xCDD8},{0x963A, 0xCDDB},{0x963B, 0xAAFD},{0x963C, 0xCDDA},{0x963D, 0xCDD9},
- {0x963F, 0xAAFC},{0x9640, 0xAAFB},{0x9642, 0xAB40},{0x9643, 0xCDDC},{0x9644, 0xAAFE},{0x964A, 0xD0C6},{0x964B, 0xADAE},{0x964C, 0xADAF},
- {0x964D, 0xADB0},{0x964E, 0xD0C7},{0x964F, 0xD0C3},{0x9650, 0xADAD},{0x9651, 0xD0C4},{0x9653, 0xD0C5},{0x9654, 0xD0C2},{0x9658, 0xB0A4},
- {0x965B, 0xB0A1},{0x965C, 0xD445},{0x965D, 0xB0A2},{0x965E, 0xB0A5},{0x965F, 0xD446},{0x9661, 0xB07E},{0x9662, 0xB07C},{0x9663, 0xB07D},
- {0x9664, 0xB0A3},{0x966A, 0xB3AD},{0x966B, 0xD849},{0x966C, 0xB3B5},{0x966D, 0xD848},{0x966F, 0xD84B},{0x9670, 0xB3B1},{0x9671, 0xD84A},
- {0x9672, 0xB6AB},{0x9673, 0xB3AF},{0x9674, 0xB3B2},{0x9675, 0xB3AE},{0x9676, 0xB3B3},{0x9677, 0xB3B4},{0x9678, 0xB3B0},{0x967C, 0xD847},
- {0x967D, 0xB6A7},{0x967E, 0xDC7D},{0x9680, 0xDCA3},{0x9683, 0xDCA2},{0x9684, 0xB6AC},{0x9685, 0xB6A8},{0x9686, 0xB6A9},{0x9687, 0xDC7C},
- {0x9688, 0xDC7E},{0x9689, 0xDCA1},{0x968A, 0xB6A4},{0x968B, 0xB6A6},{0x968D, 0xB6AA},{0x968E, 0xB6A5},{0x9691, 0xE0D3},{0x9692, 0xE0D1},
- {0x9693, 0xE0D2},{0x9694, 0xB96A},{0x9695, 0xB96B},{0x9697, 0xE0D4},{0x9698, 0xB969},{0x9699, 0xBBD8},{0x969B, 0xBBDA},{0x969C, 0xBBD9},
- {0x969E, 0xE4BB},{0x96A1, 0xE4BC},{0x96A2, 0xE8AB},{0x96A4, 0xE8AA},{0x96A7, 0xC047},{0x96A8, 0xC048},{0x96A9, 0xEC4F},{0x96AA, 0xC049},
- {0x96AC, 0xEEF6},{0x96AE, 0xEEF4},{0x96B0, 0xEEF5},{0x96B1, 0xC1F4},{0x96B3, 0xF16F},{0x96B4, 0xC3F7},{0x96B8, 0xC1F5},{0x96B9, 0xAB41},
- {0x96BB, 0xB0A6},{0x96BC, 0xD447},{0x96BF, 0xD84C},{0x96C0, 0xB3B6},{0x96C1, 0xB6AD},{0x96C2, 0xDCA4},{0x96C3, 0xDCA6},{0x96C4, 0xB6AF},
- {0x96C5, 0xB6AE},{0x96C6, 0xB6B0},{0x96C7, 0xB6B1},{0x96C8, 0xDCA5},{0x96C9, 0xB96E},{0x96CA, 0xB96F},{0x96CB, 0xB96D},{0x96CC, 0xBBDB},
- {0x96CD, 0xB96C},{0x96CE, 0xE0D5},{0x96D2, 0xBBDC},{0x96D3, 0xE8AC},{0x96D4, 0xEC50},{0x96D5, 0xC04A},{0x96D6, 0xC1F6},{0x96D7, 0xF170},
- {0x96D8, 0xF174},{0x96D9, 0xC2F9},{0x96DA, 0xF171},{0x96DB, 0xC2FA},{0x96DC, 0xC2F8},{0x96DD, 0xF175},{0x96DE, 0xC2FB},{0x96DF, 0xF173},
- {0x96E1, 0xF379},{0x96E2, 0xC2F7},{0x96E3, 0xC3F8},{0x96E5, 0xF8CD},{0x96E8, 0xAB42},{0x96E9, 0xB3B8},{0x96EA, 0xB3B7},{0x96EF, 0xB6B2},
- {0x96F0, 0xDCA8},{0x96F1, 0xDCA7},{0x96F2, 0xB6B3},{0x96F5, 0xE0D9},{0x96F6, 0xB973},{0x96F7, 0xB970},{0x96F8, 0xE0D8},{0x96F9, 0xB972},
- {0x96FA, 0xE0D6},{0x96FB, 0xB971},{0x96FD, 0xE0D7},{0x96FF, 0xE4BD},{0x9700, 0xBBDD},{0x9702, 0xE8AF},{0x9704, 0xBE5D},{0x9705, 0xE8AD},
- {0x9706, 0xBE5E},{0x9707, 0xBE5F},{0x9708, 0xE8AE},{0x9709, 0xBE60},{0x970B, 0xEC51},{0x970D, 0xC04E},{0x970E, 0xC04B},{0x970F, 0xC050},
- {0x9710, 0xEC53},{0x9711, 0xC04C},{0x9712, 0xEC52},{0x9713, 0xC04F},{0x9716, 0xC04D},{0x9718, 0xEEF9},{0x9719, 0xEEFB},{0x971C, 0xC1F7},
- {0x971D, 0xEEFA},{0x971E, 0xC1F8},{0x971F, 0xEEF8},{0x9720, 0xEEF7},{0x9722, 0xF177},{0x9723, 0xF176},{0x9724, 0xC2FC},{0x9725, 0xF178},
- {0x9726, 0xF37E},{0x9727, 0xC3FA},{0x9728, 0xF37D},{0x9729, 0xF37A},{0x972A, 0xC3F9},{0x972B, 0xF37B},{0x972C, 0xF37C},{0x972E, 0xF548},
- {0x972F, 0xF549},{0x9730, 0xC4C5},{0x9732, 0xC553},{0x9735, 0xF66E},{0x9738, 0xC551},{0x9739, 0xC552},{0x973A, 0xF66F},{0x973D, 0xC5B4},
- {0x973E, 0xC5B5},{0x973F, 0xF771},{0x9742, 0xC645},{0x9743, 0xF8CF},{0x9744, 0xC647},{0x9746, 0xF8CE},{0x9747, 0xF8D0},{0x9748, 0xC646},
- {0x9749, 0xF957},{0x974B, 0xF9AD},{0x9752, 0xAB43},{0x9756, 0xB974},{0x9758, 0xE4BE},{0x975A, 0xE8B0},{0x975B, 0xC051},{0x975C, 0xC052},
- {0x975E, 0xAB44},{0x9760, 0xBE61},{0x9761, 0xC3FB},{0x9762, 0xADB1},{0x9766, 0xC053},{0x9768, 0xC5E2},{0x9769, 0xADB2},{0x976A, 0xD84D},
- {0x976C, 0xDCA9},{0x976E, 0xDCAB},{0x9770, 0xDCAA},{0x9772, 0xE0DD},{0x9773, 0xE0DA},{0x9774, 0xB975},{0x9776, 0xB976},{0x9777, 0xE0DB},
- {0x9778, 0xE0DC},{0x977A, 0xE4C0},{0x977B, 0xE4C5},{0x977C, 0xBBDE},{0x977D, 0xE4BF},{0x977E, 0xE4C1},{0x977F, 0xE4C8},{0x9780, 0xE4C3},
- {0x9781, 0xE4C7},{0x9782, 0xE4C4},{0x9783, 0xE4C2},{0x9784, 0xE4C6},{0x9785, 0xBBDF},{0x9788, 0xE8B3},{0x978A, 0xE8B1},{0x978B, 0xBE63},
- {0x978D, 0xBE62},{0x978E, 0xE8B2},{0x978F, 0xBE64},{0x9794, 0xEC56},{0x9797, 0xEC55},{0x9798, 0xC054},{0x9799, 0xEC54},{0x979A, 0xEEFC},
- {0x979C, 0xEEFE},{0x979D, 0xEF41},{0x979E, 0xEF40},{0x97A0, 0xC1F9},{0x97A1, 0xEEFD},{0x97A2, 0xF1A1},{0x97A3, 0xC2FD},{0x97A4, 0xF17D},
- {0x97A5, 0xF1A2},{0x97A6, 0xC2FE},{0x97A8, 0xF17B},{0x97AA, 0xF17E},{0x97AB, 0xF17C},{0x97AC, 0xF179},{0x97AD, 0xC340},{0x97AE, 0xF17A},
- {0x97B3, 0xF3A1},{0x97B6, 0xF3A3},{0x97B7, 0xF3A2},{0x97B9, 0xF54A},{0x97BB, 0xF54B},{0x97BF, 0xF670},{0x97C1, 0xC5B7},{0x97C3, 0xC5B6},
- {0x97C4, 0xF84F},{0x97C5, 0xF850},{0x97C6, 0xC648},{0x97C7, 0xF8D1},{0x97C9, 0xC669},{0x97CB, 0xADB3},{0x97CC, 0xB6B4},{0x97CD, 0xE4CA},
- {0x97CE, 0xE4C9},{0x97CF, 0xE8B5},{0x97D0, 0xE8B4},{0x97D3, 0xC1FA},{0x97D4, 0xEF43},{0x97D5, 0xEF42},{0x97D6, 0xF1A5},{0x97D7, 0xF1A3},
- {0x97D8, 0xF1A6},{0x97D9, 0xF1A4},{0x97DC, 0xC3FC},{0x97DD, 0xF3A4},{0x97DE, 0xF3A5},{0x97DF, 0xF3A6},{0x97E1, 0xF671},{0x97E3, 0xF772},
- {0x97E5, 0xF8D2},{0x97ED, 0xADB4},{0x97F0, 0xEC57},{0x97F1, 0xEF44},{0x97F3, 0xADB5},{0x97F6, 0xBBE0},{0x97F8, 0xEC58},{0x97F9, 0xC341},
- {0x97FA, 0xF1A7},{0x97FB, 0xC3FD},{0x97FD, 0xF54C},{0x97FE, 0xF54D},{0x97FF, 0xC554},{0x9800, 0xF851},{0x9801, 0xADB6},{0x9802, 0xB3BB},
- {0x9803, 0xB3BC},{0x9804, 0xD84E},{0x9805, 0xB6B5},{0x9806, 0xB6B6},{0x9807, 0xDCAC},{0x9808, 0xB6B7},{0x980A, 0xB97A},{0x980C, 0xB97C},
- {0x980D, 0xE0DF},{0x980E, 0xE0E0},{0x980F, 0xE0DE},{0x9810, 0xB977},{0x9811, 0xB978},{0x9812, 0xB97B},{0x9813, 0xB979},{0x9816, 0xE4CB},
- {0x9817, 0xBBE1},{0x9818, 0xBBE2},{0x981B, 0xE8BC},{0x981C, 0xBE67},{0x981D, 0xE8B7},{0x981E, 0xE8B6},{0x9820, 0xE8BB},{0x9821, 0xBE65},
- {0x9824, 0xC05B},{0x9826, 0xE8B8},{0x9827, 0xE8BD},{0x9828, 0xE8BA},{0x9829, 0xE8B9},{0x982B, 0xBE66},{0x982D, 0xC059},{0x982F, 0xEC5A},
- {0x9830, 0xC055},{0x9832, 0xEC5B},{0x9835, 0xEC59},{0x9837, 0xC058},{0x9838, 0xC056},{0x9839, 0xC05A},{0x983B, 0xC057},{0x9841, 0xEF45},
- {0x9843, 0xEF4A},{0x9844, 0xEF46},{0x9845, 0xEF49},{0x9846, 0xC1FB},{0x9848, 0xEDD4},{0x9849, 0xEF48},{0x984A, 0xEF47},{0x984C, 0xC344},
- {0x984D, 0xC342},{0x984E, 0xC345},{0x984F, 0xC343},{0x9850, 0xF1A8},{0x9851, 0xF1A9},{0x9852, 0xF1AA},{0x9853, 0xC346},{0x9857, 0xF3AA},
- {0x9858, 0xC440},{0x9859, 0xF3A8},{0x985B, 0xC441},{0x985C, 0xF3A7},{0x985D, 0xF3A9},{0x985E, 0xC3FE},{0x985F, 0xF551},{0x9860, 0xF54E},
- {0x9862, 0xF54F},{0x9863, 0xF550},{0x9864, 0xF672},{0x9865, 0xC556},{0x9867, 0xC555},{0x9869, 0xF774},{0x986A, 0xF773},{0x986B, 0xC5B8},
- {0x986F, 0xC5E3},{0x9870, 0xC649},{0x9871, 0xC660},{0x9872, 0xF958},{0x9873, 0xF9AE},{0x9874, 0xF9AF},{0x98A8, 0xADB7},{0x98A9, 0xDCAD},
- {0x98AC, 0xE0E1},{0x98AD, 0xE4CC},{0x98AE, 0xE4CD},{0x98AF, 0xBBE3},{0x98B1, 0xBBE4},{0x98B2, 0xE8BE},{0x98B3, 0xBE68},{0x98B6, 0xC1FC},
- {0x98B8, 0xF1AB},{0x98BA, 0xC347},{0x98BB, 0xF3AD},{0x98BC, 0xC442},{0x98BD, 0xF3AC},{0x98BE, 0xF3AE},{0x98BF, 0xF3AB},{0x98C0, 0xF675},
- {0x98C1, 0xF552},{0x98C2, 0xF553},{0x98C4, 0xC4C6},{0x98C6, 0xF674},{0x98C9, 0xF673},{0x98CB, 0xF775},{0x98CC, 0xF9B0},{0x98DB, 0xADB8},
- {0x98DF, 0xADB9},{0x98E2, 0xB0A7},{0x98E3, 0xD448},{0x98E5, 0xD84F},{0x98E7, 0xB6B8},{0x98E9, 0xB6BB},{0x98EA, 0xB6B9},{0x98EB, 0xDCAE},
- {0x98ED, 0xB6BD},{0x98EF, 0xB6BA},{0x98F2, 0xB6BC},{0x98F4, 0xB97E},{0x98F6, 0xE0E2},{0x98F9, 0xE0E3},{0x98FA, 0xE8C0},{0x98FC, 0xB97D},
- {0x98FD, 0xB9A1},{0x98FE, 0xB9A2},{0x9900, 0xE4CF},{0x9902, 0xE4CE},{0x9903, 0xBBE5},{0x9905, 0xBBE6},{0x9907, 0xE4D0},{0x9908, 0xE8BF},
- {0x9909, 0xBBE8},{0x990A, 0xBE69},{0x990C, 0xBBE7},{0x9910, 0xC05C},{0x9911, 0xE8C1},{0x9912, 0xBE6B},{0x9913, 0xBE6A},{0x9914, 0xE8C2},
- {0x9915, 0xE8C5},{0x9916, 0xE8C3},{0x9917, 0xE8C4},{0x9918, 0xBE6C},{0x991A, 0xC061},{0x991B, 0xC05F},{0x991E, 0xC05E},{0x991F, 0xEC5D},
- {0x9921, 0xC060},{0x9924, 0xEC5C},{0x9925, 0xEF4B},{0x9927, 0xEC5E},{0x9928, 0xC05D},{0x9929, 0xEC5F},{0x992A, 0xEF4E},{0x992B, 0xEF4C},
- {0x992C, 0xEF4D},{0x992D, 0xEF52},{0x992E, 0xC34B},{0x992F, 0xEF51},{0x9930, 0xEF54},{0x9931, 0xEF53},{0x9932, 0xEF50},{0x9933, 0xEF4F},
- {0x9935, 0xC1FD},{0x993A, 0xF1AE},{0x993C, 0xF1AD},{0x993D, 0xC34A},{0x993E, 0xC348},{0x993F, 0xC349},{0x9941, 0xF1AC},{0x9943, 0xF3B1},
- {0x9945, 0xC443},{0x9947, 0xF3B0},{0x9948, 0xF3AF},{0x9949, 0xC444},{0x994B, 0xF558},{0x994C, 0xF557},{0x994E, 0xF555},{0x9950, 0xF554},
- {0x9951, 0xC4C8},{0x9952, 0xC4C7},{0x9953, 0xF559},{0x9954, 0xF776},{0x9955, 0xC5B9},{0x9956, 0xF677},{0x9957, 0xC557},{0x9958, 0xF676},
- {0x9959, 0xF556},{0x995B, 0xF777},{0x995C, 0xC5E4},{0x995E, 0xC661},{0x995F, 0xF959},{0x9961, 0xF9B1},{0x9996, 0xADBA},{0x9997, 0xD850},
- {0x9998, 0xEF55},{0x9999, 0xADBB},{0x999C, 0xE4D2},{0x999D, 0xE4D1},{0x999E, 0xEC60},{0x99A1, 0xEF57},{0x99A3, 0xEF56},{0x99A5, 0xC34C},
- {0x99A6, 0xF3B2},{0x99A7, 0xF3B3},{0x99A8, 0xC4C9},{0x99AB, 0xF9B2},{0x99AC, 0xB0A8},{0x99AD, 0xB6BF},{0x99AE, 0xB6BE},{0x99AF, 0xE0E4},
- {0x99B0, 0xE0E6},{0x99B1, 0xB9A4},{0x99B2, 0xE0E5},{0x99B3, 0xB9A3},{0x99B4, 0xB9A5},{0x99B5, 0xE0E7},{0x99B9, 0xE4D4},{0x99BA, 0xE4D6},
- {0x99BB, 0xE4D5},{0x99BD, 0xE4D8},{0x99C1, 0xBBE9},{0x99C2, 0xE4D7},{0x99C3, 0xE4D3},{0x99C7, 0xE4D9},{0x99C9, 0xE8CC},{0x99CB, 0xE8CF},
- {0x99CC, 0xE8D1},{0x99CD, 0xE8C7},{0x99CE, 0xE8CB},{0x99CF, 0xE8C8},{0x99D0, 0xBE6E},{0x99D1, 0xBE71},{0x99D2, 0xBE73},{0x99D3, 0xE8C9},
- {0x99D4, 0xE8CA},{0x99D5, 0xBE72},{0x99D6, 0xE8CD},{0x99D7, 0xE8D0},{0x99D8, 0xE8CE},{0x99D9, 0xBE74},{0x99DB, 0xBE70},{0x99DC, 0xE8C6},
- {0x99DD, 0xBE6D},{0x99DF, 0xBE6F},{0x99E2, 0xC063},{0x99E3, 0xEC66},{0x99E4, 0xEC64},{0x99E5, 0xEC63},{0x99E7, 0xEC69},{0x99E9, 0xEC68},
- {0x99EA, 0xEC67},{0x99EC, 0xEC62},{0x99ED, 0xC062},{0x99EE, 0xEC61},{0x99F0, 0xEC65},{0x99F1, 0xC064},{0x99F4, 0xEF5A},{0x99F6, 0xEF5E},
- {0x99F7, 0xEF5B},{0x99F8, 0xEF5D},{0x99F9, 0xEF5C},{0x99FA, 0xEF59},{0x99FB, 0xEF5F},{0x99FC, 0xEF62},{0x99FD, 0xEF60},{0x99FE, 0xEF61},
- {0x99FF, 0xC240},{0x9A01, 0xC1FE},{0x9A02, 0xEF58},{0x9A03, 0xEF63},{0x9A04, 0xF1B3},{0x9A05, 0xF1B6},{0x9A06, 0xF1B8},{0x9A07, 0xF1B7},
- {0x9A09, 0xF1B1},{0x9A0A, 0xF1B5},{0x9A0B, 0xF1B0},{0x9A0D, 0xF1B2},{0x9A0E, 0xC34D},{0x9A0F, 0xF1AF},{0x9A11, 0xF1B4},{0x9A14, 0xF3C0},
- {0x9A15, 0xF3B5},{0x9A16, 0xC445},{0x9A19, 0xC446},{0x9A1A, 0xF3B4},{0x9A1B, 0xF3B9},{0x9A1C, 0xF3BF},{0x9A1D, 0xF3B7},{0x9A1E, 0xF3BE},
- {0x9A20, 0xF3BB},{0x9A22, 0xF3BA},{0x9A23, 0xF3BD},{0x9A24, 0xF3B8},{0x9A25, 0xF3B6},{0x9A27, 0xF3BC},{0x9A29, 0xF560},{0x9A2A, 0xF55E},
- {0x9A2B, 0xC4CA},{0x9A2C, 0xF55D},{0x9A2D, 0xF563},{0x9A2E, 0xF561},{0x9A30, 0xC4CB},{0x9A31, 0xF55C},{0x9A32, 0xF55A},{0x9A34, 0xF55B},
- {0x9A35, 0xC4CD},{0x9A36, 0xF55F},{0x9A37, 0xC4CC},{0x9A38, 0xF562},{0x9A39, 0xF678},{0x9A3A, 0xF67E},{0x9A3D, 0xF679},{0x9A3E, 0xC55B},
- {0x9A3F, 0xF6A1},{0x9A40, 0xC55A},{0x9A41, 0xF67D},{0x9A42, 0xF67C},{0x9A43, 0xC559},{0x9A44, 0xF67B},{0x9A45, 0xC558},{0x9A46, 0xF67A},
- {0x9A48, 0xF77D},{0x9A49, 0xF7A1},{0x9A4A, 0xF77E},{0x9A4C, 0xF77B},{0x9A4D, 0xC5BB},{0x9A4E, 0xF778},{0x9A4F, 0xF77C},{0x9A50, 0xF7A3},
- {0x9A52, 0xF7A2},{0x9A53, 0xF779},{0x9A54, 0xF77A},{0x9A55, 0xC5BA},{0x9A56, 0xF852},{0x9A57, 0xC5E7},{0x9A59, 0xF853},{0x9A5A, 0xC5E5},
- {0x9A5B, 0xC5E6},{0x9A5E, 0xF8D3},{0x9A5F, 0xC64A},{0x9A60, 0xF976},{0x9A62, 0xC66A},{0x9A64, 0xF9B3},{0x9A65, 0xC66B},{0x9A66, 0xF9B4},
- {0x9A67, 0xF9B5},{0x9A68, 0xF9C3},{0x9A69, 0xF9C2},{0x9A6A, 0xC67A},{0x9A6B, 0xF9CD},{0x9AA8, 0xB0A9},{0x9AAB, 0xE0E9},{0x9AAD, 0xE0E8},
- {0x9AAF, 0xBBEA},{0x9AB0, 0xBBEB},{0x9AB1, 0xE4DA},{0x9AB3, 0xE8D2},{0x9AB4, 0xEC6C},{0x9AB7, 0xBE75},{0x9AB8, 0xC065},{0x9AB9, 0xEC6A},
- {0x9ABB, 0xEC6D},{0x9ABC, 0xC066},{0x9ABE, 0xEF64},{0x9ABF, 0xEC6B},{0x9AC0, 0xF1B9},{0x9AC1, 0xC34E},{0x9AC2, 0xF3C1},{0x9AC6, 0xF566},
- {0x9AC7, 0xF564},{0x9ACA, 0xF565},{0x9ACD, 0xF6A2},{0x9ACF, 0xC55C},{0x9AD0, 0xF7A4},{0x9AD1, 0xC5EA},{0x9AD2, 0xC5BC},{0x9AD3, 0xC5E8},
- {0x9AD4, 0xC5E9},{0x9AD5, 0xF8D4},{0x9AD6, 0xC662},{0x9AD8, 0xB0AA},{0x9ADC, 0xF1BA},{0x9ADF, 0xD449},{0x9AE1, 0xB9A6},{0x9AE3, 0xE4DB},
- {0x9AE6, 0xBBEC},{0x9AE7, 0xE4DC},{0x9AEB, 0xE8D4},{0x9AEC, 0xE8D3},{0x9AED, 0xC068},{0x9AEE, 0xBE76},{0x9AEF, 0xBE77},{0x9AF1, 0xE8D7},
- {0x9AF2, 0xE8D6},{0x9AF3, 0xE8D5},{0x9AF6, 0xEC6E},{0x9AF7, 0xEC71},{0x9AF9, 0xEC70},{0x9AFA, 0xEC6F},{0x9AFB, 0xC067},{0x9AFC, 0xEF68},
- {0x9AFD, 0xEF66},{0x9AFE, 0xEF65},{0x9B01, 0xEF67},{0x9B03, 0xC34F},{0x9B04, 0xF1BC},{0x9B05, 0xF1BD},{0x9B06, 0xC350},{0x9B08, 0xF1BB},
- {0x9B0A, 0xF3C3},{0x9B0B, 0xF3C2},{0x9B0C, 0xF3C5},{0x9B0D, 0xC447},{0x9B0E, 0xF3C4},{0x9B10, 0xF567},{0x9B11, 0xF569},{0x9B12, 0xF568},
- {0x9B15, 0xF6A3},{0x9B16, 0xF6A6},{0x9B17, 0xF6A4},{0x9B18, 0xF6A5},{0x9B19, 0xF7A5},{0x9B1A, 0xC5BD},{0x9B1E, 0xF854},{0x9B1F, 0xF855},
- {0x9B20, 0xF856},{0x9B22, 0xC64B},{0x9B23, 0xC663},{0x9B24, 0xF9B6},{0x9B25, 0xB0AB},{0x9B27, 0xBE78},{0x9B28, 0xC069},{0x9B29, 0xF1BE},
- {0x9B2B, 0xF7A6},{0x9B2E, 0xF9C4},{0x9B2F, 0xD44A},{0x9B31, 0xC67B},{0x9B32, 0xB0AC},{0x9B33, 0xEC72},{0x9B35, 0xF1BF},{0x9B37, 0xF3C6},
- {0x9B3A, 0xF6A7},{0x9B3B, 0xF7A7},{0x9B3C, 0xB0AD},{0x9B3E, 0xE4DD},{0x9B3F, 0xE4DE},{0x9B41, 0xBBED},{0x9B42, 0xBBEE},{0x9B43, 0xE8D9},
- {0x9B44, 0xBE7A},{0x9B45, 0xBE79},{0x9B46, 0xE8D8},{0x9B48, 0xEF69},{0x9B4A, 0xF1C0},{0x9B4B, 0xF1C2},{0x9B4C, 0xF1C1},{0x9B4D, 0xC353},
- {0x9B4E, 0xC352},{0x9B4F, 0xC351},{0x9B51, 0xC55E},{0x9B52, 0xF6A8},{0x9B54, 0xC55D},{0x9B55, 0xF7A9},{0x9B56, 0xF7A8},{0x9B58, 0xC64C},
- {0x9B59, 0xF8D5},{0x9B5A, 0xB3BD},{0x9B5B, 0xE0EA},{0x9B5F, 0xE4E1},{0x9B60, 0xE4DF},{0x9B61, 0xE4E0},{0x9B64, 0xE8E2},{0x9B66, 0xE8DD},
- {0x9B67, 0xE8DA},{0x9B68, 0xE8E1},{0x9B6C, 0xE8E3},{0x9B6F, 0xBE7C},{0x9B70, 0xE8E0},{0x9B71, 0xE8DC},{0x9B74, 0xE8DB},{0x9B75, 0xE8DF},
- {0x9B76, 0xE8DE},{0x9B77, 0xBE7B},{0x9B7A, 0xEC7D},{0x9B7B, 0xEC78},{0x9B7C, 0xEC76},{0x9B7D, 0xECA1},{0x9B7E, 0xEC77},{0x9B80, 0xEC73},
- {0x9B82, 0xEC79},{0x9B85, 0xEC74},{0x9B86, 0xEF72},{0x9B87, 0xEC75},{0x9B88, 0xECA2},{0x9B90, 0xEC7C},{0x9B91, 0xC06A},{0x9B92, 0xEC7B},
- {0x9B93, 0xEC7A},{0x9B95, 0xEC7E},{0x9B9A, 0xEF6A},{0x9B9B, 0xEF6D},{0x9B9E, 0xEF6C},{0x9BA0, 0xEF74},{0x9BA1, 0xEF6F},{0x9BA2, 0xEF73},
- {0x9BA4, 0xEF71},{0x9BA5, 0xEF70},{0x9BA6, 0xEF6E},{0x9BA8, 0xEF6B},{0x9BAA, 0xC243},{0x9BAB, 0xC242},{0x9BAD, 0xC244},{0x9BAE, 0xC241},
- {0x9BAF, 0xEF75},{0x9BB5, 0xF1C8},{0x9BB6, 0xF1CB},{0x9BB8, 0xF1C9},{0x9BB9, 0xF1CD},{0x9BBD, 0xF1CE},{0x9BBF, 0xF1C6},{0x9BC0, 0xC358},
- {0x9BC1, 0xF1C7},{0x9BC3, 0xF1C5},{0x9BC4, 0xF1CC},{0x9BC6, 0xF1C4},{0x9BC7, 0xF1C3},{0x9BC8, 0xC357},{0x9BC9, 0xC355},{0x9BCA, 0xC354},
- {0x9BD3, 0xF1CA},{0x9BD4, 0xF3CF},{0x9BD5, 0xF3D5},{0x9BD6, 0xC44A},{0x9BD7, 0xF3D0},{0x9BD9, 0xF3D3},{0x9BDA, 0xF3D7},{0x9BDB, 0xC44B},
- {0x9BDC, 0xF3D2},{0x9BDE, 0xF3CA},{0x9BE0, 0xF3C9},{0x9BE1, 0xF3D6},{0x9BE2, 0xF3CD},{0x9BE4, 0xF3CB},{0x9BE5, 0xF3D4},{0x9BE6, 0xF3CC},
- {0x9BE7, 0xC449},{0x9BE8, 0xC448},{0x9BEA, 0xF3C7},{0x9BEB, 0xF3C8},{0x9BEC, 0xF3D1},{0x9BF0, 0xF3CE},{0x9BF7, 0xF56C},{0x9BF8, 0xF56F},
- {0x9BFD, 0xC356},{0x9C05, 0xF56D},{0x9C06, 0xF573},{0x9C07, 0xF571},{0x9C08, 0xF56B},{0x9C09, 0xF576},{0x9C0B, 0xF56A},{0x9C0D, 0xC4CF},
- {0x9C0E, 0xF572},{0x9C12, 0xF56E},{0x9C13, 0xC4CE},{0x9C14, 0xF575},{0x9C17, 0xF574},{0x9C1C, 0xF6AB},{0x9C1D, 0xF6AA},{0x9C21, 0xF6B1},
- {0x9C23, 0xF6AD},{0x9C24, 0xF6B0},{0x9C25, 0xC560},{0x9C28, 0xF6AE},{0x9C29, 0xF6AF},{0x9C2B, 0xF6A9},{0x9C2C, 0xF6AC},{0x9C2D, 0xC55F},
- {0x9C31, 0xC5BF},{0x9C32, 0xF7B4},{0x9C33, 0xF7AF},{0x9C34, 0xF7B3},{0x9C36, 0xF7B6},{0x9C37, 0xF7B2},{0x9C39, 0xF7AE},{0x9C3B, 0xC5C1},
- {0x9C3C, 0xF7B1},{0x9C3D, 0xF7B5},{0x9C3E, 0xC5C0},{0x9C3F, 0xF7AC},{0x9C40, 0xF570},{0x9C41, 0xF7B0},{0x9C44, 0xF7AD},{0x9C46, 0xF7AA},
- {0x9C48, 0xF7AB},{0x9C49, 0xC5BE},{0x9C4A, 0xF85A},{0x9C4B, 0xF85C},{0x9C4C, 0xF85F},{0x9C4D, 0xF85B},{0x9C4E, 0xF860},{0x9C50, 0xF859},
- {0x9C52, 0xF857},{0x9C54, 0xC5EB},{0x9C55, 0xF85D},{0x9C56, 0xC5ED},{0x9C57, 0xC5EC},{0x9C58, 0xF858},{0x9C59, 0xF85E},{0x9C5E, 0xF8DA},
- {0x9C5F, 0xC64D},{0x9C60, 0xF8DB},{0x9C62, 0xF8D9},{0x9C63, 0xF8D6},{0x9C66, 0xF8D8},{0x9C67, 0xF8D7},{0x9C68, 0xF95A},{0x9C6D, 0xF95C},
- {0x9C6E, 0xF95B},{0x9C71, 0xF979},{0x9C73, 0xF978},{0x9C74, 0xF977},{0x9C75, 0xF97A},{0x9C77, 0xC673},{0x9C78, 0xC674},{0x9C79, 0xF9CA},
- {0x9C7A, 0xF9CE},{0x9CE5, 0xB3BE},{0x9CE6, 0xDCAF},{0x9CE7, 0xE0ED},{0x9CE9, 0xB9A7},{0x9CEA, 0xE0EB},{0x9CED, 0xE0EC},{0x9CF1, 0xE4E2},
- {0x9CF2, 0xE4E3},{0x9CF3, 0xBBF1},{0x9CF4, 0xBBEF},{0x9CF5, 0xE4E4},{0x9CF6, 0xBBF0},{0x9CF7, 0xE8E8},{0x9CF9, 0xE8EB},{0x9CFA, 0xE8E5},
- {0x9CFB, 0xE8EC},{0x9CFC, 0xE8E4},{0x9CFD, 0xE8E6},{0x9CFF, 0xE8E7},{0x9D00, 0xE8EA},{0x9D03, 0xBEA1},{0x9D04, 0xE8EF},{0x9D05, 0xE8EE},
- {0x9D06, 0xBE7D},{0x9D07, 0xE8E9},{0x9D08, 0xE8ED},{0x9D09, 0xBE7E},{0x9D10, 0xECAC},{0x9D12, 0xC06F},{0x9D14, 0xECA7},{0x9D15, 0xC06B},
- {0x9D17, 0xECA4},{0x9D18, 0xECAA},{0x9D19, 0xECAD},{0x9D1B, 0xC070},{0x9D1D, 0xECA9},{0x9D1E, 0xECA6},{0x9D1F, 0xECAE},{0x9D20, 0xECA5},
- {0x9D22, 0xECAB},{0x9D23, 0xC06C},{0x9D25, 0xECA3},{0x9D26, 0xC06D},{0x9D28, 0xC06E},{0x9D29, 0xECA8},{0x9D2D, 0xEFA9},{0x9D2E, 0xEF7A},
- {0x9D2F, 0xEF7B},{0x9D30, 0xEF7E},{0x9D31, 0xEF7C},{0x9D33, 0xEF76},{0x9D36, 0xEF79},{0x9D37, 0xEFA5},{0x9D38, 0xEF7D},{0x9D3B, 0xC245},
- {0x9D3D, 0xEFA7},{0x9D3E, 0xEFA4},{0x9D3F, 0xC246},{0x9D40, 0xEFA6},{0x9D41, 0xEF77},{0x9D42, 0xEFA2},{0x9D43, 0xEFA3},{0x9D45, 0xEFA1},
- {0x9D4A, 0xF1D2},{0x9D4B, 0xF1D4},{0x9D4C, 0xF1D7},{0x9D4F, 0xF1D1},{0x9D51, 0xC359},{0x9D52, 0xF1D9},{0x9D53, 0xF1D0},{0x9D54, 0xF1DA},
- {0x9D56, 0xF1D6},{0x9D57, 0xF1D8},{0x9D58, 0xF1DC},{0x9D59, 0xF1D5},{0x9D5A, 0xF1DD},{0x9D5B, 0xF1D3},{0x9D5C, 0xF1CF},{0x9D5D, 0xC35A},
- {0x9D5F, 0xF1DB},{0x9D60, 0xC35B},{0x9D61, 0xC44D},{0x9D67, 0xEF78},{0x9D68, 0xF3F1},{0x9D69, 0xF3E8},{0x9D6A, 0xC44F},{0x9D6B, 0xF3E4},
- {0x9D6C, 0xC450},{0x9D6F, 0xF3ED},{0x9D70, 0xF3E7},{0x9D71, 0xF3DD},{0x9D72, 0xC44E},{0x9D73, 0xF3EA},{0x9D74, 0xF3E5},{0x9D75, 0xF3E6},
- {0x9D77, 0xF3D8},{0x9D78, 0xF3DF},{0x9D79, 0xF3EE},{0x9D7B, 0xF3EB},{0x9D7D, 0xF3E3},{0x9D7F, 0xF3EF},{0x9D80, 0xF3DE},{0x9D81, 0xF3D9},
- {0x9D82, 0xF3EC},{0x9D84, 0xF3DB},{0x9D85, 0xF3E9},{0x9D86, 0xF3E0},{0x9D87, 0xF3F0},{0x9D88, 0xF3DC},{0x9D89, 0xC44C},{0x9D8A, 0xF3DA},
- {0x9D8B, 0xF3E1},{0x9D8C, 0xF3E2},{0x9D90, 0xF57D},{0x9D92, 0xF57B},{0x9D94, 0xF5A2},{0x9D96, 0xF5AE},{0x9D97, 0xF5A5},{0x9D98, 0xF57C},
- {0x9D99, 0xF578},{0x9D9A, 0xF5A7},{0x9D9B, 0xF57E},{0x9D9C, 0xF5A3},{0x9D9D, 0xF57A},{0x9D9E, 0xF5AA},{0x9D9F, 0xF577},{0x9DA0, 0xF5A1},
- {0x9DA1, 0xF5A6},{0x9DA2, 0xF5A8},{0x9DA3, 0xF5AB},{0x9DA4, 0xF579},{0x9DA6, 0xF5AF},{0x9DA7, 0xF5B0},{0x9DA8, 0xF5A9},{0x9DA9, 0xF5AD},
- {0x9DAA, 0xF5A4},{0x9DAC, 0xF6C1},{0x9DAD, 0xF6C4},{0x9DAF, 0xC561},{0x9DB1, 0xF6C3},{0x9DB2, 0xF6C8},{0x9DB3, 0xF6C6},{0x9DB4, 0xC562},
- {0x9DB5, 0xF6BD},{0x9DB6, 0xF6B3},{0x9DB7, 0xF6B2},{0x9DB8, 0xC564},{0x9DB9, 0xF6BF},{0x9DBA, 0xF6C0},{0x9DBB, 0xF6BC},{0x9DBC, 0xF6B4},
- {0x9DBE, 0xF6B9},{0x9DBF, 0xF5AC},{0x9DC1, 0xF6B5},{0x9DC2, 0xC563},{0x9DC3, 0xF6BB},{0x9DC5, 0xF6BA},{0x9DC7, 0xF6B6},{0x9DC8, 0xF6C2},
- {0x9DCA, 0xF6B7},{0x9DCB, 0xF7BB},{0x9DCC, 0xF6C5},{0x9DCD, 0xF6C7},{0x9DCE, 0xF6BE},{0x9DCF, 0xF6B8},{0x9DD0, 0xF7BC},{0x9DD1, 0xF7BE},
- {0x9DD2, 0xF7B8},{0x9DD3, 0xC5C2},{0x9DD5, 0xF7C5},{0x9DD6, 0xF7C3},{0x9DD7, 0xC5C3},{0x9DD8, 0xF7C2},{0x9DD9, 0xF7C1},{0x9DDA, 0xF7BA},
- {0x9DDB, 0xF7B7},{0x9DDC, 0xF7BD},{0x9DDD, 0xF7C6},{0x9DDE, 0xF7B9},{0x9DDF, 0xF7BF},{0x9DE1, 0xF869},{0x9DE2, 0xF86E},{0x9DE3, 0xF864},
- {0x9DE4, 0xF867},{0x9DE5, 0xC5EE},{0x9DE6, 0xF86B},{0x9DE8, 0xF872},{0x9DE9, 0xF7C0},{0x9DEB, 0xF865},{0x9DEC, 0xF86F},{0x9DED, 0xF873},
- {0x9DEE, 0xF86A},{0x9DEF, 0xF863},{0x9DF0, 0xF86D},{0x9DF2, 0xF86C},{0x9DF3, 0xF871},{0x9DF4, 0xF870},{0x9DF5, 0xF7C4},{0x9DF6, 0xF868},
- {0x9DF7, 0xF862},{0x9DF8, 0xF866},{0x9DF9, 0xC64E},{0x9DFA, 0xC64F},{0x9DFB, 0xF861},{0x9DFD, 0xF8E6},{0x9DFE, 0xF8DD},{0x9DFF, 0xF8E5},
- {0x9E00, 0xF8E2},{0x9E01, 0xF8E3},{0x9E02, 0xF8DC},{0x9E03, 0xF8DF},{0x9E04, 0xF8E7},{0x9E05, 0xF8E1},{0x9E06, 0xF8E0},{0x9E07, 0xF8DE},
- {0x9E09, 0xF8E4},{0x9E0B, 0xF95D},{0x9E0D, 0xF95E},{0x9E0F, 0xF960},{0x9E10, 0xF95F},{0x9E11, 0xF962},{0x9E12, 0xF961},{0x9E13, 0xF97C},
- {0x9E14, 0xF97B},{0x9E15, 0xF9B7},{0x9E17, 0xF9B8},{0x9E19, 0xF9C5},{0x9E1A, 0xC678},{0x9E1B, 0xC67C},{0x9E1D, 0xF9CF},{0x9E1E, 0xC67D},
- {0x9E75, 0xB3BF},{0x9E79, 0xC4D0},{0x9E7A, 0xF6C9},{0x9E7C, 0xC650},{0x9E7D, 0xC651},{0x9E7F, 0xB3C0},{0x9E80, 0xE0EE},{0x9E82, 0xB9A8},
- {0x9E83, 0xE8F0},{0x9E86, 0xECB0},{0x9E87, 0xECB1},{0x9E88, 0xECAF},{0x9E89, 0xEFAB},{0x9E8A, 0xEFAA},{0x9E8B, 0xC247},{0x9E8C, 0xF1DF},
- {0x9E8D, 0xEFAC},{0x9E8E, 0xF1DE},{0x9E91, 0xF3F3},{0x9E92, 0xC451},{0x9E93, 0xC453},{0x9E94, 0xF3F2},{0x9E97, 0xC452},{0x9E99, 0xF5B1},
- {0x9E9A, 0xF5B3},{0x9E9B, 0xF5B2},{0x9E9C, 0xF6CA},{0x9E9D, 0xC565},{0x9E9F, 0xC5EF},{0x9EA0, 0xF8E8},{0x9EA1, 0xF963},{0x9EA4, 0xF9D2},
- {0x9EA5, 0xB3C1},{0x9EA7, 0xE4E5},{0x9EA9, 0xBEA2},{0x9EAD, 0xECB3},{0x9EAE, 0xECB2},{0x9EB0, 0xEFAD},{0x9EB4, 0xC454},{0x9EB5, 0xC4D1},
- {0x9EB6, 0xF7C7},{0x9EB7, 0xF9CB},{0x9EBB, 0xB3C2},{0x9EBC, 0xBBF2},{0x9EBE, 0xBEA3},{0x9EC0, 0xF3F4},{0x9EC2, 0xF874},{0x9EC3, 0xB6C0},
- {0x9EC8, 0xEFAE},{0x9ECC, 0xC664},{0x9ECD, 0xB6C1},{0x9ECE, 0xBEA4},{0x9ECF, 0xC248},{0x9ED0, 0xF875},{0x9ED1, 0xB6C2},{0x9ED3, 0xE8F1},
- {0x9ED4, 0xC072},{0x9ED5, 0xECB4},{0x9ED6, 0xECB5},{0x9ED8, 0xC071},{0x9EDA, 0xEFAF},{0x9EDB, 0xC24C},{0x9EDC, 0xC24A},{0x9EDD, 0xC24B},
- {0x9EDE, 0xC249},{0x9EDF, 0xF1E0},{0x9EE0, 0xC35C},{0x9EE4, 0xF5B5},{0x9EE5, 0xF5B4},{0x9EE6, 0xF5B7},{0x9EE7, 0xF5B6},{0x9EE8, 0xC4D2},
- {0x9EEB, 0xF6CB},{0x9EED, 0xF6CD},{0x9EEE, 0xF6CC},{0x9EEF, 0xC566},{0x9EF0, 0xF7C8},{0x9EF2, 0xF876},{0x9EF3, 0xF877},{0x9EF4, 0xC5F0},
- {0x9EF5, 0xF964},{0x9EF6, 0xF97D},{0x9EF7, 0xC675},{0x9EF9, 0xDCB0},{0x9EFA, 0xECB6},{0x9EFB, 0xEFB0},{0x9EFC, 0xF3F5},{0x9EFD, 0xE0EF},
- {0x9EFF, 0xEFB1},{0x9F00, 0xF1E2},{0x9F01, 0xF1E1},{0x9F06, 0xF878},{0x9F07, 0xC652},{0x9F09, 0xF965},{0x9F0A, 0xF97E},{0x9F0E, 0xB9A9},
- {0x9F0F, 0xE8F2},{0x9F10, 0xE8F3},{0x9F12, 0xECB7},{0x9F13, 0xB9AA},{0x9F15, 0xC35D},{0x9F16, 0xF1E3},{0x9F18, 0xF6CF},{0x9F19, 0xC567},
- {0x9F1A, 0xF6D0},{0x9F1B, 0xF6CE},{0x9F1C, 0xF879},{0x9F1E, 0xF8E9},{0x9F20, 0xB9AB},{0x9F22, 0xEFB4},{0x9F23, 0xEFB3},{0x9F24, 0xEFB2},
- {0x9F25, 0xF1E4},{0x9F28, 0xF1E8},{0x9F29, 0xF1E7},{0x9F2A, 0xF1E6},{0x9F2B, 0xF1E5},{0x9F2C, 0xC35E},{0x9F2D, 0xF3F6},{0x9F2E, 0xF5B9},
- {0x9F2F, 0xC4D3},{0x9F30, 0xF5B8},{0x9F31, 0xF6D1},{0x9F32, 0xF7CB},{0x9F33, 0xF7CA},{0x9F34, 0xC5C4},{0x9F35, 0xF7C9},{0x9F36, 0xF87C},
- {0x9F37, 0xF87B},{0x9F38, 0xF87A},{0x9F3B, 0xBBF3},{0x9F3D, 0xECB8},{0x9F3E, 0xC24D},{0x9F40, 0xF3F7},{0x9F41, 0xF3F8},{0x9F42, 0xF7CC},
- {0x9F43, 0xF87D},{0x9F46, 0xF8EA},{0x9F47, 0xF966},{0x9F48, 0xF9B9},{0x9F49, 0xF9D4},{0x9F4A, 0xBBF4},{0x9F4B, 0xC24E},{0x9F4C, 0xF1E9},
- {0x9F4D, 0xF3F9},{0x9F4E, 0xF6D2},{0x9F4F, 0xF87E},{0x9F52, 0xBEA6},{0x9F54, 0xEFB5},{0x9F55, 0xF1EA},{0x9F56, 0xF3FA},{0x9F57, 0xF3FB},
- {0x9F58, 0xF3FC},{0x9F59, 0xF5BE},{0x9F5B, 0xF5BA},{0x9F5C, 0xC568},{0x9F5D, 0xF5BD},{0x9F5E, 0xF5BC},{0x9F5F, 0xC4D4},{0x9F60, 0xF5BB},
- {0x9F61, 0xC4D6},{0x9F63, 0xC4D5},{0x9F64, 0xF6D4},{0x9F65, 0xF6D3},{0x9F66, 0xC569},{0x9F67, 0xC56A},{0x9F6A, 0xC5C6},{0x9F6B, 0xF7CD},
- {0x9F6C, 0xC5C5},{0x9F6E, 0xF8A3},{0x9F6F, 0xF8A4},{0x9F70, 0xF8A2},{0x9F71, 0xF8A1},{0x9F72, 0xC654},{0x9F74, 0xF8EB},{0x9F75, 0xF8EC},
- {0x9F76, 0xF8ED},{0x9F77, 0xC653},{0x9F78, 0xF967},{0x9F79, 0xF96A},{0x9F7A, 0xF969},{0x9F7B, 0xF968},{0x9F7E, 0xF9D3},{0x9F8D, 0xC073},
- {0x9F90, 0xC365},{0x9F91, 0xF5BF},{0x9F92, 0xF6D5},{0x9F94, 0xC5C7},{0x9F95, 0xF7CE},{0x9F98, 0xF9D5},{0x9F9C, 0xC074},{0x9FA0, 0xEFB6},
- {0x9FA2, 0xF7CF},{0x9FA4, 0xF9A1},{0xFA0C, 0xC94A},{0xFA0D, 0xDDFC},{0xFE30, 0xA14A},{0xFE31, 0xA157},{0xFE33, 0xA159},{0xFE34, 0xA15B},
- {0xFE35, 0xA15F},{0xFE36, 0xA160},{0xFE37, 0xA163},{0xFE38, 0xA164},{0xFE39, 0xA167},{0xFE3A, 0xA168},{0xFE3B, 0xA16B},{0xFE3C, 0xA16C},
- {0xFE3D, 0xA16F},{0xFE3E, 0xA170},{0xFE3F, 0xA173},{0xFE40, 0xA174},{0xFE41, 0xA177},{0xFE42, 0xA178},{0xFE43, 0xA17B},{0xFE44, 0xA17C},
- {0xFE49, 0xA1C6},{0xFE4A, 0xA1C7},{0xFE4B, 0xA1CA},{0xFE4C, 0xA1CB},{0xFE4D, 0xA1C8},{0xFE4E, 0xA1C9},{0xFE4F, 0xA15C},{0xFE50, 0xA14D},
- {0xFE52, 0xA14F},{0xFE54, 0xA151},{0xFE55, 0xA152},{0xFE56, 0xA153},{0xFE57, 0xA154},{0xFE59, 0xA17D},{0xFE5A, 0xA17E},{0xFE5B, 0xA1A1},
- {0xFE5C, 0xA1A2},{0xFE5D, 0xA1A3},{0xFE5E, 0xA1A4},{0xFE5F, 0xA1CC},{0xFE60, 0xA1CD},{0xFE61, 0xA1CE},{0xFE62, 0xA1DE},{0xFE63, 0xA1DF},
- {0xFE64, 0xA1E0},{0xFE65, 0xA1E1},{0xFE66, 0xA1E2},{0xFE69, 0xA24C},{0xFE6A, 0xA24D},{0xFE6B, 0xA24E},{0xFF01, 0xA149},{0xFF03, 0xA1AD},
- {0xFF04, 0xA243},{0xFF05, 0xA248},{0xFF06, 0xA1AE},{0xFF08, 0xA15D},{0xFF09, 0xA15E},{0xFF0A, 0xA1AF},{0xFF0B, 0xA1CF},{0xFF0C, 0xA141},
- {0xFF0D, 0xA1D0},{0xFF0E, 0xA144},{0xFF0F, 0xA241},{0xFF10, 0xA2AF},{0xFF11, 0xA2B0},{0xFF12, 0xA2B1},{0xFF13, 0xA2B2},{0xFF14, 0xA2B3},
- {0xFF15, 0xA2B4},{0xFF16, 0xA2B5},{0xFF17, 0xA2B6},{0xFF18, 0xA2B7},{0xFF19, 0xA2B8},{0xFF1A, 0xA147},{0xFF1B, 0xA146},{0xFF1C, 0xA1D5},
- {0xFF1D, 0xA1D7},{0xFF1E, 0xA1D6},{0xFF1F, 0xA148},{0xFF20, 0xA249},{0xFF21, 0xA2CF},{0xFF22, 0xA2D0},{0xFF23, 0xA2D1},{0xFF24, 0xA2D2},
- {0xFF25, 0xA2D3},{0xFF26, 0xA2D4},{0xFF27, 0xA2D5},{0xFF28, 0xA2D6},{0xFF29, 0xA2D7},{0xFF2A, 0xA2D8},{0xFF2B, 0xA2D9},{0xFF2C, 0xA2DA},
- {0xFF2D, 0xA2DB},{0xFF2E, 0xA2DC},{0xFF2F, 0xA2DD},{0xFF30, 0xA2DE},{0xFF31, 0xA2DF},{0xFF32, 0xA2E0},{0xFF33, 0xA2E1},{0xFF34, 0xA2E2},
- {0xFF35, 0xA2E3},{0xFF36, 0xA2E4},{0xFF37, 0xA2E5},{0xFF38, 0xA2E6},{0xFF39, 0xA2E7},{0xFF3A, 0xA2E8},{0xFF3C, 0xA242},{0xFF3F, 0xA1C4},
- {0xFF41, 0xA2E9},{0xFF42, 0xA2EA},{0xFF43, 0xA2EB},{0xFF44, 0xA2EC},{0xFF45, 0xA2ED},{0xFF46, 0xA2EE},{0xFF47, 0xA2EF},{0xFF48, 0xA2F0},
- {0xFF49, 0xA2F1},{0xFF4A, 0xA2F2},{0xFF4B, 0xA2F3},{0xFF4C, 0xA2F4},{0xFF4D, 0xA2F5},{0xFF4E, 0xA2F6},{0xFF4F, 0xA2F7},{0xFF50, 0xA2F8},
- {0xFF51, 0xA2F9},{0xFF52, 0xA2FA},{0xFF53, 0xA2FB},{0xFF54, 0xA2FC},{0xFF55, 0xA2FD},{0xFF56, 0xA2FE},{0xFF57, 0xA340},{0xFF58, 0xA341},
- {0xFF59, 0xA342},{0xFF5A, 0xA343},{0xFF5B, 0xA161},{0xFF5C, 0xA155},{0xFF5D, 0xA162},{0xFF64, 0xA14E}
-};
diff --git a/vcl/source/fontsubset/u2johab.inc b/vcl/source/fontsubset/u2johab.inc
deleted file mode 100644
index f7a75afaf503..000000000000
--- a/vcl/source/fontsubset/u2johab.inc
+++ /dev/null
@@ -1,2174 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// use generic RTL_TEXTENCODING_JOHAB to get rid of this file
-
-sal_uInt16pair xlat_1_6[17141] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A1, 0xA2AE},
- {0x00A4, 0xA2B4},{0x00A7, 0xA1D7},{0x00A8, 0xA1A7},{0x00AA, 0xA8A3},{0x00AD, 0xA1A9},{0x00B0, 0xA1C6},{0x00B1, 0xA1BE},{0x00B2, 0xA9F7},
- {0x00B3, 0xA9F8},{0x00B4, 0xA2A5},{0x00B6, 0xA2D2},{0x00B7, 0xA1A4},{0x00B8, 0xA2AC},{0x00B9, 0xA9F6},{0x00BA, 0xA8AC},{0x00BC, 0xA8F9},
- {0x00BD, 0xA8F6},{0x00BE, 0xA8FA},{0x00BF, 0xA2AF},{0x00C6, 0xA8A1},{0x00D0, 0xA8A2},{0x00D7, 0xA1BF},{0x00D8, 0xA8AA},{0x00DE, 0xA8AD},
- {0x00DF, 0xA9AC},{0x00E6, 0xA9A1},{0x00F0, 0xA9A3},{0x00F7, 0xA1C0},{0x00F8, 0xA9AA},{0x00FE, 0xA9AD},{0x0111, 0xA9A2},{0x0126, 0xA8A4},
- {0x0127, 0xA9A4},{0x0131, 0xA9A5},{0x0132, 0xA8A6},{0x0133, 0xA9A6},{0x0138, 0xA9A7},{0x013F, 0xA8A8},{0x0140, 0xA9A8},{0x0141, 0xA8A9},
- {0x0142, 0xA9A9},{0x0149, 0xA9B0},{0x014A, 0xA8AF},{0x014B, 0xA9AF},{0x0152, 0xA8AB},{0x0153, 0xA9AB},{0x0166, 0xA8AE},{0x0167, 0xA9AE},
- {0x02C7, 0xA2A7},{0x02D0, 0xA2B0},{0x02D8, 0xA2A8},{0x02D9, 0xA2AB},{0x02DA, 0xA2AA},{0x02DB, 0xA2AD},{0x02DD, 0xA2A9},{0x0391, 0xA5C1},
- {0x0392, 0xA5C2},{0x0393, 0xA5C3},{0x0394, 0xA5C4},{0x0395, 0xA5C5},{0x0396, 0xA5C6},{0x0397, 0xA5C7},{0x0398, 0xA5C8},{0x0399, 0xA5C9},
- {0x039A, 0xA5CA},{0x039B, 0xA5CB},{0x039C, 0xA5CC},{0x039D, 0xA5CD},{0x039E, 0xA5CE},{0x039F, 0xA5CF},{0x03A0, 0xA5D0},{0x03A1, 0xA5D1},
- {0x03A3, 0xA5D2},{0x03A4, 0xA5D3},{0x03A5, 0xA5D4},{0x03A6, 0xA5D5},{0x03A7, 0xA5D6},{0x03A8, 0xA5D7},{0x03A9, 0xA5D8},{0x03B1, 0xA5E1},
- {0x03B2, 0xA5E2},{0x03B3, 0xA5E3},{0x03B4, 0xA5E4},{0x03B5, 0xA5E5},{0x03B6, 0xA5E6},{0x03B7, 0xA5E7},{0x03B8, 0xA5E8},{0x03B9, 0xA5E9},
- {0x03BA, 0xA5EA},{0x03BB, 0xA5EB},{0x03BC, 0xA5EC},{0x03BD, 0xA5ED},{0x03BE, 0xA5EE},{0x03BF, 0xA5EF},{0x03C0, 0xA5F0},{0x03C1, 0xA5F1},
- {0x03C3, 0xA5F2},{0x03C4, 0xA5F3},{0x03C5, 0xA5F4},{0x03C6, 0xA5F5},{0x03C7, 0xA5F6},{0x03C8, 0xA5F7},{0x03C9, 0xA5F8},{0x0401, 0xACA7},
- {0x0410, 0xACA1},{0x0411, 0xACA2},{0x0412, 0xACA3},{0x0413, 0xACA4},{0x0414, 0xACA5},{0x0415, 0xACA6},{0x0416, 0xACA8},{0x0417, 0xACA9},
- {0x0418, 0xACAA},{0x0419, 0xACAB},{0x041A, 0xACAC},{0x041B, 0xACAD},{0x041C, 0xACAE},{0x041D, 0xACAF},{0x041E, 0xACB0},{0x041F, 0xACB1},
- {0x0420, 0xACB2},{0x0421, 0xACB3},{0x0422, 0xACB4},{0x0423, 0xACB5},{0x0424, 0xACB6},{0x0425, 0xACB7},{0x0426, 0xACB8},{0x0427, 0xACB9},
- {0x0428, 0xACBA},{0x0429, 0xACBB},{0x042A, 0xACBC},{0x042B, 0xACBD},{0x042C, 0xACBE},{0x042D, 0xACBF},{0x042E, 0xACC0},{0x042F, 0xACC1},
- {0x0430, 0xACD1},{0x0431, 0xACD2},{0x0432, 0xACD3},{0x0433, 0xACD4},{0x0434, 0xACD5},{0x0435, 0xACD6},{0x0436, 0xACD8},{0x0437, 0xACD9},
- {0x0438, 0xACDA},{0x0439, 0xACDB},{0x043A, 0xACDC},{0x043B, 0xACDD},{0x043C, 0xACDE},{0x043D, 0xACDF},{0x043E, 0xACE0},{0x043F, 0xACE1},
- {0x0440, 0xACE2},{0x0441, 0xACE3},{0x0442, 0xACE4},{0x0443, 0xACE5},{0x0444, 0xACE6},{0x0445, 0xACE7},{0x0446, 0xACE8},{0x0447, 0xACE9},
- {0x0448, 0xACEA},{0x0449, 0xACEB},{0x044A, 0xACEC},{0x044B, 0xACED},{0x044C, 0xACEE},{0x044D, 0xACEF},{0x044E, 0xACF0},{0x044F, 0xACF1},
- {0x0451, 0xACD7},{0x2015, 0xA1AA},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2020, 0xA2D3},{0x2021, 0xA2D4},
- {0x2025, 0xA1A5},{0x2026, 0xA1A6},{0x2030, 0xA2B6},{0x2032, 0xA1C7},{0x2033, 0xA1C8},{0x203B, 0xA1D8},{0x2074, 0xA9F9},{0x207F, 0xA9FA},
- {0x2081, 0xA9FB},{0x2082, 0xA9FC},{0x2083, 0xA9FD},{0x2084, 0xA9FE},{0x2103, 0xA1C9},{0x2109, 0xA2B5},{0x2113, 0xA7A4},{0x2116, 0xA2E0},
- {0x2121, 0xA2E5},{0x2122, 0xA2E2},{0x2126, 0xA7D9},{0x212B, 0xA1CA},{0x2153, 0xA8F7},{0x2154, 0xA8F8},{0x215B, 0xA8FB},{0x215C, 0xA8FC},
- {0x215D, 0xA8FD},{0x215E, 0xA8FE},{0x2160, 0xA5B0},{0x2161, 0xA5B1},{0x2162, 0xA5B2},{0x2163, 0xA5B3},{0x2164, 0xA5B4},{0x2165, 0xA5B5},
- {0x2166, 0xA5B6},{0x2167, 0xA5B7},{0x2168, 0xA5B8},{0x2169, 0xA5B9},{0x2170, 0xA5A1},{0x2171, 0xA5A2},{0x2172, 0xA5A3},{0x2173, 0xA5A4},
- {0x2174, 0xA5A5},{0x2175, 0xA5A6},{0x2176, 0xA5A7},{0x2177, 0xA5A8},{0x2178, 0xA5A9},{0x2179, 0xA5AA},{0x2190, 0xA1E7},{0x2191, 0xA1E8},
- {0x2192, 0xA1E6},{0x2193, 0xA1E9},{0x2194, 0xA1EA},{0x2195, 0xA2D5},{0x2196, 0xA2D8},{0x2197, 0xA2D6},{0x2198, 0xA2D9},{0x2199, 0xA2D7},
- {0x21D2, 0xA2A1},{0x21D4, 0xA2A2},{0x2200, 0xA2A3},{0x2202, 0xA1D3},{0x2203, 0xA2A4},{0x2207, 0xA1D4},{0x2208, 0xA1F4},{0x220B, 0xA1F5},
- {0x220F, 0xA2B3},{0x2211, 0xA2B2},{0x221A, 0xA1EE},{0x221D, 0xA1F0},{0x221E, 0xA1C4},{0x2220, 0xA1D0},{0x2225, 0xA1AB},{0x2227, 0xA1FC},
- {0x2228, 0xA1FD},{0x2229, 0xA1FB},{0x222A, 0xA1FA},{0x222B, 0xA1F2},{0x222C, 0xA1F3},{0x222E, 0xA2B1},{0x2234, 0xA1C5},{0x2235, 0xA1F1},
- {0x223C, 0xA1AD},{0x223D, 0xA1EF},{0x2252, 0xA1D6},{0x2260, 0xA1C1},{0x2261, 0xA1D5},{0x2264, 0xA1C2},{0x2265, 0xA1C3},{0x226A, 0xA1EC},
- {0x226B, 0xA1ED},{0x2282, 0xA1F8},{0x2283, 0xA1F9},{0x2286, 0xA1F6},{0x2287, 0xA1F7},{0x2299, 0xA2C1},{0x22A5, 0xA1D1},{0x2312, 0xA1D2},
- {0x2460, 0xA8E7},{0x2461, 0xA8E8},{0x2462, 0xA8E9},{0x2463, 0xA8EA},{0x2464, 0xA8EB},{0x2465, 0xA8EC},{0x2466, 0xA8ED},{0x2467, 0xA8EE},
- {0x2468, 0xA8EF},{0x2469, 0xA8F0},{0x246A, 0xA8F1},{0x246B, 0xA8F2},{0x246C, 0xA8F3},{0x246D, 0xA8F4},{0x246E, 0xA8F5},{0x2474, 0xA9E7},
- {0x2475, 0xA9E8},{0x2476, 0xA9E9},{0x2477, 0xA9EA},{0x2478, 0xA9EB},{0x2479, 0xA9EC},{0x247A, 0xA9ED},{0x247B, 0xA9EE},{0x247C, 0xA9EF},
- {0x247D, 0xA9F0},{0x247E, 0xA9F1},{0x247F, 0xA9F2},{0x2480, 0xA9F3},{0x2481, 0xA9F4},{0x2482, 0xA9F5},{0x249C, 0xA9CD},{0x249D, 0xA9CE},
- {0x249E, 0xA9CF},{0x249F, 0xA9D0},{0x24A0, 0xA9D1},{0x24A1, 0xA9D2},{0x24A2, 0xA9D3},{0x24A3, 0xA9D4},{0x24A4, 0xA9D5},{0x24A5, 0xA9D6},
- {0x24A6, 0xA9D7},{0x24A7, 0xA9D8},{0x24A8, 0xA9D9},{0x24A9, 0xA9DA},{0x24AA, 0xA9DB},{0x24AB, 0xA9DC},{0x24AC, 0xA9DD},{0x24AD, 0xA9DE},
- {0x24AE, 0xA9DF},{0x24AF, 0xA9E0},{0x24B0, 0xA9E1},{0x24B1, 0xA9E2},{0x24B2, 0xA9E3},{0x24B3, 0xA9E4},{0x24B4, 0xA9E5},{0x24B5, 0xA9E6},
- {0x24D0, 0xA8CD},{0x24D1, 0xA8CE},{0x24D2, 0xA8CF},{0x24D3, 0xA8D0},{0x24D4, 0xA8D1},{0x24D5, 0xA8D2},{0x24D6, 0xA8D3},{0x24D7, 0xA8D4},
- {0x24D8, 0xA8D5},{0x24D9, 0xA8D6},{0x24DA, 0xA8D7},{0x24DB, 0xA8D8},{0x24DC, 0xA8D9},{0x24DD, 0xA8DA},{0x24DE, 0xA8DB},{0x24DF, 0xA8DC},
- {0x24E0, 0xA8DD},{0x24E1, 0xA8DE},{0x24E2, 0xA8DF},{0x24E3, 0xA8E0},{0x24E4, 0xA8E1},{0x24E5, 0xA8E2},{0x24E6, 0xA8E3},{0x24E7, 0xA8E4},
- {0x24E8, 0xA8E5},{0x24E9, 0xA8E6},{0x2500, 0xA6A1},{0x2501, 0xA6AC},{0x2502, 0xA6A2},{0x2503, 0xA6AD},{0x250C, 0xA6A3},{0x250D, 0xA6C8},
- {0x250E, 0xA6C7},{0x250F, 0xA6AE},{0x2510, 0xA6A4},{0x2511, 0xA6C2},{0x2512, 0xA6C1},{0x2513, 0xA6AF},{0x2514, 0xA6A6},{0x2515, 0xA6C6},
- {0x2516, 0xA6C5},{0x2517, 0xA6B1},{0x2518, 0xA6A5},{0x2519, 0xA6C4},{0x251A, 0xA6C3},{0x251B, 0xA6B0},{0x251C, 0xA6A7},{0x251D, 0xA6BC},
- {0x251E, 0xA6C9},{0x251F, 0xA6CA},{0x2520, 0xA6B7},{0x2521, 0xA6CB},{0x2522, 0xA6CC},{0x2523, 0xA6B2},{0x2524, 0xA6A9},{0x2525, 0xA6BE},
- {0x2526, 0xA6CD},{0x2527, 0xA6CE},{0x2528, 0xA6B9},{0x2529, 0xA6CF},{0x252A, 0xA6D0},{0x252B, 0xA6B4},{0x252C, 0xA6A8},{0x252D, 0xA6D1},
- {0x252E, 0xA6D2},{0x252F, 0xA6B8},{0x2530, 0xA6BD},{0x2531, 0xA6D3},{0x2532, 0xA6D4},{0x2533, 0xA6B3},{0x2534, 0xA6AA},{0x2535, 0xA6D5},
- {0x2536, 0xA6D6},{0x2537, 0xA6BA},{0x2538, 0xA6BF},{0x2539, 0xA6D7},{0x253A, 0xA6D8},{0x253B, 0xA6B5},{0x253C, 0xA6AB},{0x253D, 0xA6D9},
- {0x253E, 0xA6DA},{0x253F, 0xA6BB},{0x2540, 0xA6DB},{0x2541, 0xA6DC},{0x2542, 0xA6C0},{0x2543, 0xA6DD},{0x2544, 0xA6DE},{0x2545, 0xA6DF},
- {0x2546, 0xA6E0},{0x2547, 0xA6E1},{0x2548, 0xA6E2},{0x2549, 0xA6E3},{0x254A, 0xA6E4},{0x254B, 0xA6B6},{0x2592, 0xA2C6},{0x25A0, 0xA1E1},
- {0x25A1, 0xA1E0},{0x25A3, 0xA2C3},{0x25A4, 0xA2C7},{0x25A5, 0xA2C8},{0x25A6, 0xA2CB},{0x25A7, 0xA2CA},{0x25A8, 0xA2C9},{0x25A9, 0xA2CC},
- {0x25B2, 0xA1E3},{0x25B3, 0xA1E2},{0x25B6, 0xA2BA},{0x25B7, 0xA2B9},{0x25BC, 0xA1E5},{0x25BD, 0xA1E4},{0x25C0, 0xA2B8},{0x25C1, 0xA2B7},
- {0x25C6, 0xA1DF},{0x25C7, 0xA1DE},{0x25C8, 0xA2C2},{0x25CB, 0xA1DB},{0x25CE, 0xA1DD},{0x25CF, 0xA1DC},{0x25D0, 0xA2C4},{0x25D1, 0xA2C5},
- {0x2605, 0xA1DA},{0x2606, 0xA1D9},{0x260E, 0xA2CF},{0x260F, 0xA2CE},{0x261C, 0xA2D0},{0x261E, 0xA2D1},{0x2640, 0xA1CF},{0x2642, 0xA1CE},
- {0x2660, 0xA2BC},{0x2661, 0xA2BD},{0x2663, 0xA2C0},{0x2664, 0xA2BB},{0x2665, 0xA2BE},{0x2667, 0xA2BF},{0x2668, 0xA2CD},{0x2669, 0xA2DB},
- {0x266A, 0xA2DC},{0x266C, 0xA2DD},{0x266D, 0xA2DA},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},{0x3003, 0xA1A8},{0x3008, 0xA1B4},
- {0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},{0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BC},
- {0x3011, 0xA1BD},{0x3013, 0xA1EB},{0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3041, 0xAAA1},{0x3042, 0xAAA2},{0x3043, 0xAAA3},{0x3044, 0xAAA4},
- {0x3045, 0xAAA5},{0x3046, 0xAAA6},{0x3047, 0xAAA7},{0x3048, 0xAAA8},{0x3049, 0xAAA9},{0x304A, 0xAAAA},{0x304B, 0xAAAB},{0x304C, 0xAAAC},
- {0x304D, 0xAAAD},{0x304E, 0xAAAE},{0x304F, 0xAAAF},{0x3050, 0xAAB0},{0x3051, 0xAAB1},{0x3052, 0xAAB2},{0x3053, 0xAAB3},{0x3054, 0xAAB4},
- {0x3055, 0xAAB5},{0x3056, 0xAAB6},{0x3057, 0xAAB7},{0x3058, 0xAAB8},{0x3059, 0xAAB9},{0x305A, 0xAABA},{0x305B, 0xAABB},{0x305C, 0xAABC},
- {0x305D, 0xAABD},{0x305E, 0xAABE},{0x305F, 0xAABF},{0x3060, 0xAAC0},{0x3061, 0xAAC1},{0x3062, 0xAAC2},{0x3063, 0xAAC3},{0x3064, 0xAAC4},
- {0x3065, 0xAAC5},{0x3066, 0xAAC6},{0x3067, 0xAAC7},{0x3068, 0xAAC8},{0x3069, 0xAAC9},{0x306A, 0xAACA},{0x306B, 0xAACB},{0x306C, 0xAACC},
- {0x306D, 0xAACD},{0x306E, 0xAACE},{0x306F, 0xAACF},{0x3070, 0xAAD0},{0x3071, 0xAAD1},{0x3072, 0xAAD2},{0x3073, 0xAAD3},{0x3074, 0xAAD4},
- {0x3075, 0xAAD5},{0x3076, 0xAAD6},{0x3077, 0xAAD7},{0x3078, 0xAAD8},{0x3079, 0xAAD9},{0x307A, 0xAADA},{0x307B, 0xAADB},{0x307C, 0xAADC},
- {0x307D, 0xAADD},{0x307E, 0xAADE},{0x307F, 0xAADF},{0x3080, 0xAAE0},{0x3081, 0xAAE1},{0x3082, 0xAAE2},{0x3083, 0xAAE3},{0x3084, 0xAAE4},
- {0x3085, 0xAAE5},{0x3086, 0xAAE6},{0x3087, 0xAAE7},{0x3088, 0xAAE8},{0x3089, 0xAAE9},{0x308A, 0xAAEA},{0x308B, 0xAAEB},{0x308C, 0xAAEC},
- {0x308D, 0xAAED},{0x308E, 0xAAEE},{0x308F, 0xAAEF},{0x3090, 0xAAF0},{0x3091, 0xAAF1},{0x3092, 0xAAF2},{0x3093, 0xAAF3},{0x30A1, 0xABA1},
- {0x30A2, 0xABA2},{0x30A3, 0xABA3},{0x30A4, 0xABA4},{0x30A5, 0xABA5},{0x30A6, 0xABA6},{0x30A7, 0xABA7},{0x30A8, 0xABA8},{0x30A9, 0xABA9},
- {0x30AA, 0xABAA},{0x30AB, 0xABAB},{0x30AC, 0xABAC},{0x30AD, 0xABAD},{0x30AE, 0xABAE},{0x30AF, 0xABAF},{0x30B0, 0xABB0},{0x30B1, 0xABB1},
- {0x30B2, 0xABB2},{0x30B3, 0xABB3},{0x30B4, 0xABB4},{0x30B5, 0xABB5},{0x30B6, 0xABB6},{0x30B7, 0xABB7},{0x30B8, 0xABB8},{0x30B9, 0xABB9},
- {0x30BA, 0xABBA},{0x30BB, 0xABBB},{0x30BC, 0xABBC},{0x30BD, 0xABBD},{0x30BE, 0xABBE},{0x30BF, 0xABBF},{0x30C0, 0xABC0},{0x30C1, 0xABC1},
- {0x30C2, 0xABC2},{0x30C3, 0xABC3},{0x30C4, 0xABC4},{0x30C5, 0xABC5},{0x30C6, 0xABC6},{0x30C7, 0xABC7},{0x30C8, 0xABC8},{0x30C9, 0xABC9},
- {0x30CA, 0xABCA},{0x30CB, 0xABCB},{0x30CC, 0xABCC},{0x30CD, 0xABCD},{0x30CE, 0xABCE},{0x30CF, 0xABCF},{0x30D0, 0xABD0},{0x30D1, 0xABD1},
- {0x30D2, 0xABD2},{0x30D3, 0xABD3},{0x30D4, 0xABD4},{0x30D5, 0xABD5},{0x30D6, 0xABD6},{0x30D7, 0xABD7},{0x30D8, 0xABD8},{0x30D9, 0xABD9},
- {0x30DA, 0xABDA},{0x30DB, 0xABDB},{0x30DC, 0xABDC},{0x30DD, 0xABDD},{0x30DE, 0xABDE},{0x30DF, 0xABDF},{0x30E0, 0xABE0},{0x30E1, 0xABE1},
- {0x30E2, 0xABE2},{0x30E3, 0xABE3},{0x30E4, 0xABE4},{0x30E5, 0xABE5},{0x30E6, 0xABE6},{0x30E7, 0xABE7},{0x30E8, 0xABE8},{0x30E9, 0xABE9},
- {0x30EA, 0xABEA},{0x30EB, 0xABEB},{0x30EC, 0xABEC},{0x30ED, 0xABED},{0x30EE, 0xABEE},{0x30EF, 0xABEF},{0x30F0, 0xABF0},{0x30F1, 0xABF1},
- {0x30F2, 0xABF2},{0x30F3, 0xABF3},{0x30F4, 0xABF4},{0x30F5, 0xABF5},{0x30F6, 0xABF6},{0x3131, 0xA4A1},{0x3132, 0xA4A2},{0x3133, 0xA4A3},
- {0x3134, 0xA4A4},{0x3135, 0xA4A5},{0x3136, 0xA4A6},{0x3137, 0xA4A7},{0x3138, 0xA4A8},{0x3139, 0xA4A9},{0x313A, 0xA4AA},{0x313B, 0xA4AB},
- {0x313C, 0xA4AC},{0x313D, 0xA4AD},{0x313E, 0xA4AE},{0x313F, 0xA4AF},{0x3140, 0xA4B0},{0x3141, 0xA4B1},{0x3142, 0xA4B2},{0x3143, 0xA4B3},
- {0x3144, 0xA4B4},{0x3145, 0xA4B5},{0x3146, 0xA4B6},{0x3147, 0xA4B7},{0x3148, 0xA4B8},{0x3149, 0xA4B9},{0x314A, 0xA4BA},{0x314B, 0xA4BB},
- {0x314C, 0xA4BC},{0x314D, 0xA4BD},{0x314E, 0xA4BE},{0x314F, 0xA4BF},{0x3150, 0xA4C0},{0x3151, 0xA4C1},{0x3152, 0xA4C2},{0x3153, 0xA4C3},
- {0x3154, 0xA4C4},{0x3155, 0xA4C5},{0x3156, 0xA4C6},{0x3157, 0xA4C7},{0x3158, 0xA4C8},{0x3159, 0xA4C9},{0x315A, 0xA4CA},{0x315B, 0xA4CB},
- {0x315C, 0xA4CC},{0x315D, 0xA4CD},{0x315E, 0xA4CE},{0x315F, 0xA4CF},{0x3160, 0xA4D0},{0x3161, 0xA4D1},{0x3162, 0xA4D2},{0x3163, 0xA4D3},
- {0x3164, 0xA4D4},{0x3165, 0xA4D5},{0x3166, 0xA4D6},{0x3167, 0xA4D7},{0x3168, 0xA4D8},{0x3169, 0xA4D9},{0x316A, 0xA4DA},{0x316B, 0xA4DB},
- {0x316C, 0xA4DC},{0x316D, 0xA4DD},{0x316E, 0xA4DE},{0x316F, 0xA4DF},{0x3170, 0xA4E0},{0x3171, 0xA4E1},{0x3172, 0xA4E2},{0x3173, 0xA4E3},
- {0x3174, 0xA4E4},{0x3175, 0xA4E5},{0x3176, 0xA4E6},{0x3177, 0xA4E7},{0x3178, 0xA4E8},{0x3179, 0xA4E9},{0x317A, 0xA4EA},{0x317B, 0xA4EB},
- {0x317C, 0xA4EC},{0x317D, 0xA4ED},{0x317E, 0xA4EE},{0x317F, 0xA4EF},{0x3180, 0xA4F0},{0x3181, 0xA4F1},{0x3182, 0xA4F2},{0x3183, 0xA4F3},
- {0x3184, 0xA4F4},{0x3185, 0xA4F5},{0x3186, 0xA4F6},{0x3187, 0xA4F7},{0x3188, 0xA4F8},{0x3189, 0xA4F9},{0x318A, 0xA4FA},{0x318B, 0xA4FB},
- {0x318C, 0xA4FC},{0x318D, 0xA4FD},{0x318E, 0xA4FE},{0x3200, 0xA9B1},{0x3201, 0xA9B2},{0x3202, 0xA9B3},{0x3203, 0xA9B4},{0x3204, 0xA9B5},
- {0x3205, 0xA9B6},{0x3206, 0xA9B7},{0x3207, 0xA9B8},{0x3208, 0xA9B9},{0x3209, 0xA9BA},{0x320A, 0xA9BB},{0x320B, 0xA9BC},{0x320C, 0xA9BD},
- {0x320D, 0xA9BE},{0x320E, 0xA9BF},{0x320F, 0xA9C0},{0x3210, 0xA9C1},{0x3211, 0xA9C2},{0x3212, 0xA9C3},{0x3213, 0xA9C4},{0x3214, 0xA9C5},
- {0x3215, 0xA9C6},{0x3216, 0xA9C7},{0x3217, 0xA9C8},{0x3218, 0xA9C9},{0x3219, 0xA9CA},{0x321A, 0xA9CB},{0x321B, 0xA9CC},{0x321C, 0xA2DF},
- {0x3260, 0xA8B1},{0x3261, 0xA8B2},{0x3262, 0xA8B3},{0x3263, 0xA8B4},{0x3264, 0xA8B5},{0x3265, 0xA8B6},{0x3266, 0xA8B7},{0x3267, 0xA8B8},
- {0x3268, 0xA8B9},{0x3269, 0xA8BA},{0x326A, 0xA8BB},{0x326B, 0xA8BC},{0x326C, 0xA8BD},{0x326D, 0xA8BE},{0x326E, 0xA8BF},{0x326F, 0xA8C0},
- {0x3270, 0xA8C1},{0x3271, 0xA8C2},{0x3272, 0xA8C3},{0x3273, 0xA8C4},{0x3274, 0xA8C5},{0x3275, 0xA8C6},{0x3276, 0xA8C7},{0x3277, 0xA8C8},
- {0x3278, 0xA8C9},{0x3279, 0xA8CA},{0x327A, 0xA8CB},{0x327B, 0xA8CC},{0x327F, 0xA2DE},{0x3380, 0xA7C9},{0x3381, 0xA7CA},{0x3382, 0xA7CB},
- {0x3383, 0xA7CC},{0x3384, 0xA7CD},{0x3388, 0xA7BA},{0x3389, 0xA7BB},{0x338A, 0xA7DC},{0x338B, 0xA7DD},{0x338C, 0xA7DE},{0x338D, 0xA7B6},
- {0x338E, 0xA7B7},{0x338F, 0xA7B8},{0x3390, 0xA7D4},{0x3391, 0xA7D5},{0x3392, 0xA7D6},{0x3393, 0xA7D7},{0x3394, 0xA7D8},{0x3395, 0xA7A1},
- {0x3396, 0xA7A2},{0x3397, 0xA7A3},{0x3398, 0xA7A5},{0x3399, 0xA7AB},{0x339A, 0xA7AC},{0x339B, 0xA7AD},{0x339C, 0xA7AE},{0x339D, 0xA7AF},
- {0x339E, 0xA7B0},{0x339F, 0xA7B1},{0x33A0, 0xA7B2},{0x33A1, 0xA7B3},{0x33A2, 0xA7B4},{0x33A3, 0xA7A7},{0x33A4, 0xA7A8},{0x33A5, 0xA7A9},
- {0x33A6, 0xA7AA},{0x33A7, 0xA7BD},{0x33A8, 0xA7BE},{0x33A9, 0xA7E5},{0x33AA, 0xA7E6},{0x33AB, 0xA7E7},{0x33AC, 0xA7E8},{0x33AD, 0xA7E1},
- {0x33AE, 0xA7E2},{0x33AF, 0xA7E3},{0x33B0, 0xA7BF},{0x33B1, 0xA7C0},{0x33B2, 0xA7C1},{0x33B3, 0xA7C2},{0x33B4, 0xA7C3},{0x33B5, 0xA7C4},
- {0x33B6, 0xA7C5},{0x33B7, 0xA7C6},{0x33B8, 0xA7C7},{0x33B9, 0xA7C8},{0x33BA, 0xA7CE},{0x33BB, 0xA7CF},{0x33BC, 0xA7D0},{0x33BD, 0xA7D1},
- {0x33BE, 0xA7D2},{0x33BF, 0xA7D3},{0x33C0, 0xA7DA},{0x33C1, 0xA7DB},{0x33C2, 0xA2E3},{0x33C3, 0xA7EC},{0x33C4, 0xA7A6},{0x33C5, 0xA7E0},
- {0x33C6, 0xA7EF},{0x33C7, 0xA2E1},{0x33C8, 0xA7BC},{0x33C9, 0xA7ED},{0x33CA, 0xA7B5},{0x33CF, 0xA7B9},{0x33D0, 0xA7EA},{0x33D3, 0xA7EB},
- {0x33D6, 0xA7DF},{0x33D8, 0xA2E4},{0x33DB, 0xA7E4},{0x33DC, 0xA7EE},{0x33DD, 0xA7E9},{0x4E00, 0xECE9},{0x4E01, 0xEFCB},{0x4E03, 0xF6D2},
- {0x4E07, 0xD8B2},{0x4E08, 0xEDDB},{0x4E09, 0xDFB2},{0x4E0A, 0xDFBE},{0x4E0B, 0xF9BB},{0x4E0D, 0xDCF4},{0x4E11, 0xF5E4},{0x4E14, 0xF3A6},
- {0x4E15, 0xDDE0},{0x4E16, 0xE1A6},{0x4E18, 0xCEF8},{0x4E19, 0xDCB0},{0x4E1E, 0xE3AA},{0x4E2D, 0xF1E9},{0x4E32, 0xCDFA},{0x4E38, 0xFCAF},
- {0x4E39, 0xD3A1},{0x4E3B, 0xF1AB},{0x4E42, 0xE7D1},{0x4E43, 0xD2AC},{0x4E45, 0xCEF9},{0x4E4B, 0xF1FD},{0x4E4D, 0xDEBF},{0x4E4E, 0xFBBA},
- {0x4E4F, 0xF9B9},{0x4E56, 0xCED2},{0x4E58, 0xE3AB},{0x4E59, 0xEBE0},{0x4E5D, 0xCEFA},{0x4E5E, 0xCBF7},{0x4E5F, 0xE5A5},{0x4E6B, 0xCAE1},
- {0x4E6D, 0xD4CC},{0x4E73, 0xEAE1},{0x4E76, 0xDCE3},{0x4E77, 0xDFAD},{0x4E7E, 0xCBEB},{0x4E82, 0xD5AF},{0x4E86, 0xD6F5},{0x4E88, 0xE5F8},
- {0x4E8B, 0xDEC0},{0x4E8C, 0xECA3},{0x4E8E, 0xE9CD},{0x4E90, 0xEAA7},{0x4E91, 0xE9F6},{0x4E92, 0xFBBB},{0x4E94, 0xE7E9},{0x4E95, 0xEFCC},
- {0x4E98, 0xD0E6},{0x4E9B, 0xDEC1},{0x4E9E, 0xE4AC},{0x4EA1, 0xD8CC},{0x4EA2, 0xF9F1},{0x4EA4, 0xCEDF},{0x4EA5, 0xFAA4},{0x4EA6, 0xE6B2},
- {0x4EA8, 0xFAFB},{0x4EAB, 0xFABD},{0x4EAC, 0xCCC8},{0x4EAD, 0xEFCD},{0x4EAE, 0xD5D5},{0x4EB6, 0xD3A2},{0x4EBA, 0xECD1},{0x4EC0, 0xE4A7},
- {0x4EC1, 0xECD2},{0x4EC4, 0xF6B1},{0x4EC7, 0xCEFB},{0x4ECA, 0xD0D1},{0x4ECB, 0xCBBF},{0x4ECD, 0xEDA4},{0x4ED4, 0xEDA8},{0x4ED5, 0xDEC2},
- {0x4ED6, 0xF6E2},{0x4ED7, 0xEDDC},{0x4ED8, 0xDCF5},{0x4ED9, 0xE0B9},{0x4EDD, 0xD4CE},{0x4EDF, 0xF4B5},{0x4EE3, 0xD3DB},{0x4EE4, 0xD6B5},
- {0x4EE5, 0xECA4},{0x4EF0, 0xE4E6},{0x4EF2, 0xF1EA},{0x4EF6, 0xCBEC},{0x4EF7, 0xCBC0},{0x4EFB, 0xECF2},{0x4F01, 0xD0EA},{0x4F09, 0xF9F2},
- {0x4F0A, 0xECA5},{0x4F0B, 0xD0DF},{0x4F0D, 0xE7EA},{0x4F0E, 0xD0EB},{0x4F0F, 0xDCD1},{0x4F10, 0xDBE9},{0x4F11, 0xFDCC},{0x4F2F, 0xDBD7},
- {0x4F34, 0xDAE1},{0x4F36, 0xD6B6},{0x4F38, 0xE3DF},{0x4F3A, 0xDEC3},{0x4F3C, 0xDEC4},{0x4F3D, 0xCAA1},{0x4F43, 0xEEEC},{0x4F46, 0xD3A3},
- {0x4F47, 0xEEB7},{0x4F48, 0xF8CF},{0x4F4D, 0xEAC8},{0x4F4E, 0xEEB8},{0x4F4F, 0xF1AC},{0x4F50, 0xF1A5},{0x4F51, 0xE9CE},{0x4F55, 0xF9BC},
- {0x4F59, 0xE5F9},{0x4F5A, 0xECEA},{0x4F5B, 0xDDD6},{0x4F5C, 0xEDC2},{0x4F69, 0xF8A5},{0x4F6F, 0xE5BA},{0x4F70, 0xDBD8},{0x4F73, 0xCAA2},
- {0x4F76, 0xD1CD},{0x4F7A, 0xEEED},{0x4F7E, 0xECEB},{0x4F7F, 0xDEC5},{0x4F81, 0xE3E0},{0x4F83, 0xCAC9},{0x4F84, 0xF2E9},{0x4F86, 0xD5CE},
- {0x4F88, 0xF6B6},{0x4F8A, 0xCEC2},{0x4F8B, 0xD6C7},{0x4F8D, 0xE3B4},{0x4F8F, 0xF1AD},{0x4F91, 0xEAE2},{0x4F96, 0xD7C2},{0x4F98, 0xF3A7},
- {0x4F9B, 0xCDEA},{0x4F9D, 0xEBEE},{0x4FAE, 0xD9B2},{0x4FAF, 0xFDA5},{0x4FB5, 0xF6D5},{0x4FB6, 0xD5E2},{0x4FBF, 0xF8B5},{0x4FC2, 0xCCF5},
- {0x4FC3, 0xF5B5},{0x4FC4, 0xE4AD},{0x4FC9, 0xE7EB},{0x4FCA, 0xF1D5},{0x4FCE, 0xF0BB},{0x4FD1, 0xE9B5},{0x4FD3, 0xCCC9},{0x4FD4, 0xFAD5},
- {0x4FD7, 0xE1D4},{0x4FDA, 0xD7D6},{0x4FDD, 0xDCC1},{0x4FDF, 0xDEC6},{0x4FE0, 0xFAEF},{0x4FE1, 0xE3E1},{0x4FEE, 0xE1F3},{0x4FEF, 0xDCF6},
- {0x4FF1, 0xCEFC},{0x4FF3, 0xDBC4},{0x4FF5, 0xF8F1},{0x4FF8, 0xDCE4},{0x4FFA, 0xE5EF},{0x5002, 0xDCB1},{0x5006, 0xD5D6},{0x5009, 0xF3DA},
- {0x500B, 0xCBC1},{0x500D, 0xDBC3},{0x5011, 0xD9FA},{0x5012, 0xD3EE},{0x5016, 0xFAB8},{0x5019, 0xFDA6},{0x501A, 0xEBEF},{0x501C, 0xF4A6},
- {0x501E, 0xCCCA},{0x501F, 0xF3A8},{0x5021, 0xF3DB},{0x5023, 0xDBA7},{0x5024, 0xF6B7},{0x5026, 0xCFE6},{0x5027, 0xF0F2},{0x5028, 0xCBDA},
- {0x502A, 0xE7D2},{0x502B, 0xD7C3},{0x502C, 0xF6F0},{0x502D, 0xE8DE},{0x503B, 0xE5A6},{0x5043, 0xE5E7},{0x5047, 0xCAA3},{0x5048, 0xCCA7},
- {0x5049, 0xEAC9},{0x504F, 0xF8B6},{0x5055, 0xFAA5},{0x505A, 0xF1AE},{0x505C, 0xEFCE},{0x5065, 0xCBED},{0x5074, 0xF6B0},{0x5075, 0xEFCF},
- {0x5076, 0xE9CF},{0x5078, 0xF7DE},{0x5080, 0xCED3},{0x5085, 0xDCF7},{0x508D, 0xDBA8},{0x5091, 0xCBF8},{0x5098, 0xDFA1},{0x5099, 0xDDE1},
- {0x50AC, 0xF5CA},{0x50AD, 0xE9B6},{0x50B2, 0xE7EC},{0x50B3, 0xEEEE},{0x50B5, 0xF3F0},{0x50B7, 0xDFBF},{0x50BE, 0xCCCB},{0x50C5, 0xD0C1},
- {0x50C9, 0xF4D2},{0x50CA, 0xE0BA},{0x50CF, 0xDFC0},{0x50D1, 0xCEE0},{0x50D5, 0xDCD2},{0x50D6, 0xFDEA},{0x50DA, 0xD6F6},{0x50DE, 0xEACA},
- {0x50E5, 0xE8E9},{0x50E7, 0xE3AC},{0x50ED, 0xF3D0},{0x50F9, 0xCAA4},{0x50FB, 0xDBF8},{0x50FF, 0xDEC7},{0x5100, 0xEBF0},{0x5101, 0xF1D6},
- {0x5104, 0xE5E2},{0x5106, 0xCCCC},{0x5109, 0xCBFB},{0x5112, 0xEAE3},{0x511F, 0xDFC1},{0x5121, 0xD6ED},{0x512A, 0xE9D0},{0x5132, 0xEEB9},
- {0x5137, 0xD5E3},{0x513A, 0xD1D3},{0x513C, 0xE5F0},{0x5140, 0xE8B4},{0x5141, 0xEBC3},{0x5143, 0xEAAA},{0x5144, 0xFAFC},{0x5145, 0xF5F6},
- {0x5146, 0xF0BC},{0x5147, 0xFDD4},{0x5148, 0xE0BB},{0x5149, 0xCEC3},{0x514B, 0xD0BA},{0x514C, 0xF7BA},{0x514D, 0xD8F3},{0x514E, 0xF7CD},
- {0x5152, 0xE4AE},{0x515C, 0xD4DF},{0x5162, 0xD0E7},{0x5165, 0xECFD},{0x5167, 0xD2AE},{0x5168, 0xEEEF},{0x5169, 0xD5D7},{0x516A, 0xEAE4},
- {0x516B, 0xF8A2},{0x516C, 0xCDEB},{0x516D, 0xD7BF},{0x516E, 0xFBB1},{0x5171, 0xCDEC},{0x5175, 0xDCB2},{0x5176, 0xD0EC},{0x5177, 0xCEFD},
- {0x5178, 0xEEF0},{0x517C, 0xCCC2},{0x5180, 0xD0ED},{0x5186, 0xE5F7},{0x518A, 0xF3FC},{0x518D, 0xEEA2},{0x5192, 0xD9B3},{0x5195, 0xD8F4},
- {0x5197, 0xE9B7},{0x51A0, 0xCEAE},{0x51A5, 0xD9A2},{0x51AA, 0xD8F1},{0x51AC, 0xD4CF},{0x51B6, 0xE5A7},{0x51B7, 0xD5D2},{0x51BD, 0xD6A9},
- {0x51C4, 0xF4A2},{0x51C6, 0xF1D7},{0x51C9, 0xD5D8},{0x51CB, 0xF0BD},{0x51CC, 0xD7D0},{0x51CD, 0xD4D0},{0x51DC, 0xD7CF},{0x51DD, 0xEBEA},
- {0x51DE, 0xFDEB},{0x51E1, 0xDBED},{0x51F0, 0xFCC5},{0x51F1, 0xCBC2},{0x51F6, 0xFDD5},{0x51F8, 0xF4C8},{0x51F9, 0xE8EA},{0x51FA, 0xF5F3},
- {0x51FD, 0xF9DE},{0x5200, 0xD3EF},{0x5203, 0xECD3},{0x5206, 0xDDC2},{0x5207, 0xEFB7},{0x5208, 0xE7D4},{0x520A, 0xCACA},{0x520E, 0xD9FB},
- {0x5211, 0xFAFD},{0x5217, 0xD6AA},{0x521D, 0xF4F8},{0x5224, 0xF7F7},{0x5225, 0xDCAC},{0x5229, 0xD7D7},{0x522A, 0xDFA2},{0x522E, 0xCEBE},
- {0x5230, 0xD3F0},{0x5236, 0xF0A4},{0x5237, 0xE1EC},{0x5238, 0xCFE7},{0x5239, 0xF3CB},{0x523A, 0xEDA9},{0x523B, 0xCABE},{0x5243, 0xF4EF},
- {0x5247, 0xF6CE},{0x524A, 0xDEFB},{0x524B, 0xD0BB},{0x524C, 0xD5B7},{0x524D, 0xEEF1},{0x5254, 0xF4A8},{0x5256, 0xDCF8},{0x525B, 0xCBA7},
- {0x525D, 0xDACE},{0x5261, 0xE0E6},{0x5269, 0xEDA5},{0x526A, 0xEEF2},{0x526F, 0xDCF9},{0x5272, 0xF9DC},{0x5275, 0xF3DC},{0x527D, 0xF8F2},
- {0x527F, 0xF4F9},{0x5283, 0xFCF1},{0x5287, 0xD0BC},{0x5288, 0xDBF9},{0x5289, 0xD7B1},{0x528D, 0xCBFC},{0x5291, 0xF0A5},{0x5292, 0xCBFD},
- {0x529B, 0xD5F4},{0x529F, 0xCDED},{0x52A0, 0xCAA5},{0x52A3, 0xD6AB},{0x52A4, 0xD0C2},{0x52A9, 0xF0BE},{0x52AA, 0xD2BD},{0x52AB, 0xCCA4},
- {0x52BE, 0xFAB6},{0x52C1, 0xCCCD},{0x52C3, 0xDAFA},{0x52C5, 0xF6CF},{0x52C7, 0xE9B8},{0x52C9, 0xD8F5},{0x52CD, 0xCCCE},{0x52D2, 0xD7CD},
- {0x52D5, 0xD4D1},{0x52D6, 0xE9ED},{0x52D8, 0xCAEB},{0x52D9, 0xD9E2},{0x52DB, 0xFDB2},{0x52DD, 0xE3AD},{0x52DE, 0xD6CC},{0x52DF, 0xD9B4},
- {0x52E2, 0xE1A7},{0x52E3, 0xEED3},{0x52E4, 0xD0C3},{0x52F3, 0xFDB3},{0x52F5, 0xD5E4},{0x52F8, 0xCFE8},{0x52FA, 0xEDC3},{0x52FB, 0xD0B2},
- {0x52FE, 0xCEFE},{0x52FF, 0xDAA8},{0x5305, 0xF8D0},{0x5308, 0xFDD6},{0x530D, 0xF8D1},{0x530F, 0xF8D2},{0x5310, 0xDCD3},{0x5315, 0xDDE2},
- {0x5316, 0xFBF9},{0x5317, 0xDDC1},{0x5319, 0xE3B5},{0x5320, 0xEDDD},{0x5321, 0xCEC4},{0x5323, 0xCBA1},{0x532A, 0xDDE3},{0x532F, 0xFCDD},
- {0x5339, 0xF9AF},{0x533F, 0xD2FB},{0x5340, 0xCFA1},{0x5341, 0xE4A8},{0x5343, 0xF4B6},{0x5344, 0xECFE},{0x5347, 0xE3AE},{0x5348, 0xE7ED},
- {0x5349, 0xFDC1},{0x534A, 0xDAE2},{0x534D, 0xD8B3},{0x5351, 0xDDE4},{0x5352, 0xF0EF},{0x5353, 0xF6F1},{0x5354, 0xFAF0},{0x5357, 0xD1F5},
- {0x535A, 0xDACF},{0x535C, 0xDCD4},{0x535E, 0xDCA6},{0x5360, 0xEFBF},{0x5366, 0xCECF},{0x5368, 0xE0D9},{0x536F, 0xD9D6},{0x5370, 0xECD4},
- {0x5371, 0xEACB},{0x5374, 0xCABF},{0x5375, 0xD5B0},{0x5377, 0xCFE9},{0x537D, 0xF1ED},{0x537F, 0xCCCF},{0x5384, 0xE4F8},{0x5393, 0xE4ED},
- {0x5398, 0xD7D8},{0x539A, 0xFDA7},{0x539F, 0xEAAB},{0x53A0, 0xF6B2},{0x53A5, 0xCFF0},{0x53A6, 0xF9BD},{0x53AD, 0xE6F4},{0x53BB, 0xCBDB},
- {0x53C3, 0xF3D1},{0x53C8, 0xE9D1},{0x53C9, 0xF3A9},{0x53CA, 0xD0E0},{0x53CB, 0xE9D2},{0x53CD, 0xDAE3},{0x53D4, 0xE2D2},{0x53D6, 0xF6A2},
- {0x53D7, 0xE1F4},{0x53DB, 0xDAE4},{0x53E1, 0xE7D5},{0x53E2, 0xF5BF},{0x53E3, 0xCFA2},{0x53E4, 0xCDAF},{0x53E5, 0xCFA3},{0x53E9, 0xCDB0},
- {0x53EA, 0xF1FE},{0x53EB, 0xD0A3},{0x53EC, 0xE1AF},{0x53ED, 0xF8A3},{0x53EF, 0xCAA6},{0x53F0, 0xF7BB},{0x53F1, 0xF2EA},{0x53F2, 0xDEC8},
- {0x53F3, 0xE9D3},{0x53F8, 0xDEC9},{0x5403, 0xFDDE},{0x5404, 0xCAC0},{0x5408, 0xF9EA},{0x5409, 0xD1CE},{0x540A, 0xEED4},{0x540C, 0xD4D2},
- {0x540D, 0xD9A3},{0x540E, 0xFDA8},{0x540F, 0xD7D9},{0x5410, 0xF7CE},{0x5411, 0xFABE},{0x541B, 0xCFD6},{0x541D, 0xD7F0},{0x541F, 0xEBE1},
- {0x5420, 0xF8C5},{0x5426, 0xDCFA},{0x5429, 0xDDC3},{0x542B, 0xF9DF},{0x5433, 0xE7EF},{0x5438, 0xFDE5},{0x5439, 0xF6A3},{0x543B, 0xD9FC},
- {0x543C, 0xFDA9},{0x543E, 0xE7EE},{0x5442, 0xD5E5},{0x5448, 0xEFD0},{0x544A, 0xCDB1},{0x5451, 0xF7A2},{0x5468, 0xF1B2},{0x546A, 0xF1B1},
- {0x5471, 0xCDB2},{0x5473, 0xDAAB},{0x5475, 0xCAA7},{0x547B, 0xE3E2},{0x547C, 0xFBBC},{0x547D, 0xD9A4},{0x5480, 0xEEBA},{0x5486, 0xF8D3},
- {0x548C, 0xFBFA},{0x548E, 0xCFA4},{0x5490, 0xDCFB},{0x54A4, 0xF6E3},{0x54A8, 0xEDAA},{0x54AB, 0xF2A1},{0x54AC, 0xCEE1},{0x54B3, 0xFAA6},
- {0x54B8, 0xF9E0},{0x54BD, 0xECD6},{0x54C0, 0xE4EE},{0x54C1, 0xF9A1},{0x54C4, 0xFBEF},{0x54C8, 0xF9EB},{0x54C9, 0xEEA3},{0x54E1, 0xEAAC},
- {0x54E5, 0xCAA8},{0x54E8, 0xF4FA},{0x54ED, 0xCDD6},{0x54EE, 0xFCF6},{0x54F2, 0xF4C9},{0x54FA, 0xF8D4},{0x5504, 0xF8A6},{0x5506, 0xDECA},
- {0x5507, 0xF2C6},{0x550E, 0xD7DA},{0x5510, 0xD3D0},{0x551C, 0xD8C5},{0x552F, 0xEAE6},{0x5531, 0xF3DD},{0x5535, 0xE4DA},{0x553E, 0xF6E4},
- {0x5544, 0xF6F2},{0x5546, 0xDFC2},{0x554F, 0xD9FD},{0x5553, 0xCCF6},{0x5556, 0xD3BA},{0x555E, 0xE4AF},{0x5563, 0xF9E1},{0x557C, 0xF0A6},
- {0x5580, 0xCBD3},{0x5584, 0xE0BC},{0x5586, 0xF4CA},{0x5587, 0xD4FA},{0x5589, 0xFDAA},{0x558A, 0xF9E2},{0x5598, 0xF4B7},{0x5599, 0xFDC2},
- {0x559A, 0xFCB0},{0x559C, 0xFDEC},{0x559D, 0xCAE2},{0x55A7, 0xFDBD},{0x55A9, 0xEAE7},{0x55AA, 0xDFC3},{0x55AB, 0xD1D2},{0x55AC, 0xCEE2},
- {0x55AE, 0xD3A4},{0x55C5, 0xFDAB},{0x55C7, 0xDFE0},{0x55D4, 0xF2C7},{0x55DA, 0xE7F0},{0x55DC, 0xD0EE},{0x55DF, 0xF3AA},{0x55E3, 0xDECB},
- {0x55E4, 0xF6B8},{0x55FD, 0xE1F5},{0x55FE, 0xF1B3},{0x5606, 0xF7A3},{0x5609, 0xCAA9},{0x5614, 0xCFA5},{0x5617, 0xDFC4},{0x562F, 0xE1B0},
- {0x5632, 0xF0BF},{0x5634, 0xF6A4},{0x5636, 0xE3B6},{0x5653, 0xFAC6},{0x5668, 0xD0EF},{0x566B, 0xFDED},{0x5674, 0xDDC4},{0x5686, 0xFCF7},
- {0x56A5, 0xE6BF},{0x56AC, 0xDEAD},{0x56AE, 0xFABF},{0x56B4, 0xE5F1},{0x56BC, 0xEDC4},{0x56CA, 0xD2A5},{0x56CD, 0xFDEE},{0x56D1, 0xF5B6},
- {0x56DA, 0xE1F6},{0x56DB, 0xDECC},{0x56DE, 0xFCDE},{0x56E0, 0xECD7},{0x56F0, 0xCDDD},{0x56F9, 0xD6B7},{0x56FA, 0xCDB3},{0x5703, 0xF8D5},
- {0x5704, 0xE5D8},{0x5708, 0xCFEA},{0x570B, 0xCFD0},{0x570D, 0xEACC},{0x5712, 0xEAAE},{0x5713, 0xEAAD},{0x5716, 0xD3F1},{0x5718, 0xD3A5},
- {0x571F, 0xF7CF},{0x5728, 0xEEA4},{0x572D, 0xD0A4},{0x5730, 0xF2A2},{0x573B, 0xD0F0},{0x5740, 0xF2A3},{0x5742, 0xF7F8},{0x5747, 0xD0B3},
- {0x574A, 0xDBA9},{0x574D, 0xD3BB},{0x574E, 0xCAEC},{0x5750, 0xF1A6},{0x5751, 0xCBD5},{0x5761, 0xF7E7},{0x5764, 0xCDDE},{0x5766, 0xF7A4},
- {0x576A, 0xF8C0},{0x576E, 0xD3DD},{0x5770, 0xCCD0},{0x5775, 0xCFA6},{0x577C, 0xF6F3},{0x5782, 0xE1F7},{0x5788, 0xD3DC},{0x578B, 0xFAFE},
- {0x5793, 0xFAA7},{0x57A0, 0xEBD9},{0x57A2, 0xCFA7},{0x57A3, 0xEAAF},{0x57C3, 0xE4EF},{0x57C7, 0xE9B9},{0x57C8, 0xF1D8},{0x57CB, 0xD8D8},
- {0x57CE, 0xE0F2},{0x57DF, 0xE6B4},{0x57E0, 0xDCFC},{0x57F0, 0xF3F1},{0x57F4, 0xE3D0},{0x57F7, 0xF2FB},{0x57F9, 0xDBC6},{0x57FA, 0xD0F1},
- {0x57FC, 0xD0F2},{0x5800, 0xCFDC},{0x5802, 0xD3D1},{0x5805, 0xCCB1},{0x5806, 0xF7D8},{0x5808, 0xCBA8},{0x5809, 0xEBBC},{0x580A, 0xE4BE},
- {0x581E, 0xF4DC},{0x5821, 0xDCC2},{0x5824, 0xF0A7},{0x5827, 0xE6C0},{0x582A, 0xCAED},{0x582F, 0xE8EB},{0x5830, 0xE5E8},{0x5831, 0xDCC3},
- {0x5834, 0xEDDE},{0x5835, 0xD3F2},{0x583A, 0xCCF7},{0x584A, 0xCED4},{0x584B, 0xE7AB},{0x584F, 0xCBC3},{0x5851, 0xE1B1},{0x5854, 0xF7B2},
- {0x5857, 0xD3F3},{0x5858, 0xD3D2},{0x585A, 0xF5C0},{0x585E, 0xDFDD},{0x5861, 0xEEF3},{0x5862, 0xE7F1},{0x5864, 0xFDB4},{0x5875, 0xF2C8},
- {0x5879, 0xF3D2},{0x587C, 0xEEF4},{0x587E, 0xE2D3},{0x5883, 0xCCD1},{0x5885, 0xDFEA},{0x5889, 0xE9BA},{0x5893, 0xD9D7},{0x589C, 0xF5CD},
- {0x589E, 0xF1F2},{0x589F, 0xFAC7},{0x58A8, 0xD9F8},{0x58A9, 0xD4C2},{0x58AE, 0xF6E5},{0x58B3, 0xDDC5},{0x58BA, 0xE7F2},{0x58BB, 0xEDDF},
- {0x58BE, 0xCACB},{0x58C1, 0xDBFA},{0x58C5, 0xE8B5},{0x58C7, 0xD3A6},{0x58CE, 0xFDB5},{0x58D1, 0xF9C9},{0x58D3, 0xE4E2},{0x58D5, 0xFBBD},
- {0x58D8, 0xD7A4},{0x58D9, 0xCEC5},{0x58DE, 0xCED5},{0x58DF, 0xD6E6},{0x58E4, 0xE5BD},{0x58EB, 0xDECD},{0x58EC, 0xECF3},{0x58EF, 0xEDE0},
- {0x58F9, 0xECEC},{0x58FA, 0xFBBE},{0x58FB, 0xDFEB},{0x58FD, 0xE1F8},{0x590F, 0xF9BE},{0x5914, 0xD0F3},{0x5915, 0xE0AA},{0x5916, 0xE8E2},
- {0x5919, 0xE2D4},{0x591A, 0xD2FD},{0x591C, 0xE5A8},{0x5922, 0xD9D3},{0x5927, 0xD3DE},{0x5929, 0xF4B8},{0x592A, 0xF7BC},{0x592B, 0xDCFD},
- {0x592D, 0xE8EC},{0x592E, 0xE4E7},{0x5931, 0xE3F7},{0x5937, 0xECA8},{0x593E, 0xFAF1},{0x5944, 0xE5F2},{0x5947, 0xD0F4},{0x5948, 0xD2AF},
- {0x5949, 0xDCE5},{0x594E, 0xD0A5},{0x594F, 0xF1B4},{0x5950, 0xFCB1},{0x5951, 0xCCF8},{0x5954, 0xDDC6},{0x5955, 0xFAD1},{0x5957, 0xF7DF},
- {0x595A, 0xFAA8},{0x5960, 0xEEF5},{0x5962, 0xDECE},{0x5967, 0xE7F3},{0x596A, 0xF7AC},{0x596B, 0xEBC4},{0x596C, 0xEDE1},{0x596D, 0xE0AB},
- {0x596E, 0xDDC7},{0x5973, 0xD2B3},{0x5974, 0xD2BF},{0x5978, 0xCACC},{0x597D, 0xFBBF},{0x5982, 0xE5FD},{0x5983, 0xDDE5},{0x5984, 0xD8CD},
- {0x598A, 0xECF4},{0x5993, 0xD0F5},{0x5996, 0xE8ED},{0x5997, 0xD0D2},{0x5999, 0xD9D8},{0x59A5, 0xF6E6},{0x59A8, 0xDBAA},{0x59AC, 0xF7E0},
- {0x59B9, 0xD8D9},{0x59BB, 0xF4A3},{0x59BE, 0xF4DD},{0x59C3, 0xEFD1},{0x59C6, 0xD9B5},{0x59C9, 0xEDAB},{0x59CB, 0xE3B7},{0x59D0, 0xEEBB},
- {0x59D1, 0xCDB4},{0x59D3, 0xE0F3},{0x59D4, 0xEACD},{0x59D9, 0xECF5},{0x59DA, 0xE8EE},{0x59DC, 0xCBA9},{0x59DD, 0xF1AF},{0x59E6, 0xCACD},
- {0x59E8, 0xECA9},{0x59EA, 0xF2EB},{0x59EC, 0xFDEF},{0x59EE, 0xF9F3},{0x59F8, 0xE6C1},{0x59FB, 0xECD8},{0x59FF, 0xEDAC},{0x5A01, 0xEACE},
- {0x5A03, 0xE8DF},{0x5A11, 0xDECF},{0x5A18, 0xD2A6},{0x5A1B, 0xE7F4},{0x5A1C, 0xD1D6},{0x5A1F, 0xE6C2},{0x5A20, 0xE3E3},{0x5A25, 0xE4B0},
- {0x5A29, 0xD8B4},{0x5A36, 0xF6A5},{0x5A3C, 0xF3DE},{0x5A41, 0xD7A5},{0x5A46, 0xF7E8},{0x5A49, 0xE8C6},{0x5A5A, 0xFBE6},{0x5A62, 0xDDE6},
- {0x5A66, 0xDCFE},{0x5A92, 0xD8DA},{0x5A9A, 0xDAAC},{0x5A9B, 0xEAB0},{0x5AA4, 0xE3B8},{0x5AC1, 0xCAAA},{0x5AC2, 0xE1F9},{0x5AC4, 0xEAB1},
- {0x5AC9, 0xF2EC},{0x5ACC, 0xFAEE},{0x5AE1, 0xEED5},{0x5AE6, 0xF9F4},{0x5AE9, 0xD2EC},{0x5B05, 0xFBFB},{0x5B09, 0xFDF0},{0x5B0B, 0xE0BD},
- {0x5B0C, 0xCEE3},{0x5B16, 0xF8C6},{0x5B2A, 0xDEAE},{0x5B40, 0xDFC5},{0x5B43, 0xE5BE},{0x5B50, 0xEDAD},{0x5B51, 0xFAEA},{0x5B54, 0xCDEE},
- {0x5B55, 0xEDA6},{0x5B57, 0xEDAE},{0x5B58, 0xF0ED},{0x5B5A, 0xDDA1},{0x5B5C, 0xEDAF},{0x5B5D, 0xFCF8},{0x5B5F, 0xD8EB},{0x5B63, 0xCCF9},
- {0x5B64, 0xCDB5},{0x5B69, 0xFAA9},{0x5B6B, 0xE1DD},{0x5B70, 0xE2D5},{0x5B71, 0xEDCF},{0x5B75, 0xDDA2},{0x5B78, 0xF9CA},{0x5B7A, 0xEAE8},
- {0x5B7C, 0xE5ED},{0x5B85, 0xD3EB},{0x5B87, 0xE9D4},{0x5B88, 0xE1FA},{0x5B89, 0xE4CC},{0x5B8B, 0xE1E4},{0x5B8C, 0xE8C7},{0x5B8F, 0xCEDB},
- {0x5B93, 0xDCD5},{0x5B95, 0xF7B5},{0x5B96, 0xFCF3},{0x5B97, 0xF0F3},{0x5B98, 0xCEAF},{0x5B99, 0xF1B5},{0x5B9A, 0xEFD2},{0x5B9B, 0xE8C8},
- {0x5B9C, 0xEBF1},{0x5BA2, 0xCBD4},{0x5BA3, 0xE0BE},{0x5BA4, 0xE3F8},{0x5BA5, 0xEAE9},{0x5BA6, 0xFCB2},{0x5BAC, 0xE0F4},{0x5BAE, 0xCFE0},
- {0x5BB0, 0xEEA5},{0x5BB3, 0xFAAA},{0x5BB4, 0xE6C3},{0x5BB5, 0xE1B2},{0x5BB6, 0xCAAB},{0x5BB8, 0xE3E4},{0x5BB9, 0xE9BB},{0x5BBF, 0xE2D6},
- {0x5BC0, 0xF3F2},{0x5BC2, 0xEED6},{0x5BC3, 0xEAB2},{0x5BC4, 0xD0F6},{0x5BC5, 0xECD9},{0x5BC6, 0xDACB},{0x5BC7, 0xCFA8},{0x5BCC, 0xDDA3},
- {0x5BD0, 0xD8DB},{0x5BD2, 0xF9CE},{0x5BD3, 0xE9D5},{0x5BD4, 0xE3D1},{0x5BD7, 0xD2BC},{0x5BDE, 0xD8AC},{0x5BDF, 0xF3CC},{0x5BE1, 0xCDFB},
- {0x5BE2, 0xF6D6},{0x5BE4, 0xE7F5},{0x5BE5, 0xE8EF},{0x5BE6, 0xE3F9},{0x5BE7, 0xD2BB},{0x5BE8, 0xF3F3},{0x5BE9, 0xE3FB},{0x5BEB, 0xDED0},
- {0x5BEC, 0xCEB0},{0x5BEE, 0xD6F7},{0x5BEF, 0xF1D9},{0x5BF5, 0xF5C1},{0x5BF6, 0xDCC4},{0x5BF8, 0xF5BB},{0x5BFA, 0xDED1},{0x5C01, 0xDCE6},
- {0x5C04, 0xDED2},{0x5C07, 0xEDE2},{0x5C08, 0xEEF6},{0x5C09, 0xEACF},{0x5C0A, 0xF0EE},{0x5C0B, 0xE3FC},{0x5C0D, 0xD3DF},{0x5C0E, 0xD3F4},
- {0x5C0F, 0xE1B3},{0x5C11, 0xE1B4},{0x5C16, 0xF4D3},{0x5C19, 0xDFC6},{0x5C24, 0xE9D6},{0x5C28, 0xDBAB},{0x5C31, 0xF6A6},{0x5C38, 0xE3B9},
- {0x5C39, 0xEBC5},{0x5C3A, 0xF4A9},{0x5C3B, 0xCDB6},{0x5C3C, 0xD2F9},{0x5C3E, 0xDAAD},{0x5C3F, 0xD2E3},{0x5C40, 0xCFD1},{0x5C45, 0xCBDC},
- {0x5C46, 0xCCFA},{0x5C48, 0xCFDD},{0x5C4B, 0xE8A9},{0x5C4D, 0xE3BB},{0x5C4E, 0xE3BA},{0x5C51, 0xE0DA},{0x5C55, 0xEEF7},{0x5C5B, 0xDCB3},
- {0x5C60, 0xD3F5},{0x5C62, 0xD7A6},{0x5C64, 0xF6B5},{0x5C65, 0xD7DB},{0x5C6C, 0xE1D5},{0x5C6F, 0xD4EA},{0x5C71, 0xDFA3},{0x5C79, 0xFDDF},
- {0x5C90, 0xD0F7},{0x5C91, 0xEDD4},{0x5CA1, 0xCBAA},{0x5CA9, 0xE4DB},{0x5CAB, 0xE1FB},{0x5CAC, 0xCBA2},{0x5CB1, 0xD3E0},{0x5CB3, 0xE4BF},
- {0x5CB5, 0xFBC0},{0x5CB7, 0xDABE},{0x5CB8, 0xE4CD},{0x5CBA, 0xD6B9},{0x5CBE, 0xEFC0},{0x5CC0, 0xE1FC},{0x5CD9, 0xF6B9},{0x5CE0, 0xDFC7},
- {0x5CE8, 0xE4B1},{0x5CEF, 0xDCE7},{0x5CF0, 0xDCE8},{0x5CF4, 0xFAD6},{0x5CF6, 0xD3F6},{0x5CFB, 0xF1DA},{0x5CFD, 0xFAF2},{0x5D07, 0xE2FD},
- {0x5D0D, 0xD5CF},{0x5D0E, 0xD0F8},{0x5D11, 0xCDDF},{0x5D14, 0xF5CB},{0x5D16, 0xE4F0},{0x5D17, 0xCBAB},{0x5D19, 0xD7C4},{0x5D27, 0xE2FE},
- {0x5D29, 0xDDDA},{0x5D4B, 0xDAAE},{0x5D4C, 0xCAEE},{0x5D50, 0xD5B9},{0x5D69, 0xE3A1},{0x5D6C, 0xE8E3},{0x5D6F, 0xF3AB},{0x5D87, 0xCFA9},
- {0x5D8B, 0xD3F7},{0x5D9D, 0xD4F1},{0x5DA0, 0xCEE4},{0x5DA2, 0xE8F2},{0x5DAA, 0xE5F5},{0x5DB8, 0xE7AE},{0x5DBA, 0xD6BA},{0x5DBC, 0xDFEC},
- {0x5DBD, 0xE4C0},{0x5DCD, 0xE8E4},{0x5DD2, 0xD8B5},{0x5DD6, 0xE4DC},{0x5DDD, 0xF4B9},{0x5DDE, 0xF1B6},{0x5DE1, 0xE2DE},{0x5DE2, 0xE1B5},
- {0x5DE5, 0xCDEF},{0x5DE6, 0xF1A7},{0x5DE7, 0xCEE5},{0x5DE8, 0xCBDD},{0x5DEB, 0xD9E3},{0x5DEE, 0xF3AC},{0x5DF1, 0xD0F9},{0x5DF2, 0xECAB},
- {0x5DF3, 0xDED3},{0x5DF4, 0xF7E9},{0x5DF7, 0xF9F5},{0x5DFD, 0xE1DE},{0x5DFE, 0xCBEE},{0x5E02, 0xE3BC},{0x5E03, 0xF8D6},{0x5E06, 0xDBEE},
- {0x5E0C, 0xFDF1},{0x5E11, 0xF7B6},{0x5E16, 0xF4DE},{0x5E19, 0xF2ED},{0x5E1B, 0xDBD9},{0x5E1D, 0xF0A8},{0x5E25, 0xE1FD},{0x5E2B, 0xDED4},
- {0x5E2D, 0xE0AC},{0x5E33, 0xEDE3},{0x5E36, 0xD3E1},{0x5E38, 0xDFC8},{0x5E3D, 0xD9B6},{0x5E3F, 0xFDAC},{0x5E40, 0xEFD3},{0x5E44, 0xE4C1},
- {0x5E45, 0xF8EB},{0x5E47, 0xDBAC},{0x5E4C, 0xFCC6},{0x5E55, 0xD8AD},{0x5E5F, 0xF6BA},{0x5E61, 0xDBDF},{0x5E62, 0xD3D3},{0x5E63, 0xF8C7},
- {0x5E72, 0xCACE},{0x5E73, 0xF8C1},{0x5E74, 0xD2B4},{0x5E77, 0xDCB4},{0x5E78, 0xFAB9},{0x5E79, 0xCACF},{0x5E7B, 0xFCB3},{0x5E7C, 0xEAEA},
- {0x5E7D, 0xEAEB},{0x5E7E, 0xD0FA},{0x5E84, 0xEDE4},{0x5E87, 0xDDE7},{0x5E8A, 0xDFC9},{0x5E8F, 0xDFED},{0x5E95, 0xEEBC},{0x5E97, 0xEFC1},
- {0x5E9A, 0xCCD2},{0x5E9C, 0xDDA4},{0x5EA0, 0xDFCA},{0x5EA6, 0xD3F8},{0x5EA7, 0xF1A8},{0x5EAB, 0xCDB7},{0x5EAD, 0xEFD4},{0x5EB5, 0xE4DD},
- {0x5EB6, 0xDFEE},{0x5EB7, 0xCBAC},{0x5EB8, 0xE9BC},{0x5EBE, 0xEAEC},{0x5EC2, 0xDFCB},{0x5EC8, 0xF9BF},{0x5EC9, 0xD6AF},{0x5ECA, 0xD5C6},
- {0x5ED0, 0xCFAA},{0x5ED3, 0xCEA9},{0x5ED6, 0xD6F8},{0x5EDA, 0xF1B7},{0x5EDB, 0xEEF8},{0x5EDF, 0xD9D9},{0x5EE0, 0xF3DF},{0x5EE2, 0xF8C8},
- {0x5EE3, 0xCEC6},{0x5EEC, 0xD5E6},{0x5EF3, 0xF4E6},{0x5EF6, 0xE6C5},{0x5EF7, 0xEFD5},{0x5EFA, 0xCBEF},{0x5EFB, 0xFCDF},{0x5F01, 0xDCA7},
- {0x5F04, 0xD6E7},{0x5F0A, 0xF8C9},{0x5F0F, 0xE3D2},{0x5F11, 0xE3BD},{0x5F13, 0xCFE1},{0x5F14, 0xF0C0},{0x5F15, 0xECDA},{0x5F17, 0xDDD7},
- {0x5F18, 0xFBF0},{0x5F1B, 0xECAC},{0x5F1F, 0xF0A9},{0x5F26, 0xFAD7},{0x5F27, 0xFBC1},{0x5F29, 0xD2C0},{0x5F31, 0xE5B0},{0x5F35, 0xEDE5},
- {0x5F3A, 0xCBAD},{0x5F3C, 0xF9B0},{0x5F48, 0xF7A5},{0x5F4A, 0xCBAE},{0x5F4C, 0xDAAF},{0x5F4E, 0xD8B6},{0x5F56, 0xD3A7},{0x5F57, 0xFBB2},
- {0x5F59, 0xFDC4},{0x5F5B, 0xECAD},{0x5F62, 0xFBA1},{0x5F66, 0xE5E9},{0x5F67, 0xE9EE},{0x5F69, 0xF3F4},{0x5F6A, 0xF8F3},{0x5F6B, 0xF0C1},
- {0x5F6C, 0xDEAF},{0x5F6D, 0xF8B0},{0x5F70, 0xF3E0},{0x5F71, 0xE7AF},{0x5F77, 0xDBAD},{0x5F79, 0xE6B5},{0x5F7C, 0xF9A8},{0x5F7F, 0xDDD8},
- {0x5F80, 0xE8D9},{0x5F81, 0xEFD6},{0x5F85, 0xD3E2},{0x5F87, 0xE2DF},{0x5F8A, 0xFCE0},{0x5F8B, 0xD7C8},{0x5F8C, 0xFDAD},{0x5F90, 0xDFEF},
- {0x5F91, 0xCCD3},{0x5F92, 0xD3F9},{0x5F97, 0xD4F0},{0x5F98, 0xDBC7},{0x5F99, 0xDED5},{0x5F9E, 0xF0F4},{0x5FA0, 0xD5D0},{0x5FA1, 0xE5D9},
- {0x5FA8, 0xFCC7},{0x5FA9, 0xDCD6},{0x5FAA, 0xE2E0},{0x5FAE, 0xDAB0},{0x5FB5, 0xF3A3},{0x5FB7, 0xD3EC},{0x5FB9, 0xF4CB},{0x5FBD, 0xFDC5},
- {0x5FC3, 0xE3FD},{0x5FC5, 0xF9B1},{0x5FCC, 0xD0FB},{0x5FCD, 0xECDB},{0x5FD6, 0xF5BC},{0x5FD7, 0xF2A4},{0x5FD8, 0xD8CE},{0x5FD9, 0xD8CF},
- {0x5FE0, 0xF5F7},{0x5FEB, 0xF6E1},{0x5FF5, 0xD2B7},{0x5FFD, 0xFBEC},{0x5FFF, 0xDDC8},{0x600F, 0xE4E8},{0x6012, 0xD2C1},{0x6016, 0xF8D7},
- {0x601C, 0xD6BB},{0x601D, 0xDED6},{0x6020, 0xF7BD},{0x6021, 0xECAE},{0x6025, 0xD0E1},{0x6027, 0xE0F5},{0x6028, 0xEAB3},{0x602A, 0xCED6},
- {0x602F, 0xCCA5},{0x6041, 0xECF6},{0x6042, 0xE2E1},{0x6043, 0xE3BE},{0x604D, 0xFCC8},{0x6050, 0xCDF0},{0x6052, 0xF9F6},{0x6055, 0xDFF0},
- {0x6059, 0xE5BF},{0x605D, 0xCEBF},{0x6062, 0xFCE1},{0x6063, 0xEDB0},{0x6064, 0xFDD1},{0x6065, 0xF6BB},{0x6068, 0xF9CF},{0x6069, 0xEBDA},
- {0x606A, 0xCAC1},{0x606C, 0xD2B8},{0x606D, 0xCDF1},{0x606F, 0xE3D3},{0x6070, 0xFDE6},{0x6085, 0xE6ED},{0x6089, 0xE3FA},{0x608C, 0xF0AA},
- {0x608D, 0xF9D0},{0x6094, 0xFCE2},{0x6096, 0xF8A7},{0x609A, 0xE1E5},{0x609B, 0xEEF9},{0x609F, 0xE7F6},{0x60A0, 0xEAED},{0x60A3, 0xFCB4},
- {0x60A4, 0xF5C2},{0x60A7, 0xD7DC},{0x60B0, 0xF0F5},{0x60B2, 0xDDE8},{0x60B3, 0xD3ED},{0x60B4, 0xF5FC},{0x60B6, 0xDABF},{0x60B8, 0xCCFB},
- {0x60BC, 0xD3FA},{0x60BD, 0xF4A4},{0x60C5, 0xEFD7},{0x60C7, 0xD4C3},{0x60D1, 0xFBE3},{0x60DA, 0xFBED},{0x60DC, 0xE0AD},{0x60DF, 0xEAEE},
- {0x60E0, 0xFBB3},{0x60E1, 0xE4C2},{0x60F0, 0xF6E7},{0x60F1, 0xD2DD},{0x60F3, 0xDFCC},{0x60F6, 0xFCC9},{0x60F9, 0xE5A9},{0x60FA, 0xE0F6},
- {0x60FB, 0xF6B3},{0x6101, 0xE1FE},{0x6106, 0xCBF0},{0x6108, 0xEAEF},{0x6109, 0xEAF0},{0x610D, 0xDAC0},{0x610E, 0xF8B4},{0x610F, 0xEBF2},
- {0x6115, 0xE4C3},{0x611A, 0xE9D7},{0x611B, 0xE4F1},{0x611F, 0xCAEF},{0x6127, 0xCED7},{0x6130, 0xFCCA},{0x6134, 0xF3E1},{0x6137, 0xCBC4},
- {0x613C, 0xE3E5},{0x613E, 0xCBC5},{0x613F, 0xEAB4},{0x6142, 0xE9BD},{0x6144, 0xD7C9},{0x6147, 0xEBDB},{0x6148, 0xEDB1},{0x614A, 0xCCC3},
- {0x614B, 0xF7BE},{0x614C, 0xFCCB},{0x6153, 0xF8F4},{0x6155, 0xD9B7},{0x6158, 0xF3D3},{0x6159, 0xF3D4},{0x615D, 0xF7E4},{0x615F, 0xF7D1},
- {0x6162, 0xD8B7},{0x6163, 0xCEB1},{0x6164, 0xCAC2},{0x6167, 0xFBB4},{0x6168, 0xCBC6},{0x616B, 0xF0F6},{0x616E, 0xD5E7},{0x6170, 0xEAD0},
- {0x6176, 0xCCD4},{0x6177, 0xCBAF},{0x617D, 0xF4AA},{0x617E, 0xE9AF},{0x6181, 0xF5C3},{0x6182, 0xE9D8},{0x618A, 0xDDE9},{0x618E, 0xF1F3},
- {0x6190, 0xD5FB},{0x6191, 0xDEBB},{0x6194, 0xF4FB},{0x6198, 0xFDF3},{0x6199, 0xFDF2},{0x619A, 0xF7A6},{0x61A4, 0xDDC9},{0x61A7, 0xD4D3},
- {0x61A9, 0xCCA8},{0x61AB, 0xDAC1},{0x61AC, 0xCCD5},{0x61AE, 0xD9E4},{0x61B2, 0xFACA},{0x61B6, 0xE5E3},{0x61BA, 0xD3BC},{0x61BE, 0xCAF0},
- {0x61C3, 0xD0C4},{0x61C7, 0xCAD0},{0x61C8, 0xFAAB},{0x61C9, 0xEBEB},{0x61CA, 0xE7F8},{0x61CB, 0xD9E5},{0x61E6, 0xD1D7},{0x61F2, 0xF3A4},
- {0x61F6, 0xD4FB},{0x61F7, 0xFCE3},{0x61F8, 0xFAD8},{0x61FA, 0xF3D5},{0x61FC, 0xCFAB},{0x61FF, 0xEBF3},{0x6200, 0xD5FC},{0x6207, 0xD3D4},
- {0x6208, 0xCDFC},{0x620A, 0xD9E6},{0x620C, 0xE2F9},{0x620D, 0xE2A1},{0x620E, 0xEBD4},{0x6210, 0xE0F7},{0x6211, 0xE4B2},{0x6212, 0xCCFC},
- {0x6216, 0xFBE4},{0x621A, 0xF4AB},{0x621F, 0xD0BD},{0x6221, 0xCAF1},{0x622A, 0xEFB8},{0x622E, 0xD7C0},{0x6230, 0xEEFA},{0x6231, 0xFDF4},
- {0x6234, 0xD3E3},{0x6236, 0xFBC2},{0x623E, 0xD5E8},{0x623F, 0xDBAE},{0x6240, 0xE1B6},{0x6241, 0xF8B7},{0x6247, 0xE0BF},{0x6248, 0xFBC3},
- {0x6249, 0xDDEA},{0x624B, 0xE2A2},{0x624D, 0xEEA6},{0x6253, 0xF6E8},{0x6258, 0xF6F5},{0x626E, 0xDDCA},{0x6271, 0xD0E2},{0x6276, 0xDDA6},
- {0x6279, 0xDDEB},{0x627C, 0xE4F9},{0x627F, 0xE3AF},{0x6280, 0xD0FC},{0x6284, 0xF4FC},{0x6289, 0xCCBC},{0x628A, 0xF7EA},{0x6291, 0xE5E4},
- {0x6292, 0xDFF1},{0x6295, 0xF7E1},{0x6297, 0xF9F7},{0x6298, 0xEFB9},{0x629B, 0xF8D8},{0x62AB, 0xF9A9},{0x62B1, 0xF8D9},{0x62B5, 0xEEBD},
- {0x62B9, 0xD8C6},{0x62BC, 0xE4E3},{0x62BD, 0xF5CE},{0x62C2, 0xDDD9},{0x62C7, 0xD9E7},{0x62C8, 0xD2B9},{0x62C9, 0xD5C3},{0x62CC, 0xDAE5},
- {0x62CD, 0xDAD0},{0x62CF, 0xD1D9},{0x62D0, 0xCED8},{0x62D2, 0xCBDE},{0x62D3, 0xF4AC},{0x62D4, 0xDAFB},{0x62D6, 0xF6E9},{0x62D7, 0xE8F3},
- {0x62D8, 0xCFAC},{0x62D9, 0xF0F0},{0x62DB, 0xF4FD},{0x62DC, 0xDBC8},{0x62EC, 0xCEC0},{0x62ED, 0xE3D4},{0x62EE, 0xD1CF},{0x62EF, 0xF1F5},
- {0x62F1, 0xCDF2},{0x62F3, 0xCFEB},{0x62F7, 0xCDB8},{0x62FE, 0xE3A6},{0x62FF, 0xD1DA},{0x6301, 0xF2A5},{0x6307, 0xF2A6},{0x6309, 0xE4CE},
- {0x6311, 0xD3FB},{0x632B, 0xF1A9},{0x632F, 0xF2C9},{0x633A, 0xEFD8},{0x633B, 0xE6C9},{0x633D, 0xD8B8},{0x633E, 0xFAF3},{0x6349, 0xF3B5},
- {0x634C, 0xF8A4},{0x634F, 0xD1F3},{0x6350, 0xE6C8},{0x6355, 0xF8DA},{0x6367, 0xDCE9},{0x6368, 0xDED7},{0x636E, 0xCBDF},{0x6372, 0xCFEC},
- {0x6377, 0xF4DF},{0x637A, 0xD1F4},{0x637B, 0xD2BA},{0x637F, 0xDFF2},{0x6383, 0xE1B7},{0x6388, 0xE2A3},{0x6389, 0xD3FC},{0x638C, 0xEDE6},
- {0x6392, 0xDBC9},{0x6396, 0xE4FA},{0x6398, 0xCFDE},{0x639B, 0xCED0},{0x63A0, 0xD5D3},{0x63A1, 0xF3F5},{0x63A2, 0xF7AE},{0x63A5, 0xEFC8},
- {0x63A7, 0xCDF3},{0x63A8, 0xF5CF},{0x63A9, 0xE5F3},{0x63AA, 0xF0C2},{0x63C0, 0xCAD1},{0x63C4, 0xEAF1},{0x63C6, 0xD0A6},{0x63CF, 0xD9DA},
- {0x63D0, 0xF0AB},{0x63D6, 0xEBE7},{0x63DA, 0xE5C0},{0x63DB, 0xFCB5},{0x63E1, 0xE4C4},{0x63ED, 0xCCA9},{0x63EE, 0xFDC6},{0x63F4, 0xEAB5},
- {0x63F6, 0xE5AA},{0x63F7, 0xDFBA},{0x640D, 0xE1DF},{0x640F, 0xDAD1},{0x6414, 0xE1B8},{0x6416, 0xE8F4},{0x6417, 0xD3FD},{0x641C, 0xE2A4},
- {0x6422, 0xF2CA},{0x642C, 0xDAE6},{0x642D, 0xF7B3},{0x643A, 0xFDCD},{0x643E, 0xF3B6},{0x6458, 0xEED7},{0x6460, 0xF5C4},{0x6469, 0xD8A4},
- {0x646F, 0xF2A7},{0x6478, 0xD9B8},{0x6479, 0xD9B9},{0x647A, 0xEFC9},{0x6488, 0xD6CE},{0x6491, 0xF7CB},{0x6492, 0xDFAE},{0x6493, 0xE8F5},
- {0x649A, 0xD2B5},{0x649E, 0xD3D5},{0x64A4, 0xF4CC},{0x64A5, 0xDAFC},{0x64AB, 0xD9E8},{0x64AD, 0xF7EB},{0x64AE, 0xF5C9},{0x64B0, 0xF3BC},
- {0x64B2, 0xDAD2},{0x64BB, 0xD3B5},{0x64C1, 0xE8B6},{0x64C4, 0xD6CF},{0x64C5, 0xF4BA},{0x64C7, 0xF7C9},{0x64CA, 0xCCAA},{0x64CD, 0xF0C3},
- {0x64CE, 0xCCD6},{0x64D2, 0xD0D3},{0x64D4, 0xD3BD},{0x64D8, 0xDBFB},{0x64DA, 0xCBE0},{0x64E1, 0xD3E4},{0x64E2, 0xF6F7},{0x64E5, 0xD5BA},
- {0x64E6, 0xF3CD},{0x64E7, 0xCBE1},{0x64EC, 0xEBF4},{0x64F2, 0xF4AD},{0x64F4, 0xFCAA},{0x64FA, 0xF7EC},{0x64FE, 0xE8F6},{0x6500, 0xDAE7},
- {0x6504, 0xF7CC},{0x6518, 0xE5C1},{0x651D, 0xE0EE},{0x6523, 0xD5FD},{0x652A, 0xCEE6},{0x652B, 0xFCAB},{0x652C, 0xD5BB},{0x652F, 0xF2A8},
- {0x6536, 0xE2A5},{0x6537, 0xCDB9},{0x6538, 0xEAF2},{0x6539, 0xCBC7},{0x653B, 0xCDF4},{0x653E, 0xDBAF},{0x653F, 0xEFD9},{0x6545, 0xCDBA},
- {0x6548, 0xFCF9},{0x654D, 0xDFF3},{0x654E, 0xCEE7},{0x654F, 0xDAC2},{0x6551, 0xCFAD},{0x6556, 0xE7F9},{0x6557, 0xF8A8},{0x655E, 0xF3E2},
- {0x6562, 0xCAF2},{0x6563, 0xDFA4},{0x6566, 0xD4C4},{0x656C, 0xCCD7},{0x656D, 0xE5C2},{0x6572, 0xCDBB},{0x6574, 0xEFDA},{0x6575, 0xEED8},
- {0x6577, 0xDDA7},{0x6578, 0xE2A6},{0x657E, 0xE0C0},{0x6582, 0xD6B0},{0x6583, 0xF8CA},{0x6585, 0xFCFA},{0x6587, 0xD9FE},{0x658C, 0xDEB0},
- {0x6590, 0xDDEC},{0x6591, 0xDAE8},{0x6597, 0xD4E0},{0x6599, 0xD6F9},{0x659B, 0xCDD7},{0x659C, 0xDED8},{0x659F, 0xF2F8},{0x65A1, 0xE4D6},
- {0x65A4, 0xD0C5},{0x65A5, 0xF4AE},{0x65A7, 0xDDA8},{0x65AB, 0xEDC5},{0x65AC, 0xF3D6},{0x65AF, 0xDED9},{0x65B0, 0xE3E6},{0x65B7, 0xD3A8},
- {0x65B9, 0xDBB0},{0x65BC, 0xE5DA},{0x65BD, 0xE3BF},{0x65C1, 0xDBB1},{0x65C5, 0xD5E9},{0x65CB, 0xE0C1},{0x65CC, 0xEFDB},{0x65CF, 0xF0E9},
- {0x65D2, 0xD7B2},{0x65D7, 0xD0FD},{0x65E0, 0xD9E9},{0x65E3, 0xD0FE},{0x65E5, 0xECED},{0x65E6, 0xD3A9},{0x65E8, 0xF2A9},{0x65E9, 0xF0C4},
- {0x65EC, 0xE2E2},{0x65ED, 0xE9EF},{0x65F1, 0xF9D1},{0x65F4, 0xE9D9},{0x65FA, 0xE8DA},{0x65FB, 0xDAC3},{0x65FC, 0xDAC4},{0x65FD, 0xD4C5},
- {0x65FF, 0xE7FA},{0x6606, 0xCDE0},{0x6607, 0xE3B0},{0x6609, 0xDBB2},{0x660A, 0xFBC4},{0x660C, 0xF3E3},{0x660E, 0xD9A5},{0x660F, 0xFBE7},
- {0x6610, 0xDDCB},{0x6611, 0xD0D4},{0x6613, 0xE6B6},{0x6614, 0xE0AE},{0x6615, 0xFDDA},{0x661E, 0xDCB5},{0x661F, 0xE0F8},{0x6620, 0xE7B1},
- {0x6625, 0xF5F0},{0x6627, 0xD8DC},{0x6628, 0xEDC6},{0x662D, 0xE1B9},{0x662F, 0xE3C0},{0x6630, 0xF9C0},{0x6631, 0xE9F0},{0x6634, 0xD9DB},
- {0x6636, 0xF3E4},{0x663A, 0xDCB6},{0x663B, 0xE4E9},{0x6641, 0xF0C5},{0x6642, 0xE3C1},{0x6643, 0xFCCC},{0x6644, 0xFCCD},{0x6649, 0xF2CB},
- {0x664B, 0xF2CC},{0x664F, 0xE4CF},{0x6659, 0xF1DB},{0x665B, 0xFAD9},{0x665D, 0xF1B8},{0x665E, 0xFDF5},{0x665F, 0xE0F9},{0x6664, 0xE7FB},
- {0x6665, 0xFCB7},{0x6666, 0xFCE4},{0x6667, 0xFBC5},{0x6668, 0xE3E7},{0x6669, 0xD8B9},{0x666B, 0xF6F8},{0x666E, 0xDCC5},{0x666F, 0xCCD8},
- {0x6673, 0xE0AF},{0x6674, 0xF4E7},{0x6676, 0xEFDC},{0x6677, 0xCFFC},{0x6678, 0xEFDD},{0x667A, 0xF2AA},{0x6684, 0xFDBE},{0x6687, 0xCAAC},
- {0x6688, 0xFDBB},{0x6689, 0xFDC7},{0x668E, 0xE7B2},{0x6690, 0xEAD1},{0x6691, 0xDFF4},{0x6696, 0xD1EC},{0x6697, 0xE4DE},{0x6698, 0xE5C3},
- {0x669D, 0xD9A6},{0x66A0, 0xCDBC},{0x66A2, 0xF3E5},{0x66AB, 0xEDD5},{0x66AE, 0xD9BA},{0x66B2, 0xEDE7},{0x66B3, 0xFBB5},{0x66B4, 0xF8EC},
- {0x66B9, 0xE0E7},{0x66BB, 0xCCD9},{0x66BE, 0xD4C6},{0x66C4, 0xE7A5},{0x66C6, 0xD5F5},{0x66C7, 0xD3BE},{0x66C9, 0xFCFB},{0x66D6, 0xE4F2},
- {0x66D9, 0xDFF5},{0x66DC, 0xE8F8},{0x66DD, 0xF8ED},{0x66E0, 0xCEC7},{0x66E6, 0xFDF6},{0x66F0, 0xE8D8},{0x66F2, 0xCDD8},{0x66F3, 0xE7D6},
- {0x66F4, 0xCCDA},{0x66F7, 0xCAE3},{0x66F8, 0xDFF6},{0x66F9, 0xF0C7},{0x66FA, 0xF0C6},{0x66FC, 0xD8BA},{0x66FE, 0xF1F4},{0x66FF, 0xF4F0},
- {0x6700, 0xF5CC},{0x6703, 0xFCE5},{0x6708, 0xEAC5},{0x6709, 0xEAF3},{0x670B, 0xDDDB},{0x670D, 0xDCD7},{0x6714, 0xDEFD},{0x6715, 0xF2F9},
- {0x6717, 0xD5C7},{0x671B, 0xD8D0},{0x671D, 0xF0C8},{0x671E, 0xD1A1},{0x671F, 0xD1A2},{0x6726, 0xD9D4},{0x6727, 0xD6E8},{0x6728, 0xD9CA},
- {0x672A, 0xDAB1},{0x672B, 0xD8C7},{0x672C, 0xDCE2},{0x672D, 0xF3CE},{0x672E, 0xF5F4},{0x6731, 0xF1B9},{0x6734, 0xDAD3},{0x6736, 0xF6EA},
- {0x673A, 0xCFF5},{0x673D, 0xFDAE},{0x6746, 0xCAD2},{0x6749, 0xDFB4},{0x674E, 0xD7DD},{0x674F, 0xFABA},{0x6750, 0xEEA7},{0x6751, 0xF5BD},
- {0x6753, 0xF8F5},{0x6756, 0xEDE8},{0x675C, 0xD4E1},{0x675E, 0xD1A3},{0x675F, 0xE1D6},{0x676D, 0xF9F8},{0x676F, 0xDBCA},{0x6770, 0xCBF9},
- {0x6771, 0xD4D4},{0x6773, 0xD9DC},{0x6775, 0xEEBE},{0x6777, 0xF7ED},{0x677B, 0xD2EE},{0x677E, 0xE1E6},{0x677F, 0xF7F9},{0x6787, 0xDDED},
- {0x6789, 0xE8DB},{0x678B, 0xDBB3},{0x678F, 0xD1F7},{0x6790, 0xE0B0},{0x6793, 0xD4E2},{0x6795, 0xF6D7},{0x6797, 0xD7F9},{0x679A, 0xD8DD},
- {0x679C, 0xCDFD},{0x679D, 0xF2AB},{0x67AF, 0xCDBD},{0x67B0, 0xF8C2},{0x67B3, 0xF2AC},{0x67B6, 0xCAAD},{0x67B7, 0xCAAE},{0x67B8, 0xCFAE},
- {0x67BE, 0xE3C2},{0x67C4, 0xDCB7},{0x67CF, 0xDBDA},{0x67D0, 0xD9BB},{0x67D1, 0xCAF3},{0x67D2, 0xF6D3},{0x67D3, 0xE6F8},{0x67D4, 0xEAF5},
- {0x67DA, 0xEAF6},{0x67DD, 0xF6F9},{0x67E9, 0xCFAF},{0x67EC, 0xCAD3},{0x67EF, 0xCAAF},{0x67F0, 0xD2B0},{0x67F1, 0xF1BA},{0x67F3, 0xD7B3},
- {0x67F4, 0xE3C3},{0x67F5, 0xF3FD},{0x67F6, 0xDEDA},{0x67FB, 0xDEDB},{0x67FE, 0xEFDE},{0x6812, 0xE2E3},{0x6813, 0xEEFB},{0x6816, 0xDFF7},
- {0x6817, 0xD7CA},{0x6821, 0xCEE8},{0x6822, 0xDBDB},{0x682A, 0xF1BB},{0x682F, 0xE9F1},{0x6838, 0xFAB7},{0x6839, 0xD0C6},{0x683C, 0xCCAB},
- {0x683D, 0xEEA8},{0x6840, 0xCBFA},{0x6841, 0xF9F9},{0x6842, 0xCCFD},{0x6843, 0xD3FE},{0x6848, 0xE4D0},{0x684E, 0xF2EE},{0x6850, 0xD4D5},
- {0x6851, 0xDFCD},{0x6853, 0xFCB8},{0x6854, 0xD1D0},{0x686D, 0xF2CD},{0x6876, 0xF7D2},{0x687F, 0xCAD4},{0x6881, 0xD5D9},{0x6885, 0xD8DE},
- {0x688F, 0xCDD9},{0x6893, 0xEEA9},{0x6894, 0xF6BC},{0x6897, 0xCCDB},{0x689D, 0xF0C9},{0x689F, 0xFCFC},{0x68A1, 0xE8C9},{0x68A2, 0xF4FE},
- {0x68A7, 0xE7FC},{0x68A8, 0xD7DE},{0x68AD, 0xDEDC},{0x68AF, 0xF0AC},{0x68B0, 0xCCFE},{0x68B1, 0xCDE1},{0x68B3, 0xE1BA},{0x68B5, 0xDBEF},
- {0x68B6, 0xDAB2},{0x68C4, 0xD1A5},{0x68C5, 0xDCB8},{0x68C9, 0xD8F6},{0x68CB, 0xD1A4},{0x68CD, 0xCDE2},{0x68D2, 0xDCEA},{0x68D5, 0xF0F7},
- {0x68D7, 0xF0CA},{0x68D8, 0xD0BE},{0x68DA, 0xDDDC},{0x68DF, 0xD4D6},{0x68E0, 0xD3D6},{0x68E7, 0xEDD0},{0x68E8, 0xCDA1},{0x68EE, 0xDFB5},
- {0x68F2, 0xDFF8},{0x68F9, 0xD4A1},{0x68FA, 0xCEB2},{0x6900, 0xE8CA},{0x6905, 0xEBF5},{0x690D, 0xE3D5},{0x690E, 0xF5D0},{0x6912, 0xF5A1},
- {0x6927, 0xD9A7},{0x6930, 0xE5AB},{0x693D, 0xE6CB},{0x693F, 0xF5F1},{0x694A, 0xE5C5},{0x6953, 0xF9A3},{0x6954, 0xE0DB},{0x6955, 0xF6EB},
- {0x6957, 0xCBF1},{0x6959, 0xD9EA},{0x695A, 0xF5A2},{0x695E, 0xD7D1},{0x6960, 0xD1F8},{0x6961, 0xEAF8},{0x6962, 0xEAF9},{0x6963, 0xDAB3},
- {0x6968, 0xEFDF},{0x696B, 0xF1EF},{0x696D, 0xE5F6},{0x696E, 0xEEBF},{0x696F, 0xE2E4},{0x6975, 0xD0BF},{0x6977, 0xFAAC},{0x6978, 0xF5D1},
- {0x6979, 0xE7B3},{0x6995, 0xE9BE},{0x699B, 0xF2CE},{0x699C, 0xDBB4},{0x69A5, 0xFCCE},{0x69A7, 0xDDEE},{0x69AE, 0xE7B4},{0x69B4, 0xD7B4},
- {0x69BB, 0xF7B4},{0x69C1, 0xCDBE},{0x69C3, 0xDAE9},{0x69CB, 0xCFB0},{0x69CC, 0xF7D9},{0x69CD, 0xF3E6},{0x69D0, 0xCED9},{0x69E8, 0xCEAA},
- {0x69EA, 0xCBC8},{0x69FB, 0xD0A7},{0x69FD, 0xF0CB},{0x69FF, 0xD0C7},{0x6A02, 0xE4C5},{0x6A0A, 0xDBE0},{0x6A11, 0xD5DA},{0x6A13, 0xD7A7},
- {0x6A17, 0xEEC0},{0x6A19, 0xF8F6},{0x6A1E, 0xF5D2},{0x6A1F, 0xEDE9},{0x6A21, 0xD9BC},{0x6A23, 0xE5C6},{0x6A35, 0xF5A3},{0x6A38, 0xDAD4},
- {0x6A39, 0xE2A7},{0x6A3A, 0xFBFC},{0x6A3D, 0xF1DC},{0x6A44, 0xCAF4},{0x6A48, 0xE8FA},{0x6A4B, 0xCEE9},{0x6A52, 0xE9F8},{0x6A53, 0xE2E5},
- {0x6A58, 0xD0B9},{0x6A59, 0xD4F2},{0x6A5F, 0xD1A6},{0x6A61, 0xDFCE},{0x6A6B, 0xFCF4},{0x6A80, 0xD3AA},{0x6A84, 0xCCAC},{0x6A89, 0xEFE0},
- {0x6A8D, 0xE5E5},{0x6A8E, 0xD0D5},{0x6A97, 0xDBFC},{0x6A9C, 0xFCE6},{0x6AA2, 0xCBFE},{0x6AA3, 0xEDEA},{0x6AB3, 0xDEB1},{0x6ABB, 0xF9E3},
- {0x6AC2, 0xD4A2},{0x6AC3, 0xCFF6},{0x6AD3, 0xD6D0},{0x6ADA, 0xD5EA},{0x6ADB, 0xF1EE},{0x6AF6, 0xFACB},{0x6AFB, 0xE5A1},{0x6B04, 0xD5B1},
- {0x6B0A, 0xCFED},{0x6B0C, 0xEDEB},{0x6B12, 0xD5B2},{0x6B16, 0xD5BC},{0x6B20, 0xFDE2},{0x6B21, 0xF3AD},{0x6B23, 0xFDDB},{0x6B32, 0xE9B0},
- {0x6B3A, 0xD1A7},{0x6B3D, 0xFDE3},{0x6B3E, 0xCEB3},{0x6B46, 0xFDE4},{0x6B47, 0xFACE},{0x6B4C, 0xCAB0},{0x6B4E, 0xF7A7},{0x6B50, 0xCFB1},
- {0x6B5F, 0xE6A2},{0x6B61, 0xFCB6},{0x6B62, 0xF2AD},{0x6B63, 0xEFE1},{0x6B64, 0xF3AE},{0x6B65, 0xDCC6},{0x6B66, 0xD9EB},{0x6B6A, 0xE8E0},
- {0x6B72, 0xE1A8},{0x6B77, 0xD5F6},{0x6B78, 0xCFFD},{0x6B7B, 0xDEDD},{0x6B7F, 0xD9D1},{0x6B83, 0xE4EA},{0x6B84, 0xF2CF},{0x6B86, 0xF7BF},
- {0x6B89, 0xE2E6},{0x6B8A, 0xE2A8},{0x6B96, 0xE3D6},{0x6B98, 0xEDD1},{0x6B9E, 0xE9F9},{0x6BAE, 0xD6B1},{0x6BAF, 0xDEB2},{0x6BB2, 0xE0E8},
- {0x6BB5, 0xD3AB},{0x6BB7, 0xEBDC},{0x6BBA, 0xDFAF},{0x6BBC, 0xCAC3},{0x6BBF, 0xEEFC},{0x6BC1, 0xFDC3},{0x6BC5, 0xEBF6},{0x6BC6, 0xCFB2},
- {0x6BCB, 0xD9EC},{0x6BCD, 0xD9BD},{0x6BCF, 0xD8DF},{0x6BD2, 0xD4B8},{0x6BD3, 0xEBBE},{0x6BD4, 0xDDEF},{0x6BD6, 0xDDF0},{0x6BD7, 0xDDF1},
- {0x6BD8, 0xDDF2},{0x6BDB, 0xD9BE},{0x6BEB, 0xFBC6},{0x6BEC, 0xCFB3},{0x6C08, 0xEEFD},{0x6C0F, 0xE4AB},{0x6C11, 0xDAC5},{0x6C13, 0xD8EC},
- {0x6C23, 0xD1A8},{0x6C34, 0xE2A9},{0x6C37, 0xDEBC},{0x6C38, 0xE7B5},{0x6C3E, 0xDBF0},{0x6C40, 0xEFE2},{0x6C41, 0xF1F0},{0x6C42, 0xCFB4},
- {0x6C4E, 0xDBF1},{0x6C50, 0xE0B1},{0x6C55, 0xDFA5},{0x6C57, 0xF9D2},{0x6C5A, 0xE7FD},{0x6C5D, 0xE6A3},{0x6C5E, 0xFBF1},{0x6C5F, 0xCBB0},
- {0x6C60, 0xF2AE},{0x6C68, 0xCDE7},{0x6C6A, 0xE8DC},{0x6C6D, 0xE7D7},{0x6C70, 0xF7C0},{0x6C72, 0xD0E3},{0x6C76, 0xDAA1},{0x6C7A, 0xCCBD},
- {0x6C7D, 0xD1A9},{0x6C7E, 0xDDCC},{0x6C81, 0xE3FE},{0x6C82, 0xD1AA},{0x6C83, 0xE8AA},{0x6C85, 0xEAB6},{0x6C86, 0xF9FA},{0x6C87, 0xE6CC},
- {0x6C88, 0xF6D8},{0x6C8C, 0xD4C7},{0x6C90, 0xD9CB},{0x6C92, 0xD9D2},{0x6C93, 0xD3CB},{0x6C94, 0xD8F7},{0x6C95, 0xDAA9},{0x6C96, 0xF5F8},
- {0x6C99, 0xDEDE},{0x6C9A, 0xF2AF},{0x6C9B, 0xF8A9},{0x6CAB, 0xD8C8},{0x6CAE, 0xEEC1},{0x6CB3, 0xF9C1},{0x6CB8, 0xDDF3},{0x6CB9, 0xEAFA},
- {0x6CBB, 0xF6BD},{0x6CBC, 0xE1BB},{0x6CBD, 0xCDBF},{0x6CBE, 0xF4D4},{0x6CBF, 0xE6CD},{0x6CC1, 0xFCCF},{0x6CC2, 0xFBA2},{0x6CC4, 0xE0DC},
- {0x6CC9, 0xF4BB},{0x6CCA, 0xDAD5},{0x6CCC, 0xF9B2},{0x6CD3, 0xFBF2},{0x6CD5, 0xDBF6},{0x6CD7, 0xDEDF},{0x6CDB, 0xDBF2},{0x6CE1, 0xF8DC},
- {0x6CE2, 0xF7EE},{0x6CE3, 0xEBE8},{0x6CE5, 0xD2FA},{0x6CE8, 0xF1BC},{0x6CEB, 0xFADA},{0x6CEE, 0xDAEA},{0x6CEF, 0xDAC6},{0x6CF0, 0xF7C1},
- {0x6CF3, 0xE7B6},{0x6D0B, 0xE5C7},{0x6D0C, 0xD6AC},{0x6D11, 0xDCC7},{0x6D17, 0xE1A9},{0x6D19, 0xE2AA},{0x6D1B, 0xD5A6},{0x6D1E, 0xD4D7},
- {0x6D25, 0xF2D0},{0x6D27, 0xEAFB},{0x6D29, 0xE0DD},{0x6D2A, 0xFBF3},{0x6D32, 0xF1BD},{0x6D35, 0xE2E7},{0x6D36, 0xFDD7},{0x6D38, 0xCEC8},
- {0x6D39, 0xEAB7},{0x6D3B, 0xFCC0},{0x6D3D, 0xFDE7},{0x6D3E, 0xF7EF},{0x6D41, 0xD7B5},{0x6D59, 0xEFBA},{0x6D5A, 0xF1DD},{0x6D5C, 0xDEB3},
- {0x6D63, 0xE8CB},{0x6D66, 0xF8DD},{0x6D69, 0xFBC7},{0x6D6A, 0xD5C8},{0x6D6C, 0xD7DF},{0x6D6E, 0xDDA9},{0x6D74, 0xE9B1},{0x6D77, 0xFAAD},
- {0x6D78, 0xF6D9},{0x6D79, 0xFAF4},{0x6D7F, 0xF8AA},{0x6D85, 0xE6EE},{0x6D87, 0xCCDC},{0x6D88, 0xE1BC},{0x6D89, 0xE0EF},{0x6D8C, 0xE9BF},
- {0x6D8D, 0xFCFD},{0x6D8E, 0xE6CE},{0x6D91, 0xE1D7},{0x6D93, 0xE6CF},{0x6D95, 0xF4F1},{0x6DAF, 0xE4F3},{0x6DB2, 0xE4FB},{0x6DB5, 0xF9E4},
- {0x6DC0, 0xEFE3},{0x6DC3, 0xCFEE},{0x6DC4, 0xF6BE},{0x6DC5, 0xE0B2},{0x6DC6, 0xFCFE},{0x6DC7, 0xD1AB},{0x6DCB, 0xD7FA},{0x6DCF, 0xFBC8},
- {0x6DD1, 0xE2D7},{0x6DD8, 0xD4A3},{0x6DD9, 0xF0F8},{0x6DDA, 0xD7A8},{0x6DDE, 0xE1E7},{0x6DE1, 0xD3BF},{0x6DE8, 0xEFE4},{0x6DEA, 0xD7C5},
- {0x6DEB, 0xEBE2},{0x6DEE, 0xFCE7},{0x6DF1, 0xE4A2},{0x6DF3, 0xE2E8},{0x6DF5, 0xE6D0},{0x6DF7, 0xFBE8},{0x6DF8, 0xF4E8},{0x6DF9, 0xE5F4},
- {0x6DFA, 0xF4BC},{0x6DFB, 0xF4D5},{0x6E17, 0xDFB6},{0x6E19, 0xFCB9},{0x6E1A, 0xEEC2},{0x6E1B, 0xCAF5},{0x6E1F, 0xEFE5},{0x6E20, 0xCBE2},
- {0x6E21, 0xD4A4},{0x6E23, 0xDEE0},{0x6E24, 0xDAFD},{0x6E25, 0xE4C6},{0x6E26, 0xE8BE},{0x6E2B, 0xE0DE},{0x6E2C, 0xF6B4},{0x6E2D, 0xEAD2},
- {0x6E2F, 0xF9FB},{0x6E32, 0xE0C2},{0x6E34, 0xCAE4},{0x6E36, 0xE7B7},{0x6E38, 0xEAFD},{0x6E3A, 0xD9DD},{0x6E3C, 0xDAB4},{0x6E3D, 0xEEAA},
- {0x6E3E, 0xFBE9},{0x6E43, 0xDBCB},{0x6E44, 0xDAB5},{0x6E4A, 0xF1BE},{0x6E4D, 0xD3AC},{0x6E56, 0xFBC9},{0x6E58, 0xDFCF},{0x6E5B, 0xD3C0},
- {0x6E5C, 0xE3D7},{0x6E5E, 0xEFE6},{0x6E5F, 0xFCD0},{0x6E67, 0xE9C0},{0x6E6B, 0xF5D3},{0x6E6E, 0xECDC},{0x6E6F, 0xF7B7},{0x6E72, 0xEAB8},
- {0x6E73, 0xD1F9},{0x6E7A, 0xDCC8},{0x6E90, 0xEAB9},{0x6E96, 0xF1DE},{0x6E9C, 0xD7B6},{0x6E9D, 0xCFB5},{0x6E9F, 0xD9A8},{0x6EA2, 0xECEE},
- {0x6EA5, 0xDDAA},{0x6EAA, 0xCDA2},{0x6EAB, 0xE8AE},{0x6EAF, 0xE1BD},{0x6EB1, 0xF2D1},{0x6EB6, 0xE9C1},{0x6EBA, 0xD2FC},{0x6EC2, 0xDBB5},
- {0x6EC4, 0xF3E7},{0x6EC5, 0xD8FE},{0x6EC9, 0xFCD1},{0x6ECB, 0xEDB2},{0x6ECC, 0xF4AF},{0x6ECE, 0xFBA3},{0x6ED1, 0xFCC1},{0x6ED3, 0xEEAB},
- {0x6ED4, 0xD4A5},{0x6EEF, 0xF4F2},{0x6EF4, 0xEED9},{0x6EF8, 0xFBCA},{0x6EFE, 0xCDE3},{0x6EFF, 0xD8BB},{0x6F01, 0xE5DB},{0x6F02, 0xF8F7},
- {0x6F06, 0xF6D4},{0x6F0F, 0xD7A9},{0x6F11, 0xCBC9},{0x6F14, 0xE6D1},{0x6F15, 0xF0CC},{0x6F20, 0xD8AE},{0x6F22, 0xF9D3},{0x6F23, 0xD5FE},
- {0x6F2B, 0xD8BC},{0x6F2C, 0xF2B0},{0x6F31, 0xE2AB},{0x6F32, 0xF3E8},{0x6F38, 0xEFC2},{0x6F3F, 0xEDEC},{0x6F41, 0xE7B8},{0x6F51, 0xDAFE},
- {0x6F54, 0xCCBE},{0x6F57, 0xF2FC},{0x6F58, 0xDAEB},{0x6F5A, 0xE2D8},{0x6F5B, 0xEDD6},{0x6F5E, 0xD6D1},{0x6F5F, 0xE0B3},{0x6F62, 0xFCD2},
- {0x6F64, 0xEBC8},{0x6F6D, 0xD3C1},{0x6F6E, 0xF0CD},{0x6F70, 0xCFF7},{0x6F7A, 0xEDD2},{0x6F7C, 0xD4D8},{0x6F7D, 0xDCC9},{0x6F7E, 0xD7F1},
- {0x6F81, 0xDFBB},{0x6F84, 0xF3A5},{0x6F88, 0xF4CD},{0x6F8D, 0xF1BF},{0x6F8E, 0xF8B1},{0x6F90, 0xE9FA},{0x6F94, 0xFBCB},{0x6F97, 0xCAD5},
- {0x6FA3, 0xF9D4},{0x6FA4, 0xF7CA},{0x6FA7, 0xD6C8},{0x6FAE, 0xFCE8},{0x6FAF, 0xF3BD},{0x6FB1, 0xEEFE},{0x6FB3, 0xE7FE},{0x6FB9, 0xD3C2},
- {0x6FBE, 0xD3B6},{0x6FC0, 0xCCAD},{0x6FC1, 0xF6FA},{0x6FC2, 0xD6B2},{0x6FC3, 0xD2D8},{0x6FCA, 0xE7D8},{0x6FD5, 0xE3A5},{0x6FDA, 0xE7B9},
- {0x6FDF, 0xF0AD},{0x6FE0, 0xFBCC},{0x6FE1, 0xEBA1},{0x6FE4, 0xD4A6},{0x6FE9, 0xFBCD},{0x6FEB, 0xD5BD},{0x6FEC, 0xF1DF},{0x6FEF, 0xF6FB},
- {0x6FF1, 0xDEB4},{0x6FFE, 0xD5EB},{0x7001, 0xE5C8},{0x7005, 0xFBA4},{0x7006, 0xD4B9},{0x7009, 0xDEE1},{0x700B, 0xE4A3},{0x700F, 0xD7B7},
- {0x7011, 0xF8EE},{0x7015, 0xDEB5},{0x7018, 0xD6D2},{0x701A, 0xF9D5},{0x701B, 0xE7BA},{0x701C, 0xEBD5},{0x701D, 0xD5F7},{0x701E, 0xEFE7},
- {0x701F, 0xE1BE},{0x7023, 0xFAAE},{0x7027, 0xD6E9},{0x7028, 0xD6EE},{0x702F, 0xE7BB},{0x7037, 0xECCB},{0x703E, 0xD5B3},{0x704C, 0xCEB4},
- {0x7050, 0xFBA5},{0x7051, 0xE1EE},{0x7058, 0xF7A8},{0x705D, 0xFBCE},{0x7063, 0xD8BD},{0x706B, 0xFBFD},{0x7070, 0xFCE9},{0x7078, 0xCFB6},
- {0x707C, 0xEDC7},{0x707D, 0xEEAC},{0x7085, 0xCCDD},{0x708A, 0xF6A7},{0x708E, 0xE6FA},{0x7092, 0xF5A4},{0x7098, 0xFDDC},{0x7099, 0xEDB3},
- {0x709A, 0xCEC9},{0x70A1, 0xEFE8},{0x70A4, 0xE1BF},{0x70AB, 0xFADB},{0x70AC, 0xCBE3},{0x70AD, 0xF7A9},{0x70AF, 0xFBA6},{0x70B3, 0xDCB9},
- {0x70B7, 0xF1C0},{0x70B8, 0xEDC8},{0x70B9, 0xEFC3},{0x70C8, 0xD6AD},{0x70CB, 0xFDCE},{0x70CF, 0xE8A1},{0x70D8, 0xFBF4},{0x70D9, 0xD5A7},
- {0x70DD, 0xF1F6},{0x70DF, 0xE6D3},{0x70F1, 0xCCDE},{0x70F9, 0xF8B2},{0x70FD, 0xDCEB},{0x7104, 0xFDB6},{0x7109, 0xE5EA},{0x710C, 0xF1E0},
- {0x7119, 0xDBCC},{0x711A, 0xDDCD},{0x711E, 0xD4C8},{0x7121, 0xD9ED},{0x7126, 0xF5A5},{0x7130, 0xE6FB},{0x7136, 0xE6D4},{0x7147, 0xFDC8},
- {0x7149, 0xD6A1},{0x714A, 0xFDBF},{0x714C, 0xFCD3},{0x714E, 0xEFA1},{0x7150, 0xE7BC},{0x7156, 0xD1EE},{0x7159, 0xE6D5},{0x715C, 0xE9F2},
- {0x715E, 0xDFB0},{0x7164, 0xD8E0},{0x7165, 0xFCBA},{0x7166, 0xFDAF},{0x7167, 0xF0CE},{0x7169, 0xDBE1},{0x716C, 0xE5C9},{0x716E, 0xEDB4},
- {0x717D, 0xE0C3},{0x7184, 0xE3D8},{0x7189, 0xE9FB},{0x718A, 0xEAA8},{0x718F, 0xFDB7},{0x7192, 0xFBA7},{0x7194, 0xE9C2},{0x7199, 0xFDF7},
- {0x719F, 0xE2D9},{0x71A2, 0xDCEC},{0x71AC, 0xE8A2},{0x71B1, 0xE6F0},{0x71B9, 0xFDF8},{0x71BA, 0xFDF9},{0x71BE, 0xF6BF},{0x71C1, 0xE7A7},
- {0x71C3, 0xE6D7},{0x71C8, 0xD4F3},{0x71C9, 0xD4C9},{0x71CE, 0xD6FA},{0x71D0, 0xD7F2},{0x71D2, 0xE1C0},{0x71D4, 0xDBE2},{0x71D5, 0xE6D8},
- {0x71DF, 0xE7BD},{0x71E5, 0xF0CF},{0x71E6, 0xF3BE},{0x71E7, 0xE2AC},{0x71ED, 0xF5B7},{0x71EE, 0xE0F0},{0x71FB, 0xFDB8},{0x71FC, 0xE3E8},
- {0x71FE, 0xD4A7},{0x71FF, 0xE8FC},{0x7200, 0xFAD2},{0x7206, 0xF8EF},{0x7210, 0xD6D3},{0x721B, 0xD5B4},{0x722A, 0xF0D0},{0x722C, 0xF7F0},
- {0x722D, 0xEEB3},{0x7230, 0xEABA},{0x7232, 0xEAD3},{0x7235, 0xEDC9},{0x7236, 0xDDAB},{0x723A, 0xE5AC},{0x723B, 0xFDA1},{0x723D, 0xDFD0},
- {0x723E, 0xECB3},{0x7240, 0xDFD1},{0x7246, 0xEDED},{0x7247, 0xF8B8},{0x7248, 0xF7FA},{0x724C, 0xF8AB},{0x7252, 0xF4E0},{0x7258, 0xD4BA},
- {0x7259, 0xE4B3},{0x725B, 0xE9DA},{0x725D, 0xDEB6},{0x725F, 0xD9BF},{0x7261, 0xD9C0},{0x7262, 0xD6EF},{0x7267, 0xD9CC},{0x7269, 0xDAAA},
- {0x7272, 0xDFE5},{0x7279, 0xF7E5},{0x727D, 0xCCB2},{0x7280, 0xDFF9},{0x7281, 0xD7E0},{0x72A2, 0xD4BB},{0x72A7, 0xFDFA},{0x72AC, 0xCCB3},
- {0x72AF, 0xDBF3},{0x72C0, 0xDFD2},{0x72C2, 0xCECA},{0x72C4, 0xEEDA},{0x72CE, 0xE4E4},{0x72D0, 0xFBCF},{0x72D7, 0xCFB7},{0x72D9, 0xEEC3},
- {0x72E1, 0xCEEA},{0x72E9, 0xE2AD},{0x72F8, 0xD7E1},{0x72F9, 0xFAF5},{0x72FC, 0xD5C9},{0x72FD, 0xF8AC},{0x730A, 0xE7D9},{0x7316, 0xF3E9},
- {0x731B, 0xD8ED},{0x731C, 0xE3C4},{0x731D, 0xF0F1},{0x7325, 0xE8E5},{0x7329, 0xE0FA},{0x732A, 0xEEC4},{0x732B, 0xD9DE},{0x7336, 0xEBA2},
- {0x7337, 0xEBA3},{0x733E, 0xFCC2},{0x733F, 0xEABB},{0x7344, 0xE8AB},{0x7345, 0xDEE2},{0x7350, 0xEDEF},{0x7352, 0xE8A3},{0x7357, 0xCFF1},
- {0x7368, 0xD4BC},{0x736A, 0xFCEA},{0x7370, 0xE7BE},{0x7372, 0xFCF2},{0x7375, 0xD6B4},{0x7378, 0xE2AE},{0x737A, 0xD3B7},{0x737B, 0xFACC},
- {0x7384, 0xFADC},{0x7386, 0xEDB5},{0x7387, 0xE1E3},{0x7389, 0xE8AC},{0x738B, 0xE8DD},{0x738E, 0xEFE9},{0x7394, 0xF4BD},{0x7396, 0xCFB8},
- {0x7397, 0xE9DB},{0x7398, 0xD1AC},{0x739F, 0xDAC7},{0x73A7, 0xEBC9},{0x73A9, 0xE8CC},{0x73AD, 0xDEB7},{0x73B2, 0xD6BC},{0x73B3, 0xD3E5},
- {0x73B9, 0xFADD},{0x73C0, 0xDAD6},{0x73C2, 0xCAB1},{0x73C9, 0xDAC8},{0x73CA, 0xDFA6},{0x73CC, 0xF9B3},{0x73CD, 0xF2D2},{0x73CF, 0xCAC4},
- {0x73D6, 0xCECB},{0x73D9, 0xCDF5},{0x73DD, 0xFDB0},{0x73DE, 0xD5A8},{0x73E0, 0xF1C1},{0x73E3, 0xE2E9},{0x73E4, 0xDCCA},{0x73E5, 0xECB4},
- {0x73E6, 0xFAC0},{0x73E9, 0xFBA8},{0x73EA, 0xD0A8},{0x73ED, 0xDAEC},{0x73F7, 0xD9EE},{0x73F9, 0xE0FB},{0x73FD, 0xEFEA},{0x73FE, 0xFADE},
- {0x7401, 0xE0C4},{0x7403, 0xCFB9},{0x7405, 0xD5CA},{0x7406, 0xD7E2},{0x7407, 0xE2AF},{0x7409, 0xD7B8},{0x7413, 0xE8CD},{0x741B, 0xF6DA},
- {0x7420, 0xEFA2},{0x7421, 0xE2DA},{0x7422, 0xF6FC},{0x7425, 0xFBD0},{0x7426, 0xD1AD},{0x7428, 0xCDE4},{0x742A, 0xD1AE},{0x742B, 0xDCED},
- {0x742C, 0xE8CE},{0x742E, 0xF0F9},{0x742F, 0xCEB5},{0x7430, 0xE6FC},{0x7433, 0xD7FB},{0x7434, 0xD0D6},{0x7435, 0xDDF5},{0x7436, 0xF7F1},
- {0x7438, 0xF6FD},{0x743A, 0xDBF7},{0x743F, 0xFBEA},{0x7440, 0xE9DC},{0x7441, 0xD9C1},{0x7443, 0xF5F2},{0x7444, 0xE0C5},{0x744B, 0xEAD4},
- {0x7455, 0xF9C2},{0x7457, 0xEABC},{0x7459, 0xD2C5},{0x745A, 0xFBD1},{0x745B, 0xE7C0},{0x745C, 0xEBA5},{0x745E, 0xDFFA},{0x745F, 0xE3A2},
- {0x7460, 0xD7B9},{0x7462, 0xE9C3},{0x7464, 0xE8FD},{0x7465, 0xE8AF},{0x7468, 0xF2D3},{0x7469, 0xFBA9},{0x746A, 0xD8A5},{0x746F, 0xD5CB},
- {0x747E, 0xD0C8},{0x7482, 0xD1AF},{0x7483, 0xD7E3},{0x7487, 0xE0C6},{0x7489, 0xD6A2},{0x748B, 0xEDF0},{0x7498, 0xD7F3},{0x749C, 0xFCD4},
- {0x749E, 0xDAD7},{0x749F, 0xCCDF},{0x74A1, 0xF2D4},{0x74A3, 0xD1B0},{0x74A5, 0xCCE0},{0x74A7, 0xDBFD},{0x74A8, 0xF3BF},{0x74AA, 0xF0D1},
- {0x74B0, 0xFCBB},{0x74B2, 0xE2B0},{0x74B5, 0xE6A5},{0x74B9, 0xE2DB},{0x74BD, 0xDFDE},{0x74BF, 0xE0C7},{0x74C6, 0xF2EF},{0x74CA, 0xCCE1},
- {0x74CF, 0xD6EA},{0x74D4, 0xE7C2},{0x74D8, 0xCEB6},{0x74DA, 0xF3C0},{0x74DC, 0xCDFE},{0x74E0, 0xFBD2},{0x74E2, 0xF8F8},{0x74E3, 0xF7FB},
- {0x74E6, 0xE8BF},{0x74EE, 0xE8B7},{0x74F7, 0xEDB6},{0x7501, 0xDCBA},{0x7504, 0xCCB4},{0x7511, 0xF1F7},{0x7515, 0xE8B8},{0x7518, 0xCAF6},
- {0x751A, 0xE4A4},{0x751B, 0xF4D6},{0x751F, 0xDFE6},{0x7523, 0xDFA7},{0x7525, 0xDFE7},{0x7526, 0xE1C1},{0x7528, 0xE9C4},{0x752B, 0xDCCB},
- {0x752C, 0xE9C5},{0x7530, 0xEFA3},{0x7531, 0xEBA6},{0x7532, 0xCBA3},{0x7533, 0xE3E9},{0x7537, 0xD1FB},{0x7538, 0xEFA4},{0x753A, 0xEFEB},
- {0x7547, 0xD0B4},{0x754C, 0xCDA3},{0x754F, 0xE8E6},{0x7551, 0xEFA5},{0x7553, 0xD3CC},{0x7554, 0xDAED},{0x7559, 0xD7BA},{0x755B, 0xF2D5},
- {0x755C, 0xF5E5},{0x755D, 0xD9EF},{0x7562, 0xF9B4},{0x7565, 0xD5D4},{0x7566, 0xFDCF},{0x756A, 0xDBE3},{0x756F, 0xF1E1},{0x7570, 0xECB6},
- {0x7575, 0xFBFE},{0x7576, 0xD3D7},{0x7578, 0xD1B1},{0x757A, 0xCBB1},{0x757F, 0xD1B2},{0x7586, 0xCBB2},{0x7587, 0xF1C2},{0x758A, 0xF4E1},
- {0x758B, 0xF9B5},{0x758E, 0xE1C3},{0x758F, 0xE1C2},{0x7591, 0xEBF7},{0x759D, 0xDFA8},{0x75A5, 0xCBCA},{0x75AB, 0xE6B9},{0x75B1, 0xF8DE},
- {0x75B2, 0xF9AA},{0x75B3, 0xCAF7},{0x75B5, 0xEDB7},{0x75B8, 0xD3B8},{0x75B9, 0xF2D6},{0x75BC, 0xD4D9},{0x75BD, 0xEEC5},{0x75BE, 0xF2F0},
- {0x75C2, 0xCAB2},{0x75C5, 0xDCBB},{0x75C7, 0xF1F8},{0x75CD, 0xECB7},{0x75D2, 0xE5CA},{0x75D4, 0xF6C0},{0x75D5, 0xFDDD},{0x75D8, 0xD4E3},
- {0x75D9, 0xCCE2},{0x75DB, 0xF7D4},{0x75E2, 0xD7E5},{0x75F0, 0xD3C3},{0x75F2, 0xD8A6},{0x75F4, 0xF6C1},{0x75FA, 0xDDF6},{0x75FC, 0xCDC0},
- {0x7600, 0xE5DC},{0x760D, 0xE5CB},{0x7619, 0xE1C4},{0x761F, 0xE8B0},{0x7620, 0xF4B0},{0x7621, 0xF3EA},{0x7622, 0xDAEE},{0x7624, 0xD7BB},
- {0x7626, 0xE2B1},{0x763B, 0xD7AA},{0x7642, 0xD6FB},{0x764C, 0xE4DF},{0x764E, 0xCAD6},{0x7652, 0xEBA8},{0x7656, 0xDBFE},{0x7661, 0xF6C2},
- {0x7664, 0xEFBB},{0x7669, 0xD4FD},{0x766C, 0xE0C8},{0x7670, 0xE8B9},{0x7672, 0xEFA6},{0x7678, 0xCDA4},{0x767B, 0xD4F4},{0x767C, 0xDBA1},
- {0x767D, 0xDBDC},{0x767E, 0xDBDD},{0x7684, 0xEEDC},{0x7686, 0xCBCB},{0x7687, 0xFCD5},{0x768E, 0xCEEB},{0x7690, 0xCDC1},{0x7693, 0xFBD3},
- {0x76AE, 0xF9AB},{0x76BA, 0xF5D4},{0x76BF, 0xD9A9},{0x76C2, 0xE9DD},{0x76C3, 0xDBCD},{0x76C6, 0xDDCE},{0x76C8, 0xE7C3},{0x76CA, 0xECCC},
- {0x76D2, 0xF9EC},{0x76D6, 0xCBCC},{0x76DB, 0xE0FC},{0x76DC, 0xD4A8},{0x76DE, 0xEDD3},{0x76DF, 0xD8EF},{0x76E1, 0xF2D7},{0x76E3, 0xCAF8},
- {0x76E4, 0xDAEF},{0x76E7, 0xD6D4},{0x76EE, 0xD9CD},{0x76F2, 0xD8EE},{0x76F4, 0xF2C1},{0x76F8, 0xDFD3},{0x76FC, 0xDAF0},{0x76FE, 0xE2EA},
- {0x7701, 0xE0FD},{0x7704, 0xD8F8},{0x7708, 0xF7AF},{0x7709, 0xDAB6},{0x770B, 0xCAD7},{0x771E, 0xF2D8},{0x7720, 0xD8F9},{0x7729, 0xFADF},
- {0x7737, 0xCFEF},{0x7738, 0xD9C2},{0x773A, 0xF0D2},{0x773C, 0xE4D1},{0x7740, 0xF3B7},{0x774D, 0xFAE0},{0x775B, 0xEFEC},{0x7761, 0xE2B2},
- {0x7763, 0xD4BD},{0x7766, 0xD9CE},{0x776B, 0xF4E2},{0x7779, 0xD4A9},{0x777E, 0xCDC2},{0x777F, 0xE7DA},{0x778B, 0xF2D9},{0x7791, 0xD9AA},
- {0x779E, 0xD8BE},{0x77A5, 0xDCAD},{0x77AC, 0xE2EB},{0x77AD, 0xD6FC},{0x77B0, 0xCAF9},{0x77B3, 0xD4DA},{0x77BB, 0xF4D7},{0x77BC, 0xCCA1},
- {0x77BF, 0xCFBA},{0x77D7, 0xF5B8},{0x77DB, 0xD9C3},{0x77DC, 0xD0E8},{0x77E2, 0xE3C5},{0x77E3, 0xEBF8},{0x77E5, 0xF2B1},{0x77E9, 0xCFBB},
- {0x77ED, 0xD3AD},{0x77EE, 0xE8E1},{0x77EF, 0xCEEC},{0x77F3, 0xE0B4},{0x7802, 0xDEE3},{0x7812, 0xDDF7},{0x7825, 0xF2B2},{0x7826, 0xF3F6},
- {0x7827, 0xF6DB},{0x782C, 0xD7FE},{0x7832, 0xF8DF},{0x7834, 0xF7F2},{0x7845, 0xD0A9},{0x784F, 0xE6DA},{0x785D, 0xF5A6},{0x786B, 0xD7BC},
- {0x786C, 0xCCE3},{0x786F, 0xE6DB},{0x787C, 0xDDDD},{0x7881, 0xD1B3},{0x7887, 0xEFED},{0x788C, 0xD6DE},{0x788D, 0xE4F4},{0x788E, 0xE1EF},
- {0x7891, 0xDDF8},{0x7897, 0xE8CF},{0x78A3, 0xCAE5},{0x78A7, 0xDCA1},{0x78A9, 0xE0B5},{0x78BA, 0xFCAC},{0x78BB, 0xFCAD},{0x78BC, 0xD8A7},
- {0x78C1, 0xEDB8},{0x78C5, 0xDBB6},{0x78CA, 0xD6F0},{0x78CB, 0xF3AF},{0x78CE, 0xCDA5},{0x78D0, 0xDAF1},{0x78E8, 0xD8A8},{0x78EC, 0xCCE4},
- {0x78EF, 0xD1B4},{0x78F5, 0xCAD8},{0x78FB, 0xDAF2},{0x7901, 0xF5A7},{0x790E, 0xF5A8},{0x7916, 0xE6A6},{0x792A, 0xD5EC},{0x792B, 0xD5F8},
- {0x792C, 0xDAF3},{0x793A, 0xE3C6},{0x793E, 0xDEE4},{0x7940, 0xDEE5},{0x7941, 0xD1B5},{0x7947, 0xD1B6},{0x7948, 0xD1B7},{0x7949, 0xF2B3},
- {0x7950, 0xE9DE},{0x7956, 0xF0D3},{0x7957, 0xF2B4},{0x795A, 0xF0D4},{0x795B, 0xCBE4},{0x795C, 0xFBD4},{0x795D, 0xF5E6},{0x795E, 0xE3EA},
- {0x7960, 0xDEE6},{0x7965, 0xDFD4},{0x7968, 0xF8F9},{0x796D, 0xF0AE},{0x797A, 0xD1B8},{0x797F, 0xD6DF},{0x7981, 0xD0D7},{0x798D, 0xFCA1},
- {0x798E, 0xEFEE},{0x798F, 0xDCD8},{0x7991, 0xE9DF},{0x79A6, 0xE5DD},{0x79A7, 0xFDFB},{0x79AA, 0xE0C9},{0x79AE, 0xD6C9},{0x79B1, 0xD4AA},
- {0x79B3, 0xE5CC},{0x79B9, 0xE9E0},{0x79BD, 0xD0D8},{0x79BE, 0xFCA2},{0x79BF, 0xD4BE},{0x79C0, 0xE2B3},{0x79C1, 0xDEE7},{0x79C9, 0xDCBC},
- {0x79CA, 0xD2B6},{0x79CB, 0xF5D5},{0x79D1, 0xCEA1},{0x79D2, 0xF5A9},{0x79D5, 0xDDF9},{0x79D8, 0xDDFA},{0x79DF, 0xF0D5},{0x79E4, 0xF6DF},
- {0x79E6, 0xF2DA},{0x79E7, 0xE4EB},{0x79E9, 0xF2F1},{0x79FB, 0xECB9},{0x7A00, 0xFDFC},{0x7A05, 0xE1AA},{0x7A08, 0xCAD9},{0x7A0B, 0xEFEF},
- {0x7A0D, 0xF5AA},{0x7A14, 0xECF9},{0x7A17, 0xF8AD},{0x7A19, 0xF2C2},{0x7A1A, 0xF6C3},{0x7A1C, 0xD7D2},{0x7A1F, 0xF9A2},{0x7A20, 0xF0D6},
- {0x7A2E, 0xF0FA},{0x7A31, 0xF6E0},{0x7A36, 0xE9F3},{0x7A37, 0xF2C3},{0x7A3B, 0xD4AB},{0x7A3C, 0xCAB3},{0x7A3D, 0xCDA6},{0x7A3F, 0xCDC3},
- {0x7A40, 0xCDDA},{0x7A46, 0xD9CF},{0x7A49, 0xF6C4},{0x7A4D, 0xEEDD},{0x7A4E, 0xE7C4},{0x7A57, 0xE2B4},{0x7A61, 0xDFE2},{0x7A62, 0xE7DB},
- {0x7A69, 0xE8B1},{0x7A6B, 0xFCAE},{0x7A70, 0xE5CD},{0x7A74, 0xFAEB},{0x7A76, 0xCFBC},{0x7A79, 0xCFE2},{0x7A7A, 0xCDF6},{0x7A7D, 0xEFF0},
- {0x7A7F, 0xF4BE},{0x7A81, 0xD4CD},{0x7A84, 0xF3B8},{0x7A88, 0xE9A1},{0x7A92, 0xF2F2},{0x7A93, 0xF3EB},{0x7A95, 0xF0D7},{0x7A98, 0xCFD7},
- {0x7A9F, 0xCFDF},{0x7AA9, 0xE8C0},{0x7AAA, 0xE8C1},{0x7AAE, 0xCFE3},{0x7AAF, 0xE9A2},{0x7ABA, 0xD0AA},{0x7AC4, 0xF3C1},{0x7AC5, 0xD0AB},
- {0x7AC7, 0xD4E4},{0x7ACA, 0xEFBC},{0x7ACB, 0xD8A1},{0x7AD7, 0xD9DF},{0x7AD9, 0xF3D7},{0x7ADD, 0xDCBD},{0x7ADF, 0xCCE5},{0x7AE0, 0xEDF1},
- {0x7AE3, 0xF1E2},{0x7AE5, 0xD4DB},{0x7AEA, 0xE2B5},{0x7AED, 0xCAE6},{0x7AEF, 0xD3AE},{0x7AF6, 0xCCE6},{0x7AF9, 0xF1D3},{0x7AFA, 0xF5E7},
- {0x7AFF, 0xCADA},{0x7B0F, 0xFBEE},{0x7B11, 0xE1C5},{0x7B19, 0xDFE9},{0x7B1B, 0xEEDE},{0x7B1E, 0xF7C2},{0x7B20, 0xD8A2},{0x7B26, 0xDDAC},
- {0x7B2C, 0xF0AF},{0x7B2D, 0xD6BD},{0x7B39, 0xE1AB},{0x7B46, 0xF9B6},{0x7B49, 0xD4F5},{0x7B4B, 0xD0C9},{0x7B4C, 0xEFA7},{0x7B4D, 0xE2EC},
- {0x7B4F, 0xDBEA},{0x7B50, 0xCECC},{0x7B51, 0xF5E8},{0x7B52, 0xF7D5},{0x7B54, 0xD3CD},{0x7B56, 0xF3FE},{0x7B60, 0xD0B5},{0x7B6C, 0xE0FE},
- {0x7B6E, 0xDFFB},{0x7B75, 0xE6DD},{0x7B7D, 0xE8A4},{0x7B87, 0xCBCD},{0x7B8B, 0xEFA8},{0x7B8F, 0xEEB4},{0x7B94, 0xDAD8},{0x7B95, 0xD1B9},
- {0x7B97, 0xDFA9},{0x7B9A, 0xF3B0},{0x7B9D, 0xCCC4},{0x7BA1, 0xCEB7},{0x7BAD, 0xEFA9},{0x7BB1, 0xDFD5},{0x7BB4, 0xEDD7},{0x7BB8, 0xEEC6},
- {0x7BC0, 0xEFBD},{0x7BC1, 0xFCD6},{0x7BC4, 0xDBF4},{0x7BC6, 0xEFAA},{0x7BC7, 0xF8B9},{0x7BC9, 0xF5E9},{0x7BD2, 0xE3D9},{0x7BE0, 0xE1C6},
- {0x7BE4, 0xD4BF},{0x7BE9, 0xDEE8},{0x7C07, 0xF0EA},{0x7C12, 0xF3C2},{0x7C1E, 0xD3AF},{0x7C21, 0xCADB},{0x7C27, 0xFCD7},{0x7C2A, 0xEDD8},
- {0x7C2B, 0xE1C7},{0x7C3D, 0xF4D8},{0x7C3E, 0xD6B3},{0x7C3F, 0xDDAD},{0x7C43, 0xD5BE},{0x7C4C, 0xF1C3},{0x7C4D, 0xEEDF},{0x7C60, 0xD6EB},
- {0x7C64, 0xF4D9},{0x7C6C, 0xD7E6},{0x7C73, 0xDAB7},{0x7C83, 0xDDFB},{0x7C89, 0xDDCF},{0x7C92, 0xD8A3},{0x7C95, 0xDAD9},{0x7C97, 0xF0D8},
- {0x7C98, 0xEFC4},{0x7C9F, 0xE1D8},{0x7CA5, 0xF1D4},{0x7CA7, 0xEDF2},{0x7CAE, 0xD5DB},{0x7CB1, 0xD5DC},{0x7CB2, 0xF3C4},{0x7CB3, 0xCBD7},
- {0x7CB9, 0xE2B6},{0x7CBE, 0xEFF1},{0x7CCA, 0xFBD5},{0x7CD6, 0xD3D8},{0x7CDE, 0xDDD0},{0x7CDF, 0xF0D9},{0x7CE0, 0xCBB3},{0x7CE7, 0xD5DD},
- {0x7CFB, 0xCDA7},{0x7CFE, 0xD0AC},{0x7D00, 0xD1BA},{0x7D02, 0xF1C4},{0x7D04, 0xE5B3},{0x7D05, 0xFBF5},{0x7D06, 0xE9E1},{0x7D07, 0xFDE0},
- {0x7D08, 0xFCBC},{0x7D0A, 0xDAA2},{0x7D0B, 0xDAA3},{0x7D0D, 0xD2A1},{0x7D10, 0xD2EF},{0x7D14, 0xE2ED},{0x7D17, 0xDEE9},{0x7D18, 0xCEDC},
- {0x7D19, 0xF2B5},{0x7D1A, 0xD0E4},{0x7D1B, 0xDDD1},{0x7D20, 0xE1C8},{0x7D21, 0xDBB7},{0x7D22, 0xDFE3},{0x7D2B, 0xEDB9},{0x7D2C, 0xF1C5},
- {0x7D2E, 0xF3CF},{0x7D2F, 0xD7AB},{0x7D30, 0xE1AC},{0x7D33, 0xE3EB},{0x7D35, 0xEEC7},{0x7D39, 0xE1C9},{0x7D3A, 0xCAFA},{0x7D42, 0xF0FB},
- {0x7D43, 0xFAE1},{0x7D44, 0xF0DA},{0x7D45, 0xCCE7},{0x7D46, 0xDAF4},{0x7D50, 0xCCBF},{0x7D5E, 0xCEED},{0x7D61, 0xD5A9},{0x7D62, 0xFAE2},
- {0x7D66, 0xD0E5},{0x7D68, 0xEBD6},{0x7D6A, 0xECDF},{0x7D6E, 0xDFFC},{0x7D71, 0xF7D6},{0x7D72, 0xDEEA},{0x7D73, 0xCBB4},{0x7D76, 0xEFBE},
- {0x7D79, 0xCCB5},{0x7D7F, 0xCFBD},{0x7D8E, 0xEFF2},{0x7D8F, 0xE2B7},{0x7D93, 0xCCE8},{0x7D9C, 0xF0FC},{0x7DA0, 0xD6E0},{0x7DA2, 0xF1C6},
- {0x7DAC, 0xE2B8},{0x7DAD, 0xEBAB},{0x7DB1, 0xCBB5},{0x7DB2, 0xD8D1},{0x7DB4, 0xF4CE},{0x7DB5, 0xF3F7},{0x7DB8, 0xD7C6},{0x7DBA, 0xD1BB},
- {0x7DBB, 0xF7AA},{0x7DBD, 0xEDCA},{0x7DBE, 0xD7D3},{0x7DBF, 0xD8FA},{0x7DC7, 0xF6C5},{0x7DCA, 0xD1CC},{0x7DCB, 0xDDFC},{0x7DD6, 0xDFFD},
- {0x7DD8, 0xF9E5},{0x7DDA, 0xE0CA},{0x7DDD, 0xF2FD},{0x7DDE, 0xD3B0},{0x7DE0, 0xF4F3},{0x7DE1, 0xDAC9},{0x7DE3, 0xE6DE},{0x7DE8, 0xF8BA},
- {0x7DE9, 0xE8D0},{0x7DEC, 0xD8FB},{0x7DEF, 0xEAD5},{0x7DF4, 0xD6A3},{0x7DFB, 0xF6C6},{0x7E09, 0xF2DB},{0x7E0A, 0xE4FC},{0x7E15, 0xE8B2},
- {0x7E1B, 0xDADA},{0x7E1D, 0xF2DC},{0x7E1E, 0xFBD6},{0x7E1F, 0xE9B2},{0x7E21, 0xEEAD},{0x7E23, 0xFAE3},{0x7E2B, 0xDCEE},{0x7E2E, 0xF5EA},
- {0x7E2F, 0xE6E0},{0x7E31, 0xF0FD},{0x7E37, 0xD7AC},{0x7E3D, 0xF5C5},{0x7E3E, 0xEEE0},{0x7E41, 0xDBE5},{0x7E43, 0xDDDE},{0x7E46, 0xD9F0},
- {0x7E47, 0xE9A3},{0x7E52, 0xF1F9},{0x7E54, 0xF2C4},{0x7E55, 0xE0CB},{0x7E5E, 0xE9A4},{0x7E61, 0xE2B9},{0x7E69, 0xE3B1},{0x7E6A, 0xFCEB},
- {0x7E6B, 0xCDA8},{0x7E6D, 0xCCB6},{0x7E70, 0xF0DB},{0x7E79, 0xE6BA},{0x7E7C, 0xCDA9},{0x7E82, 0xF3C3},{0x7E8C, 0xE1D9},{0x7E8F, 0xEFAB},
- {0x7E93, 0xE7C5},{0x7E96, 0xE0E9},{0x7E98, 0xF3C5},{0x7E9B, 0xD4C0},{0x7E9C, 0xD5BF},{0x7F36, 0xDDAE},{0x7F38, 0xF9FC},{0x7F3A, 0xCCC0},
- {0x7F4C, 0xE5A2},{0x7F50, 0xCEB8},{0x7F54, 0xD8D2},{0x7F55, 0xF9D6},{0x7F6A, 0xF1AA},{0x7F6B, 0xCED1},{0x7F6E, 0xF6C7},{0x7F70, 0xDBEB},
- {0x7F72, 0xDFFE},{0x7F75, 0xD8E1},{0x7F77, 0xF7F3},{0x7F79, 0xD7E7},{0x7F85, 0xD4FE},{0x7F88, 0xD1BC},{0x7F8A, 0xE5CF},{0x7F8C, 0xCBB6},
- {0x7F8E, 0xDAB8},{0x7F94, 0xCDC4},{0x7F9A, 0xD6BE},{0x7F9E, 0xE2BA},{0x7FA4, 0xCFD8},{0x7FA8, 0xE0CC},{0x7FA9, 0xEBF9},{0x7FB2, 0xFDFD},
- {0x7FB8, 0xD7E8},{0x7FB9, 0xCBD8},{0x7FBD, 0xE9E2},{0x7FC1, 0xE8BA},{0x7FC5, 0xE3C7},{0x7FCA, 0xECCD},{0x7FCC, 0xECCE},{0x7FCE, 0xD6BF},
- {0x7FD2, 0xE3A7},{0x7FD4, 0xDFD6},{0x7FD5, 0xFDE8},{0x7FDF, 0xEEE1},{0x7FE0, 0xF6A8},{0x7FE1, 0xDDFD},{0x7FE9, 0xF8BB},{0x7FEB, 0xE8D1},
- {0x7FF0, 0xF9D7},{0x7FF9, 0xCEEE},{0x7FFC, 0xECCF},{0x8000, 0xE9A5},{0x8001, 0xD6D5},{0x8003, 0xCDC5},{0x8005, 0xEDBA},{0x8006, 0xD1BD},
- {0x8009, 0xCFBE},{0x800C, 0xECBB},{0x8010, 0xD2B1},{0x8015, 0xCCE9},{0x8017, 0xD9C4},{0x8018, 0xE9FC},{0x802D, 0xD1BE},{0x8033, 0xECBC},
- {0x8036, 0xE5AD},{0x803D, 0xF7B0},{0x803F, 0xCCEA},{0x8043, 0xD3C4},{0x8046, 0xD6C0},{0x804A, 0xD6FD},{0x8056, 0xE1A1},{0x8058, 0xDEBD},
- {0x805A, 0xF6A9},{0x805E, 0xDAA4},{0x806F, 0xD6A4},{0x8070, 0xF5C6},{0x8072, 0xE1A2},{0x8073, 0xE9C6},{0x8077, 0xF2C5},{0x807D, 0xF4E9},
- {0x807E, 0xD6EC},{0x807F, 0xEBD3},{0x8084, 0xECBD},{0x8085, 0xE2DC},{0x8086, 0xDEEB},{0x8087, 0xF0DC},{0x8089, 0xEBBF},{0x808B, 0xD7CE},
- {0x808C, 0xD1BF},{0x8096, 0xF5AB},{0x809B, 0xF9FD},{0x809D, 0xCADC},{0x80A1, 0xCDC6},{0x80A2, 0xF2B6},{0x80A5, 0xDDFE},{0x80A9, 0xCCB7},
- {0x80AA, 0xDBB8},{0x80AF, 0xD0E9},{0x80B1, 0xCEDD},{0x80B2, 0xEBC0},{0x80B4, 0xFDA2},{0x80BA, 0xF8CB},{0x80C3, 0xEAD6},{0x80C4, 0xF1B0},
- {0x80CC, 0xDBCE},{0x80CE, 0xF7C3},{0x80DA, 0xDBCF},{0x80DB, 0xCBA4},{0x80DE, 0xF8E0},{0x80E1, 0xFBD7},{0x80E4, 0xEBCA},{0x80E5, 0xE0A1},
- {0x80F1, 0xCECD},{0x80F4, 0xD4DC},{0x80F8, 0xFDD8},{0x80FD, 0xD2F6},{0x8102, 0xF2B7},{0x8105, 0xFAF6},{0x8106, 0xF6AA},{0x8107, 0xFAF7},
- {0x8108, 0xD8E6},{0x810A, 0xF4B1},{0x8118, 0xE8D2},{0x811A, 0xCAC5},{0x811B, 0xCCEB},{0x8123, 0xE2EE},{0x8129, 0xE2BB},{0x812B, 0xF7AD},
- {0x812F, 0xF8E1},{0x8139, 0xF3EC},{0x813E, 0xDEA1},{0x814B, 0xE4FD},{0x814E, 0xE3EC},{0x8150, 0xDDAF},{0x8151, 0xDDB0},{0x8154, 0xCBB7},
- {0x8155, 0xE8D3},{0x8165, 0xE1A3},{0x8166, 0xD2E0},{0x816B, 0xF0FE},{0x8170, 0xE9A6},{0x8171, 0xCBF2},{0x8178, 0xEDF3},{0x8179, 0xDCD9},
- {0x817A, 0xE0CD},{0x817F, 0xF7DA},{0x8180, 0xDBB9},{0x8188, 0xCCAE},{0x818A, 0xDADB},{0x818F, 0xCDC7},{0x819A, 0xDDB1},{0x819C, 0xD8AF},
- {0x819D, 0xE3A3},{0x81A0, 0xCEEF},{0x81A3, 0xF2F3},{0x81A8, 0xF8B3},{0x81B3, 0xE0CE},{0x81B5, 0xF5FD},{0x81BA, 0xEBEC},{0x81BD, 0xD3C5},
- {0x81BE, 0xFCEC},{0x81BF, 0xD2DB},{0x81C0, 0xD4EB},{0x81C2, 0xDEA2},{0x81C6, 0xE5E6},{0x81CD, 0xF0B0},{0x81D8, 0xD5C4},{0x81DF, 0xEDF4},
- {0x81E3, 0xE3ED},{0x81E5, 0xE8C2},{0x81E7, 0xEDF5},{0x81E8, 0xD7FC},{0x81EA, 0xEDBB},{0x81ED, 0xF6AB},{0x81F3, 0xF2B8},{0x81F4, 0xF6C8},
- {0x81FA, 0xD3E6},{0x81FB, 0xF2DD},{0x81FC, 0xCFBF},{0x81FE, 0xEBAC},{0x8205, 0xCFC0},{0x8207, 0xE6A8},{0x8208, 0xFDE9},{0x820A, 0xCFC1},
- {0x820C, 0xE0DF},{0x820D, 0xDEEC},{0x8212, 0xE0A2},{0x821B, 0xF4BF},{0x821C, 0xE2EF},{0x821E, 0xD9F1},{0x821F, 0xF1C7},{0x8221, 0xCBB8},
- {0x822A, 0xF9FE},{0x822B, 0xDBBA},{0x822C, 0xDAF5},{0x8235, 0xF6EC},{0x8236, 0xDADC},{0x8237, 0xFAE4},{0x8239, 0xE0CF},{0x8240, 0xDDB2},
- {0x8245, 0xE6A9},{0x8247, 0xEFF3},{0x8259, 0xF3ED},{0x8264, 0xEBFA},{0x8266, 0xF9E6},{0x826E, 0xCADD},{0x826F, 0xD5DE},{0x8271, 0xCADE},
- {0x8272, 0xDFE4},{0x8276, 0xE6FD},{0x8278, 0xF5AC},{0x827E, 0xE4F5},{0x828B, 0xE9E3},{0x828D, 0xEDCB},{0x828E, 0xCFE4},{0x8292, 0xD8D3},
- {0x8299, 0xDDB3},{0x829A, 0xD4EC},{0x829D, 0xF2B9},{0x829F, 0xDFB7},{0x82A5, 0xCBCE},{0x82A6, 0xFBD8},{0x82A9, 0xD0D9},{0x82AC, 0xDDD2},
- {0x82AD, 0xF7F4},{0x82AE, 0xE7DC},{0x82AF, 0xE4A5},{0x82B1, 0xFCA3},{0x82B3, 0xDBBB},{0x82B7, 0xF2BA},{0x82B8, 0xE9FD},{0x82B9, 0xD0CA},
- {0x82BB, 0xF5D6},{0x82BC, 0xD9C5},{0x82BD, 0xE4B4},{0x82BF, 0xEDA7},{0x82D1, 0xEABD},{0x82D2, 0xE6FE},{0x82D4, 0xF7C4},{0x82D5, 0xF5AD},
- {0x82D7, 0xD9E0},{0x82DB, 0xCAB4},{0x82DE, 0xF8E2},{0x82DF, 0xCFC2},{0x82E1, 0xECBE},{0x82E5, 0xE5B4},{0x82E6, 0xCDC8},{0x82E7, 0xEEC8},
- {0x82F1, 0xE7C8},{0x82FD, 0xCDC9},{0x82FE, 0xF9B7},{0x8301, 0xF1E8},{0x8302, 0xD9F2},{0x8303, 0xDBF5},{0x8304, 0xCAB5},{0x8305, 0xD9C6},
- {0x8309, 0xD8C9},{0x8317, 0xD9AB},{0x8328, 0xEDBC},{0x832B, 0xD8D4},{0x832F, 0xDCDA},{0x8331, 0xE2BC},{0x8334, 0xFCED},{0x8335, 0xECE0},
- {0x8336, 0xD2FE},{0x8338, 0xE9C7},{0x8339, 0xE6AA},{0x8340, 0xE2F0},{0x8347, 0xFABB},{0x8349, 0xF5AE},{0x834A, 0xFBAA},{0x834F, 0xECFB},
- {0x8351, 0xECBF},{0x8352, 0xFCD8},{0x8373, 0xD4E5},{0x8377, 0xF9C3},{0x837B, 0xEEE2},{0x8389, 0xD7E9},{0x838A, 0xEDF6},{0x838E, 0xDEED},
- {0x8396, 0xCCEC},{0x8398, 0xE3EE},{0x839E, 0xE8D4},{0x83A2, 0xFAF8},{0x83A9, 0xDDB4},{0x83AA, 0xE4B5},{0x83AB, 0xD8B0},{0x83BD, 0xD8D5},
- {0x83C1, 0xF4EA},{0x83C5, 0xCEB9},{0x83C9, 0xD6E1},{0x83CA, 0xCFD2},{0x83CC, 0xD0B6},{0x83D3, 0xCEA2},{0x83D6, 0xF3EE},{0x83DC, 0xF3F8},
- {0x83E9, 0xDCCC},{0x83EB, 0xD0CB},{0x83EF, 0xFCA4},{0x83F0, 0xCDCA},{0x83F1, 0xD7D4},{0x83F2, 0xDEA3},{0x83F4, 0xE4E0},{0x83F9, 0xEEC9},
- {0x83FD, 0xE2DD},{0x8403, 0xF5FE},{0x8404, 0xD4AC},{0x840A, 0xD5D1},{0x840C, 0xD8F0},{0x840D, 0xF8C3},{0x840E, 0xEAD7},{0x8429, 0xF5D7},
- {0x842C, 0xD8BF},{0x8431, 0xFDC0},{0x8438, 0xEBAD},{0x843D, 0xD5AA},{0x8449, 0xE7A8},{0x8457, 0xEECA},{0x845B, 0xCAE7},{0x8461, 0xF8E3},
- {0x8463, 0xD4DD},{0x8466, 0xEAD8},{0x846B, 0xFBD9},{0x846C, 0xEDF7},{0x846F, 0xE5B5},{0x8475, 0xD0AD},{0x847A, 0xF1F1},{0x8490, 0xE2BD},
- {0x8494, 0xE3C8},{0x8499, 0xD9D5},{0x849C, 0xDFAA},{0x84A1, 0xDBBC},{0x84B2, 0xF8E4},{0x84B8, 0xF1FA},{0x84BB, 0xE5B6},{0x84BC, 0xF3EF},
- {0x84BF, 0xFBDA},{0x84C0, 0xE1E0},{0x84C2, 0xD9AC},{0x84C4, 0xF5EB},{0x84C6, 0xE0B6},{0x84C9, 0xE9C8},{0x84CB, 0xCBCF},{0x84CD, 0xE3C9},
- {0x84D1, 0xDEEE},{0x84DA, 0xE2BE},{0x84EC, 0xDCEF},{0x84EE, 0xD6A5},{0x84F4, 0xE2F1},{0x84FC, 0xD6FE},{0x8511, 0xD9A1},{0x8513, 0xD8C0},
- {0x8514, 0xDCDB},{0x8517, 0xEDBD},{0x8518, 0xDFB8},{0x851A, 0xEAA5},{0x851E, 0xD7AD},{0x8521, 0xF3F9},{0x8523, 0xEDF8},{0x8525, 0xF5C7},
- {0x852C, 0xE1CA},{0x852D, 0xEBE3},{0x852F, 0xF2DE},{0x853D, 0xF8CC},{0x853F, 0xEAD9},{0x8541, 0xD3C6},{0x8543, 0xDBE6},{0x8549, 0xF5AF},
- {0x854E, 0xCEF0},{0x8553, 0xE9FE},{0x8559, 0xFBB6},{0x8563, 0xE2F2},{0x8568, 0xCFF2},{0x8569, 0xF7B9},{0x856A, 0xD9F3},{0x856D, 0xE1CB},
- {0x8584, 0xDADD},{0x8587, 0xDAB9},{0x858F, 0xEBFB},{0x8591, 0xCBB9},{0x8594, 0xEDF9},{0x859B, 0xE0E0},{0x85A6, 0xF4C0},{0x85A8, 0xFDBC},
- {0x85A9, 0xDFB1},{0x85AA, 0xE3EF},{0x85AF, 0xE0A3},{0x85B0, 0xFDB9},{0x85BA, 0xF0B1},{0x85C1, 0xCDCB},{0x85C9, 0xEDBE},{0x85CD, 0xD5C0},
- {0x85CE, 0xE3F0},{0x85CF, 0xEDFA},{0x85D5, 0xE9E4},{0x85DC, 0xD5ED},{0x85DD, 0xE7DD},{0x85E4, 0xD4F6},{0x85E5, 0xE5B7},{0x85E9, 0xDBE7},
- {0x85EA, 0xE2BF},{0x85F7, 0xEECB},{0x85FA, 0xD7F4},{0x85FB, 0xF0DD},{0x85FF, 0xCEAB},{0x8602, 0xE7DE},{0x8606, 0xD6D6},{0x8607, 0xE1CC},
- {0x860A, 0xE8B3},{0x8616, 0xE5EE},{0x8617, 0xDCA2},{0x861A, 0xE0D0},{0x862D, 0xD5B5},{0x863F, 0xD5A1},{0x864E, 0xFBDB},{0x8650, 0xF9CB},
- {0x8654, 0xCBF3},{0x8655, 0xF4A5},{0x865B, 0xFAC8},{0x865C, 0xD6D7},{0x865E, 0xE9E5},{0x865F, 0xFBDC},{0x8667, 0xFDD0},{0x8679, 0xFBF6},
- {0x868A, 0xDAA5},{0x868C, 0xDBBD},{0x8693, 0xECE2},{0x86A3, 0xCDF7},{0x86A4, 0xF0DE},{0x86A9, 0xF6C9},{0x86C7, 0xDEEF},{0x86CB, 0xD3B1},
- {0x86D4, 0xFCEE},{0x86D9, 0xE8C3},{0x86DB, 0xF1C8},{0x86DF, 0xCEF1},{0x86E4, 0xF9ED},{0x86ED, 0xF2F4},{0x86FE, 0xE4B6},{0x8700, 0xF5B9},
- {0x8702, 0xDCF0},{0x8703, 0xE3F1},{0x8708, 0xE8A5},{0x8718, 0xF2BB},{0x871A, 0xDEA4},{0x871C, 0xDACC},{0x874E, 0xCAE9},{0x8755, 0xE3DA},
- {0x8757, 0xFCD9},{0x875F, 0xEADA},{0x8766, 0xF9C4},{0x8768, 0xE3A4},{0x8774, 0xFBDD},{0x8776, 0xEFCA},{0x8778, 0xE8C4},{0x8782, 0xD5CC},
- {0x878D, 0xEBD7},{0x879F, 0xD9AD},{0x87A2, 0xFBAB},{0x87B3, 0xD3D9},{0x87BA, 0xD5A2},{0x87C4, 0xF6DE},{0x87E0, 0xDAF6},{0x87EC, 0xE0D1},
- {0x87EF, 0xE9A8},{0x87F2, 0xF5F9},{0x87F9, 0xFAAF},{0x87FB, 0xEBFC},{0x87FE, 0xE0EA},{0x8805, 0xE3B2},{0x881F, 0xD5C5},{0x8822, 0xF1E3},
- {0x8823, 0xD5EE},{0x8831, 0xCDCC},{0x8836, 0xEDD9},{0x883B, 0xD8C1},{0x8840, 0xFAEC},{0x8846, 0xF1EB},{0x884C, 0xFABC},{0x884D, 0xE6E2},
- {0x8852, 0xFAE5},{0x8853, 0xE2FA},{0x8857, 0xCAB6},{0x8859, 0xE4B7},{0x885B, 0xEADB},{0x885D, 0xF5FA},{0x8861, 0xFBAC},{0x8862, 0xCFC3},
- {0x8863, 0xEBFD},{0x8868, 0xF8FA},{0x886B, 0xDFB9},{0x8870, 0xE1F1},{0x8872, 0xD2A4},{0x8877, 0xF5FB},{0x887E, 0xD0DA},{0x887F, 0xD0DB},
- {0x8881, 0xEABE},{0x8882, 0xD9B1},{0x8888, 0xCAB7},{0x888B, 0xD3E7},{0x888D, 0xF8E5},{0x8892, 0xD3B2},{0x8896, 0xE2C0},{0x8897, 0xF2DF},
- {0x889E, 0xCDE5},{0x88AB, 0xF9AC},{0x88B4, 0xCDCD},{0x88C1, 0xEEAE},{0x88C2, 0xD6AE},{0x88CF, 0xD7EA},{0x88D4, 0xE7E0},{0x88D5, 0xEBAE},
- {0x88D9, 0xCFD9},{0x88DC, 0xDCCD},{0x88DD, 0xEDFB},{0x88DF, 0xDEF0},{0x88E1, 0xD7EB},{0x88E8, 0xDEA5},{0x88F3, 0xDFD7},{0x88F4, 0xDBD0},
- {0x88F5, 0xDBD1},{0x88F8, 0xD5A3},{0x88FD, 0xF0B2},{0x8907, 0xDCDC},{0x8910, 0xCAE8},{0x8912, 0xF8E6},{0x8913, 0xDCCE},{0x8918, 0xEADC},
- {0x8919, 0xDBD2},{0x8925, 0xE9B3},{0x892A, 0xF7DB},{0x8936, 0xE3A8},{0x8938, 0xD7AE},{0x893B, 0xE0E1},{0x8941, 0xCBBA},{0x8944, 0xE5D1},
- {0x895F, 0xD0DC},{0x8964, 0xD5C1},{0x896A, 0xD8CA},{0x8972, 0xE3A9},{0x897F, 0xE0A4},{0x8981, 0xE9A9},{0x8983, 0xD3C7},{0x8986, 0xDCDD},
- {0x8987, 0xF8AE},{0x898B, 0xCCB8},{0x898F, 0xD0AE},{0x8993, 0xD8F2},{0x8996, 0xE3CA},{0x89A1, 0xCCAF},{0x89A9, 0xD4AD},{0x89AA, 0xF6D1},
- {0x89B2, 0xD0CC},{0x89BA, 0xCAC6},{0x89BD, 0xD5C2},{0x89C0, 0xCEBA},{0x89D2, 0xCAC7},{0x89E3, 0xFAB0},{0x89F4, 0xDFD8},{0x89F8, 0xF5BA},
- {0x8A00, 0xE5EB},{0x8A02, 0xEFF4},{0x8A03, 0xDDB5},{0x8A08, 0xCDAA},{0x8A0A, 0xE3F2},{0x8A0C, 0xFBF7},{0x8A0E, 0xF7D0},{0x8A13, 0xFDBA},
- {0x8A16, 0xFDE1},{0x8A17, 0xF6FE},{0x8A18, 0xD1C0},{0x8A1B, 0xE8C5},{0x8A1D, 0xE4B8},{0x8A1F, 0xE1E8},{0x8A23, 0xCCC1},{0x8A25, 0xD2ED},
- {0x8A2A, 0xDBBE},{0x8A2D, 0xE0E2},{0x8A31, 0xFAC9},{0x8A34, 0xE1CD},{0x8A36, 0xCAB8},{0x8A3A, 0xF2E0},{0x8A3B, 0xF1C9},{0x8A50, 0xDEF1},
- {0x8A54, 0xF0DF},{0x8A55, 0xF8C4},{0x8A5B, 0xEECC},{0x8A5E, 0xDEF2},{0x8A60, 0xE7C9},{0x8A62, 0xE2F3},{0x8A63, 0xE7E1},{0x8A66, 0xE3CB},
- {0x8A69, 0xE3CC},{0x8A6D, 0xCFF8},{0x8A6E, 0xEFAC},{0x8A70, 0xFDFE},{0x8A71, 0xFCA5},{0x8A72, 0xFAB1},{0x8A73, 0xDFD9},{0x8A75, 0xE0D2},
- {0x8A79, 0xF4DA},{0x8A85, 0xF1CA},{0x8A87, 0xCEA3},{0x8A8C, 0xF2BC},{0x8A8D, 0xECE3},{0x8A93, 0xE0A5},{0x8A95, 0xF7AB},{0x8A98, 0xEBAF},
- {0x8A9E, 0xE5DE},{0x8AA0, 0xE1A4},{0x8AA1, 0xCDAB},{0x8AA3, 0xD9F4},{0x8AA4, 0xE8A6},{0x8AA5, 0xCDCE},{0x8AA6, 0xE1E9},{0x8AA8, 0xFCEF},
- {0x8AAA, 0xE0E3},{0x8AB0, 0xE2C1},{0x8AB2, 0xCEA4},{0x8AB9, 0xDEA6},{0x8ABC, 0xEBFE},{0x8ABE, 0xEBDD},{0x8ABF, 0xF0E0},{0x8AC2, 0xF4DB},
- {0x8AC4, 0xE2F4},{0x8AC7, 0xD3C8},{0x8ACB, 0xF4EB},{0x8ACD, 0xEEB5},{0x8ACF, 0xF5D8},{0x8AD2, 0xD5DF},{0x8AD6, 0xD6E5},{0x8ADB, 0xEBB0},
- {0x8ADC, 0xF4E3},{0x8AE1, 0xE3CD},{0x8AE6, 0xF4F4},{0x8AE7, 0xFAB2},{0x8AEA, 0xEFF5},{0x8AEB, 0xCADF},{0x8AED, 0xEBB1},{0x8AEE, 0xEDBF},
- {0x8AF1, 0xFDC9},{0x8AF6, 0xE4A6},{0x8AF7, 0xF9A4},{0x8AF8, 0xF0B3},{0x8AFA, 0xE5EC},{0x8AFE, 0xD1E7},{0x8B00, 0xD9C7},{0x8B01, 0xE4D7},
- {0x8B02, 0xEADD},{0x8B04, 0xD4F7},{0x8B0E, 0xDABA},{0x8B10, 0xDACD},{0x8B14, 0xF9CC},{0x8B16, 0xE1DA},{0x8B17, 0xDBBF},{0x8B19, 0xCCC5},
- {0x8B1A, 0xECD0},{0x8B1B, 0xCBBB},{0x8B1D, 0xDEF3},{0x8B20, 0xE9AA},{0x8B28, 0xD9C8},{0x8B2B, 0xEEE3},{0x8B2C, 0xD7BD},{0x8B33, 0xCFC4},
- {0x8B39, 0xD0CD},{0x8B41, 0xFCA6},{0x8B49, 0xF1FB},{0x8B4E, 0xFDD2},{0x8B4F, 0xD1C1},{0x8B58, 0xE3DB},{0x8B5A, 0xD3C9},{0x8B5C, 0xDCCF},
- {0x8B66, 0xCCED},{0x8B6C, 0xDEA7},{0x8B6F, 0xE6BB},{0x8B70, 0xECA1},{0x8B74, 0xCCB9},{0x8B77, 0xFBDE},{0x8B7D, 0xE7E2},{0x8B80, 0xD4C1},
- {0x8B8A, 0xDCA8},{0x8B90, 0xE2C2},{0x8B92, 0xF3D8},{0x8B93, 0xE5D3},{0x8B96, 0xF3D9},{0x8B9A, 0xF3C6},{0x8C37, 0xCDDB},{0x8C3F, 0xCDAC},
- {0x8C41, 0xFCC3},{0x8C46, 0xD4E7},{0x8C48, 0xD1C2},{0x8C4A, 0xF9A5},{0x8C4C, 0xE8D5},{0x8C55, 0xE3CE},{0x8C5A, 0xD4CA},{0x8C61, 0xDFDA},
- {0x8C6A, 0xFBDF},{0x8C6B, 0xE7E3},{0x8C79, 0xF8FB},{0x8C7A, 0xE3CF},{0x8C82, 0xF5B0},{0x8C8A, 0xD8E7},{0x8C8C, 0xD9C9},{0x8C9D, 0xF8AF},
- {0x8C9E, 0xEFF6},{0x8CA0, 0xDDB6},{0x8CA1, 0xEEAF},{0x8CA2, 0xCDF8},{0x8CA7, 0xDEB8},{0x8CA8, 0xFCA7},{0x8CA9, 0xF7FC},{0x8CAA, 0xF7B1},
- {0x8CAB, 0xCEBB},{0x8CAC, 0xF4A1},{0x8CAF, 0xEECD},{0x8CB0, 0xE1AE},{0x8CB3, 0xECC3},{0x8CB4, 0xCFFE},{0x8CB6, 0xF8BF},{0x8CB7, 0xD8E2},
- {0x8CB8, 0xD3E8},{0x8CBB, 0xDEA8},{0x8CBC, 0xF4E4},{0x8CBD, 0xECC2},{0x8CBF, 0xD9F5},{0x8CC0, 0xF9C5},{0x8CC1, 0xDDD3},{0x8CC2, 0xD6F1},
- {0x8CC3, 0xECFC},{0x8CC4, 0xFCF0},{0x8CC7, 0xEDC0},{0x8CC8, 0xCAB9},{0x8CCA, 0xEEE4},{0x8CD1, 0xF2E1},{0x8CD3, 0xDEB9},{0x8CDA, 0xD6F2},
- {0x8CDC, 0xDEF4},{0x8CDE, 0xDFDB},{0x8CE0, 0xDBD3},{0x8CE2, 0xFAE7},{0x8CE3, 0xD8E3},{0x8CE4, 0xF4C1},{0x8CE6, 0xDDB7},{0x8CEA, 0xF2F5},
- {0x8CED, 0xD4AE},{0x8CF4, 0xD6F3},{0x8CFB, 0xDDB8},{0x8CFC, 0xCFC5},{0x8CFD, 0xDFDF},{0x8D04, 0xF2BE},{0x8D05, 0xF6A1},{0x8D07, 0xEBCB},
- {0x8D08, 0xF1FC},{0x8D0A, 0xF3C7},{0x8D0D, 0xE0EB},{0x8D13, 0xEDFC},{0x8D16, 0xE1DB},{0x8D64, 0xEEE5},{0x8D66, 0xDEF5},{0x8D6B, 0xFAD3},
- {0x8D70, 0xF1CB},{0x8D73, 0xD0AF},{0x8D74, 0xDDB9},{0x8D77, 0xD1C3},{0x8D85, 0xF5B1},{0x8D8A, 0xEAC6},{0x8D99, 0xF0E1},{0x8DA3, 0xF6AC},
- {0x8DA8, 0xF5D9},{0x8DB3, 0xF0EB},{0x8DBA, 0xDDBA},{0x8DBE, 0xF2BF},{0x8DC6, 0xF7C5},{0x8DCB, 0xDBA2},{0x8DCC, 0xF2F6},{0x8DCF, 0xCABA},
- {0x8DDB, 0xF7F5},{0x8DDD, 0xCBE5},{0x8DE1, 0xEEE6},{0x8DE3, 0xE0D3},{0x8DE8, 0xCEA5},{0x8DEF, 0xD6D8},{0x8DF3, 0xD4AF},{0x8E0A, 0xE9C9},
- {0x8E0F, 0xD3CE},{0x8E10, 0xF4C2},{0x8E1E, 0xCBE6},{0x8E2A, 0xF1A1},{0x8E30, 0xEBB2},{0x8E35, 0xF1A2},{0x8E42, 0xEBB3},{0x8E44, 0xF0B4},
- {0x8E47, 0xCBF4},{0x8E48, 0xD4B0},{0x8E49, 0xF3B2},{0x8E4A, 0xFBB7},{0x8E59, 0xF5EC},{0x8E5F, 0xEEE7},{0x8E60, 0xF4B2},{0x8E74, 0xF5ED},
- {0x8E76, 0xCFF3},{0x8E81, 0xF0E2},{0x8E87, 0xEECE},{0x8E8A, 0xF1CC},{0x8E8D, 0xE5B8},{0x8EAA, 0xD7F5},{0x8EAB, 0xE3F3},{0x8EAC, 0xCFE5},
- {0x8EC0, 0xCFC6},{0x8ECA, 0xF3B3},{0x8ECB, 0xE4D8},{0x8ECC, 0xCFF9},{0x8ECD, 0xCFDA},{0x8ED2, 0xFACD},{0x8EDF, 0xE6E3},{0x8EEB, 0xF2E2},
- {0x8EF8, 0xF5EE},{0x8EFB, 0xCABB},{0x8EFE, 0xE3DC},{0x8F03, 0xCEF2},{0x8F05, 0xD6D9},{0x8F09, 0xEEB0},{0x8F12, 0xF4E5},{0x8F13, 0xD8C2},
- {0x8F14, 0xDCD0},{0x8F15, 0xCCEE},{0x8F1B, 0xD5E0},{0x8F1C, 0xF6CA},{0x8F1D, 0xFDCA},{0x8F1E, 0xD8D6},{0x8F1F, 0xF4CF},{0x8F26, 0xD6A6},
- {0x8F27, 0xDCBE},{0x8F29, 0xDBD4},{0x8F2A, 0xD7C7},{0x8F2F, 0xF2FE},{0x8F33, 0xF1CD},{0x8F38, 0xE2C3},{0x8F39, 0xDCDE},{0x8F3B, 0xDCDF},
- {0x8F3E, 0xEFAD},{0x8F3F, 0xE6AB},{0x8F44, 0xF9DD},{0x8F45, 0xEABF},{0x8F49, 0xEFAE},{0x8F4D, 0xF4D0},{0x8F4E, 0xCEF3},{0x8F5D, 0xE6AC},
- {0x8F5F, 0xCEDE},{0x8F62, 0xD5F9},{0x8F9B, 0xE3F4},{0x8F9C, 0xCDD0},{0x8FA3, 0xD5B8},{0x8FA6, 0xF7FD},{0x8FA8, 0xDCA9},{0x8FAD, 0xDEF6},
- {0x8FAF, 0xDCAA},{0x8FB0, 0xF2E3},{0x8FB1, 0xE9B4},{0x8FB2, 0xD2DC},{0x8FC2, 0xE9E6},{0x8FC5, 0xE3F6},{0x8FCE, 0xE7CA},{0x8FD1, 0xD0CE},
- {0x8FD4, 0xDAF7},{0x8FE6, 0xCABC},{0x8FEA, 0xEEE8},{0x8FEB, 0xDADE},{0x8FED, 0xF2F7},{0x8FF0, 0xE2FB},{0x8FF2, 0xCCA6},{0x8FF7, 0xDABB},
- {0x8FF9, 0xEEE9},{0x8FFD, 0xF5DA},{0x9000, 0xF7DC},{0x9001, 0xE1EA},{0x9002, 0xCEC1},{0x9003, 0xD4B1},{0x9005, 0xFDB1},{0x9006, 0xE6BD},
- {0x9008, 0xFBAD},{0x900B, 0xF8E7},{0x900D, 0xE1CE},{0x900F, 0xF7E2},{0x9010, 0xF5EF},{0x9011, 0xCFC7},{0x9014, 0xD4B2},{0x9015, 0xCCEF},
- {0x9017, 0xD4E8},{0x9019, 0xEECF},{0x901A, 0xF7D7},{0x901D, 0xE0A6},{0x901E, 0xD6C1},{0x901F, 0xE1DC},{0x9020, 0xF0E3},{0x9021, 0xF1E4},
- {0x9022, 0xDCF1},{0x9023, 0xD6A7},{0x902E, 0xF4F5},{0x9031, 0xF1CE},{0x9032, 0xF2E4},{0x9035, 0xD0B0},{0x9038, 0xECEF},{0x903C, 0xF9BA},
- {0x903E, 0xEBB5},{0x9041, 0xD4ED},{0x9042, 0xE2C4},{0x9047, 0xE9E7},{0x904A, 0xEBB4},{0x904B, 0xEAA1},{0x904D, 0xF8BC},{0x904E, 0xCEA6},
- {0x9050, 0xF9C6},{0x9051, 0xFCDA},{0x9053, 0xD4B3},{0x9054, 0xD3B9},{0x9055, 0xEADE},{0x9059, 0xE9AB},{0x905C, 0xE1E1},{0x905D, 0xD3CF},
- {0x905E, 0xF4F6},{0x9060, 0xEAC0},{0x9061, 0xE1CF},{0x9063, 0xCCBA},{0x9069, 0xEEEA},{0x906D, 0xF0E4},{0x906E, 0xF3B4},{0x906F, 0xD4EE},
- {0x9072, 0xF2C0},{0x9075, 0xF1E5},{0x9077, 0xF4C3},{0x9078, 0xE0D4},{0x907A, 0xEBB6},{0x907C, 0xD7A1},{0x907D, 0xCBE8},{0x907F, 0xF9AD},
- {0x9080, 0xE9AD},{0x9081, 0xD8E4},{0x9082, 0xFAB3},{0x9083, 0xE2C5},{0x9084, 0xFCBD},{0x9087, 0xECC4},{0x9088, 0xD8B1},{0x908A, 0xDCAB},
- {0x908F, 0xD5A4},{0x9091, 0xEBE9},{0x9095, 0xE8BB},{0x9099, 0xD8D7},{0x90A2, 0xFBAE},{0x90A3, 0xD1E1},{0x90A6, 0xDBC0},{0x90A8, 0xF5BE},
- {0x90AA, 0xDEF7},{0x90AF, 0xCAFB},{0x90B0, 0xF7C6},{0x90B1, 0xCFC8},{0x90B5, 0xE1D0},{0x90B8, 0xEED0},{0x90C1, 0xE9F4},{0x90CA, 0xCEF4},
- {0x90DE, 0xD5CD},{0x90E1, 0xCFDB},{0x90E8, 0xDDBB},{0x90ED, 0xCEAC},{0x90F5, 0xE9E8},{0x90FD, 0xD4B4},{0x9102, 0xE4C7},{0x9112, 0xF5DB},
- {0x9115, 0xFAC1},{0x9119, 0xDEA9},{0x9127, 0xD4F8},{0x912D, 0xEFF7},{0x9132, 0xD3B3},{0x9149, 0xEBB7},{0x914A, 0xEFF8},{0x914B, 0xF5DC},
- {0x914C, 0xEDCC},{0x914D, 0xDBD5},{0x914E, 0xF1CF},{0x9152, 0xF1D0},{0x9162, 0xF5B2},{0x9169, 0xD9AE},{0x916A, 0xD5AC},{0x916C, 0xE2C6},
- {0x9175, 0xFDA3},{0x9177, 0xFBE5},{0x9178, 0xDFAB},{0x9187, 0xE2F5},{0x9189, 0xF6AD},{0x918B, 0xF5B3},{0x918D, 0xF0B5},{0x9192, 0xE1A5},
- {0x919C, 0xF5DD},{0x91AB, 0xECA2},{0x91AC, 0xEDFD},{0x91AE, 0xF5B4},{0x91AF, 0xFBB8},{0x91B1, 0xDBA3},{0x91B4, 0xD6CA},{0x91B5, 0xCBD9},
- {0x91C0, 0xE5D4},{0x91C7, 0xF3FA},{0x91C9, 0xEBB8},{0x91CB, 0xE0B7},{0x91CC, 0xD7EC},{0x91CD, 0xF1EC},{0x91CE, 0xE5AF},{0x91CF, 0xD5E1},
- {0x91D0, 0xD7ED},{0x91D1, 0xD1D1},{0x91D7, 0xE1F2},{0x91D8, 0xEFF9},{0x91DC, 0xDDBC},{0x91DD, 0xF6DC},{0x91E3, 0xF0E5},{0x91E7, 0xF4C4},
- {0x91EA, 0xE9E9},{0x91F5, 0xF3FB},{0x920D, 0xD4EF},{0x9210, 0xCCA2},{0x9211, 0xF7FE},{0x9212, 0xDFBC},{0x9217, 0xEBCD},{0x921E, 0xD0B7},
- {0x9234, 0xD6C2},{0x923A, 0xE8AD},{0x923F, 0xEFAF},{0x9240, 0xCBA5},{0x9245, 0xCBE9},{0x9249, 0xFAE8},{0x9257, 0xCCC6},{0x925B, 0xE6E7},
- {0x925E, 0xEAC7},{0x9262, 0xDBA4},{0x9264, 0xCFC9},{0x9265, 0xE2FC},{0x9266, 0xEFFA},{0x9280, 0xEBDE},{0x9283, 0xF5C8},{0x9285, 0xD4DE},
- {0x9291, 0xE0D5},{0x9293, 0xEFB0},{0x9296, 0xE2C7},{0x9298, 0xD9AF},{0x929C, 0xF9E7},{0x92B3, 0xE7E5},{0x92B6, 0xCFCA},{0x92B7, 0xE1D1},
- {0x92B9, 0xE2C8},{0x92CC, 0xEFFB},{0x92CF, 0xFAF9},{0x92D2, 0xDCF2},{0x92E4, 0xE0A7},{0x92EA, 0xF8E8},{0x92F8, 0xCBEA},{0x92FC, 0xCBBC},
- {0x9304, 0xD6E2},{0x9310, 0xF5DE},{0x9318, 0xF5DF},{0x931A, 0xEEB6},{0x931E, 0xE2F6},{0x931F, 0xD3CA},{0x9320, 0xEFFC},{0x9321, 0xD1C4},
- {0x9322, 0xEFB1},{0x9324, 0xD1C5},{0x9326, 0xD0DE},{0x9328, 0xD9E1},{0x932B, 0xE0B8},{0x932E, 0xCDD1},{0x932F, 0xF3B9},{0x9348, 0xE7CC},
- {0x934A, 0xD6A8},{0x934B, 0xCEA7},{0x934D, 0xD4B5},{0x9354, 0xE4C8},{0x935B, 0xD3B4},{0x936E, 0xEBB9},{0x9375, 0xCBF5},{0x937C, 0xF6DD},
- {0x937E, 0xF1A3},{0x938C, 0xCCC7},{0x9394, 0xE9CA},{0x9396, 0xE1F0},{0x939A, 0xF5E0},{0x93A3, 0xFBAF},{0x93A7, 0xCBD1},{0x93AC, 0xFBE0},
- {0x93AD, 0xF2E5},{0x93B0, 0xECF0},{0x93C3, 0xF0EC},{0x93D1, 0xEEEB},{0x93DE, 0xE9CB},{0x93E1, 0xCCF0},{0x93E4, 0xD7AF},{0x93F6, 0xF3A1},
- {0x9404, 0xFCF5},{0x9418, 0xF1A4},{0x9425, 0xE0D6},{0x942B, 0xEFB2},{0x9435, 0xF4D1},{0x9438, 0xF7A1},{0x9444, 0xF1D1},{0x9451, 0xCAFC},
- {0x9452, 0xCAFD},{0x945B, 0xCECE},{0x947D, 0xF3C8},{0x947F, 0xF3BA},{0x9577, 0xEDFE},{0x9580, 0xDAA6},{0x9583, 0xE0EC},{0x9589, 0xF8CD},
- {0x958B, 0xCBD2},{0x958F, 0xEBCE},{0x9591, 0xF9D8},{0x9592, 0xF9D9},{0x9593, 0xCAE0},{0x9594, 0xDACA},{0x9598, 0xCBA6},{0x95A3, 0xCAC8},
- {0x95A4, 0xF9EE},{0x95A5, 0xDBEC},{0x95A8, 0xD0B1},{0x95AD, 0xD5EF},{0x95B1, 0xE6F3},{0x95BB, 0xE7A2},{0x95BC, 0xE4D9},{0x95C7, 0xE4E1},
- {0x95CA, 0xFCC4},{0x95D4, 0xF9EF},{0x95D5, 0xCFF4},{0x95D6, 0xF7E6},{0x95DC, 0xCEBC},{0x95E1, 0xF4C5},{0x95E2, 0xDCA3},{0x961C, 0xDDBD},
- {0x9621, 0xF4C6},{0x962A, 0xF8A1},{0x962E, 0xE8D6},{0x9632, 0xDBC1},{0x963B, 0xF0E6},{0x963F, 0xE4B9},{0x9640, 0xF6ED},{0x9642, 0xF9AE},
- {0x9644, 0xDDBE},{0x964B, 0xD7B0},{0x964C, 0xD8E8},{0x964D, 0xCBBD},{0x9650, 0xF9DA},{0x965B, 0xF8CE},{0x965C, 0xF9F0},{0x965D, 0xE0ED},
- {0x965E, 0xE3B3},{0x965F, 0xF4B3},{0x9662, 0xEAC2},{0x9663, 0xF2E6},{0x9664, 0xF0B6},{0x966A, 0xDBD6},{0x9670, 0xEBE4},{0x9673, 0xF2E7},
- {0x9675, 0xD7D5},{0x9676, 0xD4B6},{0x9677, 0xF9E8},{0x9678, 0xD7C1},{0x967D, 0xE5D5},{0x9685, 0xE9EA},{0x9686, 0xD7CC},{0x968A, 0xD3E9},
- {0x968B, 0xE2C9},{0x968D, 0xFCDB},{0x968E, 0xCDAD},{0x9694, 0xCCB0},{0x9695, 0xEAA2},{0x9698, 0xE4F6},{0x9699, 0xD0C0},{0x969B, 0xF0B7},
- {0x969C, 0xEEA1},{0x96A3, 0xD7F6},{0x96A7, 0xE2CA},{0x96A8, 0xE2CB},{0x96AA, 0xFACF},{0x96B1, 0xEBDF},{0x96B7, 0xD6CB},{0x96BB, 0xF4B4},
- {0x96C0, 0xEDCD},{0x96C1, 0xE4D2},{0x96C4, 0xEAA9},{0x96C5, 0xE4BA},{0x96C6, 0xF3A2},{0x96C7, 0xCDD2},{0x96C9, 0xF6CB},{0x96CB, 0xF1E6},
- {0x96CC, 0xEDC1},{0x96CD, 0xE8BC},{0x96CE, 0xEED1},{0x96D5, 0xF0E7},{0x96D6, 0xE2CC},{0x96D9, 0xE4AA},{0x96DB, 0xF5E1},{0x96DC, 0xEDDA},
- {0x96E2, 0xD7EE},{0x96E3, 0xD1F1},{0x96E8, 0xE9EB},{0x96E9, 0xE9EC},{0x96EA, 0xE0E4},{0x96EF, 0xDAA7},{0x96F0, 0xDDD4},{0x96F2, 0xEAA3},
- {0x96F6, 0xD6C3},{0x96F7, 0xD6F4},{0x96F9, 0xDADF},{0x96FB, 0xEFB3},{0x9700, 0xE2CD},{0x9706, 0xEFFD},{0x9707, 0xF2E8},{0x9711, 0xEFC5},
- {0x9713, 0xE7E7},{0x9716, 0xD7FD},{0x9719, 0xE7CE},{0x971C, 0xDFDC},{0x971E, 0xF9C7},{0x9727, 0xD9F6},{0x9730, 0xDFAC},{0x9732, 0xD6DA},
- {0x9739, 0xDCA4},{0x973D, 0xF0B8},{0x9742, 0xD5FA},{0x9744, 0xE4F7},{0x9748, 0xD6C4},{0x9751, 0xF4EC},{0x9756, 0xEFFE},{0x975C, 0xF0A1},
- {0x975E, 0xDEAA},{0x9761, 0xDABC},{0x9762, 0xD8FC},{0x9769, 0xFAD4},{0x976D, 0xECE5},{0x9774, 0xFCA8},{0x9777, 0xECE6},{0x977A, 0xD8CB},
- {0x978B, 0xFBB9},{0x978D, 0xE4D3},{0x978F, 0xCDF9},{0x97A0, 0xCFD3},{0x97A8, 0xCAEA},{0x97AB, 0xCFD4},{0x97AD, 0xF8BD},{0x97C6, 0xF4C7},
- {0x97CB, 0xEADF},{0x97D3, 0xF9DB},{0x97DC, 0xD4B7},{0x97F3, 0xEBE5},{0x97F6, 0xE1D2},{0x97FB, 0xEAA4},{0x97FF, 0xFAC2},{0x9800, 0xFBE1},
- {0x9801, 0xFAED},{0x9802, 0xF0A2},{0x9803, 0xCCF1},{0x9805, 0xFAA3},{0x9806, 0xE2F7},{0x9808, 0xE2CE},{0x980A, 0xE9F5},{0x980C, 0xE1EB},
- {0x9810, 0xE7E8},{0x9811, 0xE8D7},{0x9812, 0xDAF8},{0x9813, 0xD4CB},{0x9817, 0xF7F6},{0x9818, 0xD6C5},{0x982D, 0xD4E9},{0x9830, 0xFAFA},
- {0x9838, 0xCCF2},{0x9839, 0xF7DD},{0x983B, 0xDEBA},{0x9846, 0xCEA8},{0x984C, 0xF0B9},{0x984D, 0xE4FE},{0x984E, 0xE4C9},{0x9854, 0xE4D4},
- {0x9858, 0xEAC3},{0x985A, 0xEFB4},{0x985E, 0xD7BE},{0x9865, 0xFBE2},{0x9867, 0xCDD3},{0x986B, 0xEFB5},{0x986F, 0xFAE9},{0x98A8, 0xF9A6},
- {0x98AF, 0xDFBD},{0x98B1, 0xF7C7},{0x98C4, 0xF8FD},{0x98C7, 0xF8FC},{0x98DB, 0xDEAB},{0x98DC, 0xDBE8},{0x98DF, 0xE3DD},{0x98E1, 0xE1E2},
- {0x98E2, 0xD1C6},{0x98ED, 0xF6D0},{0x98EE, 0xEBE6},{0x98EF, 0xDAF9},{0x98F4, 0xECC7},{0x98FC, 0xDEF8},{0x98FD, 0xF8E9},{0x98FE, 0xE3DE},
- {0x9903, 0xCEF5},{0x9909, 0xFAC3},{0x990A, 0xE5D7},{0x990C, 0xECC8},{0x9910, 0xF3C9},{0x9913, 0xE4BB},{0x9918, 0xE6AE},{0x991E, 0xEFB6},
- {0x9920, 0xDCBF},{0x9928, 0xCEBD},{0x9945, 0xD8C3},{0x9949, 0xD0CF},{0x994B, 0xCFFA},{0x994C, 0xF3CA},{0x994D, 0xE0D7},{0x9951, 0xD1C7},
- {0x9952, 0xE9AE},{0x9954, 0xE8BD},{0x9957, 0xFAC4},{0x9996, 0xE2CF},{0x9999, 0xFAC5},{0x999D, 0xF9B8},{0x99A5, 0xDCE0},{0x99A8, 0xFBB0},
- {0x99AC, 0xD8A9},{0x99AD, 0xE5DF},{0x99AE, 0xF9A7},{0x99B1, 0xF6EE},{0x99B3, 0xF6CC},{0x99B4, 0xE2F8},{0x99B9, 0xECF1},{0x99C1, 0xDAE0},
- {0x99D0, 0xF1D2},{0x99D1, 0xD2CC},{0x99D2, 0xCFCB},{0x99D5, 0xCABD},{0x99D9, 0xDDBF},{0x99DD, 0xF6EF},{0x99DF, 0xDEF9},{0x99ED, 0xFAB4},
- {0x99F1, 0xD5AD},{0x99FF, 0xF1E7},{0x9A01, 0xDEBE},{0x9A08, 0xDCC0},{0x9A0E, 0xD1C8},{0x9A0F, 0xD1C9},{0x9A19, 0xF8BE},{0x9A2B, 0xCBF6},
- {0x9A30, 0xD4F9},{0x9A36, 0xF5E2},{0x9A37, 0xE1D3},{0x9A40, 0xD8E9},{0x9A43, 0xF8FE},{0x9A45, 0xCFCC},{0x9A4D, 0xFDA4},{0x9A55, 0xCEF6},
- {0x9A57, 0xFAD0},{0x9A5A, 0xCCF3},{0x9A5B, 0xE6BE},{0x9A5F, 0xF6AE},{0x9A62, 0xD5F0},{0x9A65, 0xD1CA},{0x9A69, 0xFCBE},{0x9A6A, 0xD5F1},
- {0x9AA8, 0xCDE9},{0x9AB8, 0xFAB5},{0x9AD3, 0xE2D0},{0x9AD4, 0xF4F7},{0x9AD8, 0xCDD4},{0x9AE5, 0xE7A3},{0x9AEE, 0xDBA5},{0x9B1A, 0xE2D1},
- {0x9B27, 0xD7A2},{0x9B2A, 0xF7E3},{0x9B31, 0xEAA6},{0x9B3C, 0xD0A1},{0x9B41, 0xCEDA},{0x9B42, 0xFBEB},{0x9B43, 0xDBA6},{0x9B44, 0xDBDE},
- {0x9B45, 0xD8E5},{0x9B4F, 0xEAE0},{0x9B54, 0xD8AA},{0x9B5A, 0xE5E0},{0x9B6F, 0xD6DB},{0x9B8E, 0xEFC6},{0x9B91, 0xF8EA},{0x9B9F, 0xE4D5},
- {0x9BAB, 0xCEF7},{0x9BAE, 0xE0D8},{0x9BC9, 0xD7EF},{0x9BD6, 0xF4ED},{0x9BE4, 0xCDE6},{0x9BE8, 0xCCF4},{0x9C0D, 0xF5E3},{0x9C10, 0xE4CA},
- {0x9C12, 0xDCE1},{0x9C15, 0xF9C8},{0x9C25, 0xFCBF},{0x9C32, 0xE8A7},{0x9C3B, 0xD8C4},{0x9C47, 0xCBBE},{0x9C49, 0xDCAE},{0x9C57, 0xD7F7},
- {0x9CE5, 0xF0E8},{0x9CE7, 0xDDC0},{0x9CE9, 0xCFCD},{0x9CF3, 0xDCF3},{0x9CF4, 0xD9B0},{0x9CF6, 0xE6E9},{0x9D09, 0xE4BC},{0x9D1B, 0xEAC4},
- {0x9D26, 0xE4EC},{0x9D28, 0xE4E5},{0x9D3B, 0xFBF8},{0x9D51, 0xCCBB},{0x9D5D, 0xE4BD},{0x9D60, 0xCDDC},{0x9D61, 0xD9F7},{0x9D6C, 0xDDDF},
- {0x9D72, 0xEDCE},{0x9DA9, 0xD9D0},{0x9DAF, 0xE5A3},{0x9DB4, 0xF9CD},{0x9DC4, 0xCDAE},{0x9DD7, 0xCFCE},{0x9DF2, 0xF6AF},{0x9DF8, 0xFDD3},
- {0x9DF9, 0xEBED},{0x9DFA, 0xD6DC},{0x9E1A, 0xE5A4},{0x9E1E, 0xD5B6},{0x9E75, 0xD6DD},{0x9E79, 0xF9E9},{0x9E7D, 0xE7A4},{0x9E7F, 0xD6E3},
- {0x9E92, 0xD1CB},{0x9E93, 0xD6E4},{0x9E97, 0xD5F2},{0x9E9D, 0xDEFA},{0x9E9F, 0xD7F8},{0x9EA5, 0xD8EA},{0x9EB4, 0xCFD5},{0x9EB5, 0xD8FD},
- {0x9EBB, 0xD8AB},{0x9EBE, 0xFDCB},{0x9EC3, 0xFCDC},{0x9ECD, 0xE0A8},{0x9ECE, 0xD5F3},{0x9ED1, 0xFDD9},{0x9ED4, 0xCCA3},{0x9ED8, 0xD9F9},
- {0x9EDB, 0xD3EA},{0x9EDC, 0xF5F5},{0x9EDE, 0xEFC7},{0x9EE8, 0xD3DA},{0x9EF4, 0xDABD},{0x9F07, 0xE8A8},{0x9F08, 0xDCAF},{0x9F0E, 0xF0A3},
- {0x9F13, 0xCDD5},{0x9F20, 0xE0A9},{0x9F3B, 0xDEAC},{0x9F4A, 0xF0BA},{0x9F4B, 0xEEB1},{0x9F4E, 0xEEB2},{0x9F52, 0xF6CD},{0x9F5F, 0xEED2},
- {0x9F61, 0xD6C6},{0x9F67, 0xE0E5},{0x9F6A, 0xF3BB},{0x9F6C, 0xE5E1},{0x9F77, 0xE4CB},{0x9F8D, 0xD7A3},{0x9F90, 0xDBC2},{0x9F95, 0xCAFE},
- {0x9F9C, 0xCFCF},{0xAC00, 0xB0A1},{0xAC01, 0xB0A2},{0xAC02, 0x8141},{0xAC03, 0x8142},{0xAC04, 0xB0A3},{0xAC05, 0x8143},{0xAC06, 0x8144},
- {0xAC07, 0xB0A4},{0xAC08, 0xB0A5},{0xAC09, 0xB0A6},{0xAC0A, 0xB0A7},{0xAC0B, 0x8145},{0xAC0C, 0x8146},{0xAC0D, 0x8147},{0xAC0E, 0x8148},
- {0xAC0F, 0x8149},{0xAC10, 0xB0A8},{0xAC11, 0xB0A9},{0xAC12, 0xB0AA},{0xAC13, 0xB0AB},{0xAC14, 0xB0AC},{0xAC15, 0xB0AD},{0xAC16, 0xB0AE},
- {0xAC17, 0xB0AF},{0xAC18, 0x814A},{0xAC19, 0xB0B0},{0xAC1A, 0xB0B1},{0xAC1B, 0xB0B2},{0xAC1C, 0xB0B3},{0xAC1D, 0xB0B4},{0xAC1E, 0x814B},
- {0xAC1F, 0x814C},{0xAC20, 0xB0B5},{0xAC21, 0x814D},{0xAC22, 0x814E},{0xAC23, 0x814F},{0xAC24, 0xB0B6},{0xAC25, 0x8150},{0xAC26, 0x8151},
- {0xAC27, 0x8152},{0xAC28, 0x8153},{0xAC29, 0x8154},{0xAC2A, 0x8155},{0xAC2B, 0x8156},{0xAC2C, 0xB0B7},{0xAC2D, 0xB0B8},{0xAC2E, 0x8157},
- {0xAC2F, 0xB0B9},{0xAC30, 0xB0BA},{0xAC31, 0xB0BB},{0xAC32, 0x8158},{0xAC33, 0x8159},{0xAC34, 0x815A},{0xAC35, 0x8161},{0xAC36, 0x8162},
- {0xAC37, 0x8163},{0xAC38, 0xB0BC},{0xAC39, 0xB0BD},{0xAC3A, 0x8164},{0xAC3B, 0x8165},{0xAC3C, 0xB0BE},{0xAC3D, 0x8166},{0xAC3E, 0x8167},
- {0xAC3F, 0x8168},{0xAC40, 0xB0BF},{0xAC41, 0x8169},{0xAC42, 0x816A},{0xAC43, 0x816B},{0xAC44, 0x816C},{0xAC45, 0x816D},{0xAC46, 0x816E},
- {0xAC47, 0x816F},{0xAC48, 0x8170},{0xAC49, 0x8171},{0xAC4A, 0x8172},{0xAC4B, 0xB0C0},{0xAC4C, 0x8173},{0xAC4D, 0xB0C1},{0xAC4E, 0x8174},
- {0xAC4F, 0x8175},{0xAC50, 0x8176},{0xAC51, 0x8177},{0xAC52, 0x8178},{0xAC53, 0x8179},{0xAC54, 0xB0C2},{0xAC55, 0x817A},{0xAC56, 0x8181},
- {0xAC57, 0x8182},{0xAC58, 0xB0C3},{0xAC59, 0x8183},{0xAC5A, 0x8184},{0xAC5B, 0x8185},{0xAC5C, 0xB0C4},{0xAC5D, 0x8186},{0xAC5E, 0x8187},
- {0xAC5F, 0x8188},{0xAC60, 0x8189},{0xAC61, 0x818A},{0xAC62, 0x818B},{0xAC63, 0x818C},{0xAC64, 0x818D},{0xAC65, 0x818E},{0xAC66, 0x818F},
- {0xAC67, 0x8190},{0xAC68, 0x8191},{0xAC69, 0x8192},{0xAC6A, 0x8193},{0xAC6B, 0x8194},{0xAC6C, 0x8195},{0xAC6D, 0x8196},{0xAC6E, 0x8197},
- {0xAC6F, 0x8198},{0xAC70, 0xB0C5},{0xAC71, 0xB0C6},{0xAC72, 0x8199},{0xAC73, 0x819A},{0xAC74, 0xB0C7},{0xAC75, 0x819B},{0xAC76, 0x819C},
- {0xAC77, 0xB0C8},{0xAC78, 0xB0C9},{0xAC79, 0x819D},{0xAC7A, 0xB0CA},{0xAC7B, 0x819E},{0xAC7C, 0x819F},{0xAC7D, 0x81A0},{0xAC7E, 0x81A1},
- {0xAC7F, 0x81A2},{0xAC80, 0xB0CB},{0xAC81, 0xB0CC},{0xAC82, 0x81A3},{0xAC83, 0xB0CD},{0xAC84, 0xB0CE},{0xAC85, 0xB0CF},{0xAC86, 0xB0D0},
- {0xAC87, 0x81A4},{0xAC88, 0x81A5},{0xAC89, 0xB0D1},{0xAC8A, 0xB0D2},{0xAC8B, 0xB0D3},{0xAC8C, 0xB0D4},{0xAC8D, 0x81A6},{0xAC8E, 0x81A7},
- {0xAC8F, 0x81A8},{0xAC90, 0xB0D5},{0xAC91, 0x81A9},{0xAC92, 0x81AA},{0xAC93, 0x81AB},{0xAC94, 0xB0D6},{0xAC95, 0x81AC},{0xAC96, 0x81AD},
- {0xAC97, 0x81AE},{0xAC98, 0x81AF},{0xAC99, 0x81B0},{0xAC9A, 0x81B1},{0xAC9B, 0x81B2},{0xAC9C, 0xB0D7},{0xAC9D, 0xB0D8},{0xAC9E, 0x81B3},
- {0xAC9F, 0xB0D9},{0xACA0, 0xB0DA},{0xACA1, 0xB0DB},{0xACA2, 0x81B4},{0xACA3, 0x81B5},{0xACA4, 0x81B6},{0xACA5, 0x81B7},{0xACA6, 0x81B8},
- {0xACA7, 0x81B9},{0xACA8, 0xB0DC},{0xACA9, 0xB0DD},{0xACAA, 0xB0DE},{0xACAB, 0x81BA},{0xACAC, 0xB0DF},{0xACAD, 0x81BB},{0xACAE, 0x81BC},
- {0xACAF, 0xB0E0},{0xACB0, 0xB0E1},{0xACB1, 0x81BD},{0xACB2, 0x81BE},{0xACB3, 0x81BF},{0xACB4, 0x81C0},{0xACB5, 0x81C1},{0xACB6, 0x81C2},
- {0xACB7, 0x81C3},{0xACB8, 0xB0E2},{0xACB9, 0xB0E3},{0xACBA, 0x81C4},{0xACBB, 0xB0E4},{0xACBC, 0xB0E5},{0xACBD, 0xB0E6},{0xACBE, 0x81C5},
- {0xACBF, 0x81C6},{0xACC0, 0x81C7},{0xACC1, 0xB0E7},{0xACC2, 0x81C8},{0xACC3, 0x81C9},{0xACC4, 0xB0E8},{0xACC5, 0x81CA},{0xACC6, 0x81CB},
- {0xACC7, 0x81CC},{0xACC8, 0xB0E9},{0xACC9, 0x81CD},{0xACCA, 0x81CE},{0xACCB, 0x81CF},{0xACCC, 0xB0EA},{0xACCD, 0x81D0},{0xACCE, 0x81D1},
- {0xACCF, 0x81D2},{0xACD0, 0x81D3},{0xACD1, 0x81D4},{0xACD2, 0x81D5},{0xACD3, 0x81D6},{0xACD4, 0x81D7},{0xACD5, 0xB0EB},{0xACD6, 0x81D8},
- {0xACD7, 0xB0EC},{0xACD8, 0x81D9},{0xACD9, 0x81DA},{0xACDA, 0x81DB},{0xACDB, 0x81DC},{0xACDC, 0x81DD},{0xACDD, 0x81DE},{0xACDE, 0x81DF},
- {0xACDF, 0x81E0},{0xACE0, 0xB0ED},{0xACE1, 0xB0EE},{0xACE2, 0x81E1},{0xACE3, 0x81E2},{0xACE4, 0xB0EF},{0xACE5, 0x81E3},{0xACE6, 0x81E4},
- {0xACE7, 0xB0F0},{0xACE8, 0xB0F1},{0xACE9, 0x81E5},{0xACEA, 0xB0F2},{0xACEB, 0x81E6},{0xACEC, 0xB0F3},{0xACED, 0x81E7},{0xACEE, 0x81E8},
- {0xACEF, 0xB0F4},{0xACF0, 0xB0F5},{0xACF1, 0xB0F6},{0xACF2, 0x81E9},{0xACF3, 0xB0F7},{0xACF4, 0x81EA},{0xACF5, 0xB0F8},{0xACF6, 0xB0F9},
- {0xACF7, 0x81EB},{0xACF8, 0x81EC},{0xACF9, 0x81ED},{0xACFA, 0x81EE},{0xACFB, 0x81EF},{0xACFC, 0xB0FA},{0xACFD, 0xB0FB},{0xACFE, 0x81F0},
- {0xACFF, 0x81F1},{0xAD00, 0xB0FC},{0xAD01, 0x81F2},{0xAD02, 0x81F3},{0xAD03, 0x81F4},{0xAD04, 0xB0FD},{0xAD05, 0x81F5},{0xAD06, 0xB0FE},
- {0xAD07, 0x81F6},{0xAD08, 0x81F7},{0xAD09, 0x81F8},{0xAD0A, 0x81F9},{0xAD0B, 0x81FA},{0xAD0C, 0xB1A1},{0xAD0D, 0xB1A2},{0xAD0E, 0x81FB},
- {0xAD0F, 0xB1A3},{0xAD10, 0x81FC},{0xAD11, 0xB1A4},{0xAD12, 0x81FD},{0xAD13, 0x81FE},{0xAD14, 0x8241},{0xAD15, 0x8242},{0xAD16, 0x8243},
- {0xAD17, 0x8244},{0xAD18, 0xB1A5},{0xAD19, 0x8245},{0xAD1A, 0x8246},{0xAD1B, 0x8247},{0xAD1C, 0xB1A6},{0xAD1D, 0x8248},{0xAD1E, 0x8249},
- {0xAD1F, 0x824A},{0xAD20, 0xB1A7},{0xAD21, 0x824B},{0xAD22, 0x824C},{0xAD23, 0x824D},{0xAD24, 0x824E},{0xAD25, 0x824F},{0xAD26, 0x8250},
- {0xAD27, 0x8251},{0xAD28, 0x8252},{0xAD29, 0xB1A8},{0xAD2A, 0x8253},{0xAD2B, 0x8254},{0xAD2C, 0xB1A9},{0xAD2D, 0xB1AA},{0xAD2E, 0x8255},
- {0xAD2F, 0x8256},{0xAD30, 0x8257},{0xAD31, 0x8258},{0xAD32, 0x8259},{0xAD33, 0x825A},{0xAD34, 0xB1AB},{0xAD35, 0xB1AC},{0xAD36, 0x8261},
- {0xAD37, 0x8262},{0xAD38, 0xB1AD},{0xAD39, 0x8263},{0xAD3A, 0x8264},{0xAD3B, 0x8265},{0xAD3C, 0xB1AE},{0xAD3D, 0x8266},{0xAD3E, 0x8267},
- {0xAD3F, 0x8268},{0xAD40, 0x8269},{0xAD41, 0x826A},{0xAD42, 0x826B},{0xAD43, 0x826C},{0xAD44, 0xB1AF},{0xAD45, 0xB1B0},{0xAD46, 0x826D},
- {0xAD47, 0xB1B1},{0xAD48, 0x826E},{0xAD49, 0xB1B2},{0xAD4A, 0x826F},{0xAD4B, 0x8270},{0xAD4C, 0x8271},{0xAD4D, 0x8272},{0xAD4E, 0x8273},
- {0xAD4F, 0x8274},{0xAD50, 0xB1B3},{0xAD51, 0x8275},{0xAD52, 0x8276},{0xAD53, 0x8277},{0xAD54, 0xB1B4},{0xAD55, 0x8278},{0xAD56, 0x8279},
- {0xAD57, 0x827A},{0xAD58, 0xB1B5},{0xAD59, 0x8281},{0xAD5A, 0x8282},{0xAD5B, 0x8283},{0xAD5C, 0x8284},{0xAD5D, 0x8285},{0xAD5E, 0x8286},
- {0xAD5F, 0x8287},{0xAD60, 0x8288},{0xAD61, 0xB1B6},{0xAD62, 0x8289},{0xAD63, 0xB1B7},{0xAD64, 0x828A},{0xAD65, 0x828B},{0xAD66, 0x828C},
- {0xAD67, 0x828D},{0xAD68, 0x828E},{0xAD69, 0x828F},{0xAD6A, 0x8290},{0xAD6B, 0x8291},{0xAD6C, 0xB1B8},{0xAD6D, 0xB1B9},{0xAD6E, 0x8292},
- {0xAD6F, 0x8293},{0xAD70, 0xB1BA},{0xAD71, 0x8294},{0xAD72, 0x8295},{0xAD73, 0xB1BB},{0xAD74, 0xB1BC},{0xAD75, 0xB1BD},{0xAD76, 0xB1BE},
- {0xAD77, 0x8296},{0xAD78, 0x8297},{0xAD79, 0x8298},{0xAD7A, 0x8299},{0xAD7B, 0xB1BF},{0xAD7C, 0xB1C0},{0xAD7D, 0xB1C1},{0xAD7E, 0x829A},
- {0xAD7F, 0xB1C2},{0xAD80, 0x829B},{0xAD81, 0xB1C3},{0xAD82, 0xB1C4},{0xAD83, 0x829C},{0xAD84, 0x829D},{0xAD85, 0x829E},{0xAD86, 0x829F},
- {0xAD87, 0x82A0},{0xAD88, 0xB1C5},{0xAD89, 0xB1C6},{0xAD8A, 0x82A1},{0xAD8B, 0x82A2},{0xAD8C, 0xB1C7},{0xAD8D, 0x82A3},{0xAD8E, 0x82A4},
- {0xAD8F, 0x82A5},{0xAD90, 0xB1C8},{0xAD91, 0x82A6},{0xAD92, 0x82A7},{0xAD93, 0x82A8},{0xAD94, 0x82A9},{0xAD95, 0x82AA},{0xAD96, 0x82AB},
- {0xAD97, 0x82AC},{0xAD98, 0x82AD},{0xAD99, 0x82AE},{0xAD9A, 0x82AF},{0xAD9B, 0x82B0},{0xAD9C, 0xB1C9},{0xAD9D, 0xB1CA},{0xAD9E, 0x82B1},
- {0xAD9F, 0x82B2},{0xADA0, 0x82B3},{0xADA1, 0x82B4},{0xADA2, 0x82B5},{0xADA3, 0x82B6},{0xADA4, 0xB1CB},{0xADA5, 0x82B7},{0xADA6, 0x82B8},
- {0xADA7, 0x82B9},{0xADA8, 0x82BA},{0xADA9, 0x82BB},{0xADAA, 0x82BC},{0xADAB, 0x82BD},{0xADAC, 0x82BE},{0xADAD, 0x82BF},{0xADAE, 0x82C0},
- {0xADAF, 0x82C1},{0xADB0, 0x82C2},{0xADB1, 0x82C3},{0xADB2, 0x82C4},{0xADB3, 0x82C5},{0xADB4, 0x82C6},{0xADB5, 0x82C7},{0xADB6, 0x82C8},
- {0xADB7, 0xB1CC},{0xADB8, 0x82C9},{0xADB9, 0x82CA},{0xADBA, 0x82CB},{0xADBB, 0x82CC},{0xADBC, 0x82CD},{0xADBD, 0x82CE},{0xADBE, 0x82CF},
- {0xADBF, 0x82D0},{0xADC0, 0xB1CD},{0xADC1, 0xB1CE},{0xADC2, 0x82D1},{0xADC3, 0x82D2},{0xADC4, 0xB1CF},{0xADC5, 0x82D3},{0xADC6, 0x82D4},
- {0xADC7, 0x82D5},{0xADC8, 0xB1D0},{0xADC9, 0x82D6},{0xADCA, 0x82D7},{0xADCB, 0x82D8},{0xADCC, 0x82D9},{0xADCD, 0x82DA},{0xADCE, 0x82DB},
- {0xADCF, 0x82DC},{0xADD0, 0xB1D1},{0xADD1, 0xB1D2},{0xADD2, 0x82DD},{0xADD3, 0xB1D3},{0xADD4, 0x82DE},{0xADD5, 0x82DF},{0xADD6, 0x82E0},
- {0xADD7, 0x82E1},{0xADD8, 0x82E2},{0xADD9, 0x82E3},{0xADDA, 0x82E4},{0xADDB, 0x82E5},{0xADDC, 0xB1D4},{0xADDD, 0x82E6},{0xADDE, 0x82E7},
- {0xADDF, 0x82E8},{0xADE0, 0xB1D5},{0xADE1, 0x82E9},{0xADE2, 0x82EA},{0xADE3, 0x82EB},{0xADE4, 0xB1D6},{0xADE5, 0x82EC},{0xADE6, 0x82ED},
- {0xADE7, 0x82EE},{0xADE8, 0x82EF},{0xADE9, 0x82F0},{0xADEA, 0x82F1},{0xADEB, 0x82F2},{0xADEC, 0x82F3},{0xADED, 0x82F4},{0xADEE, 0x82F5},
- {0xADEF, 0x82F6},{0xADF0, 0x82F7},{0xADF1, 0x82F8},{0xADF2, 0x82F9},{0xADF3, 0x82FA},{0xADF4, 0x82FB},{0xADF5, 0x82FC},{0xADF6, 0x82FD},
- {0xADF7, 0x82FE},{0xADF8, 0xB1D7},{0xADF9, 0xB1D8},{0xADFA, 0x8341},{0xADFB, 0x8342},{0xADFC, 0xB1D9},{0xADFD, 0x8343},{0xADFE, 0x8344},
- {0xADFF, 0xB1DA},{0xAE00, 0xB1DB},{0xAE01, 0xB1DC},{0xAE02, 0x8345},{0xAE03, 0x8346},{0xAE04, 0x8347},{0xAE05, 0x8348},{0xAE06, 0x8349},
- {0xAE07, 0x834A},{0xAE08, 0xB1DD},{0xAE09, 0xB1DE},{0xAE0A, 0x834B},{0xAE0B, 0xB1DF},{0xAE0C, 0x834C},{0xAE0D, 0xB1E0},{0xAE0E, 0x834D},
- {0xAE0F, 0x834E},{0xAE10, 0x834F},{0xAE11, 0x8350},{0xAE12, 0x8351},{0xAE13, 0x8352},{0xAE14, 0xB1E1},{0xAE15, 0x8353},{0xAE16, 0x8354},
- {0xAE17, 0x8355},{0xAE18, 0x8356},{0xAE19, 0x8357},{0xAE1A, 0x8358},{0xAE1B, 0x8359},{0xAE1C, 0x835A},{0xAE1D, 0x8361},{0xAE1E, 0x8362},
- {0xAE1F, 0x8363},{0xAE20, 0x8364},{0xAE21, 0x8365},{0xAE22, 0x8366},{0xAE23, 0x8367},{0xAE24, 0x8368},{0xAE25, 0x8369},{0xAE26, 0x836A},
- {0xAE27, 0x836B},{0xAE28, 0x836C},{0xAE29, 0x836D},{0xAE2A, 0x836E},{0xAE2B, 0x836F},{0xAE2C, 0x8370},{0xAE2D, 0x8371},{0xAE2E, 0x8372},
- {0xAE2F, 0x8373},{0xAE30, 0xB1E2},{0xAE31, 0xB1E3},{0xAE32, 0x8374},{0xAE33, 0x8375},{0xAE34, 0xB1E4},{0xAE35, 0x8376},{0xAE36, 0x8377},
- {0xAE37, 0xB1E5},{0xAE38, 0xB1E6},{0xAE39, 0x8378},{0xAE3A, 0xB1E7},{0xAE3B, 0x8379},{0xAE3C, 0x837A},{0xAE3D, 0x8381},{0xAE3E, 0x8382},
- {0xAE3F, 0x8383},{0xAE40, 0xB1E8},{0xAE41, 0xB1E9},{0xAE42, 0x8384},{0xAE43, 0xB1EA},{0xAE44, 0x8385},{0xAE45, 0xB1EB},{0xAE46, 0xB1EC},
- {0xAE47, 0x8386},{0xAE48, 0x8387},{0xAE49, 0x8388},{0xAE4A, 0xB1ED},{0xAE4B, 0x8389},{0xAE4C, 0xB1EE},{0xAE4D, 0xB1EF},{0xAE4E, 0xB1F0},
- {0xAE4F, 0x838A},{0xAE50, 0xB1F1},{0xAE51, 0x838B},{0xAE52, 0x838C},{0xAE53, 0x838D},{0xAE54, 0xB1F2},{0xAE55, 0x838E},{0xAE56, 0xB1F3},
- {0xAE57, 0x838F},{0xAE58, 0x8390},{0xAE59, 0x8391},{0xAE5A, 0x8392},{0xAE5B, 0x8393},{0xAE5C, 0xB1F4},{0xAE5D, 0xB1F5},{0xAE5E, 0x8394},
- {0xAE5F, 0xB1F6},{0xAE60, 0xB1F7},{0xAE61, 0xB1F8},{0xAE62, 0x8395},{0xAE63, 0x8396},{0xAE64, 0x8397},{0xAE65, 0xB1F9},{0xAE66, 0x8398},
- {0xAE67, 0x8399},{0xAE68, 0xB1FA},{0xAE69, 0xB1FB},{0xAE6A, 0x839A},{0xAE6B, 0x839B},{0xAE6C, 0xB1FC},{0xAE6D, 0x839C},{0xAE6E, 0x839D},
- {0xAE6F, 0x839E},{0xAE70, 0xB1FD},{0xAE71, 0x839F},{0xAE72, 0x83A0},{0xAE73, 0x83A1},{0xAE74, 0x83A2},{0xAE75, 0x83A3},{0xAE76, 0x83A4},
- {0xAE77, 0x83A5},{0xAE78, 0xB1FE},{0xAE79, 0xB2A1},{0xAE7A, 0x83A6},{0xAE7B, 0xB2A2},{0xAE7C, 0xB2A3},{0xAE7D, 0xB2A4},{0xAE7E, 0x83A7},
- {0xAE7F, 0x83A8},{0xAE80, 0x83A9},{0xAE81, 0x83AA},{0xAE82, 0x83AB},{0xAE83, 0x83AC},{0xAE84, 0xB2A5},{0xAE85, 0xB2A6},{0xAE86, 0x83AD},
- {0xAE87, 0x83AE},{0xAE88, 0x83AF},{0xAE89, 0x83B0},{0xAE8A, 0x83B1},{0xAE8B, 0x83B2},{0xAE8C, 0xB2A7},{0xAE8D, 0x83B3},{0xAE8E, 0x83B4},
- {0xAE8F, 0x83B5},{0xAE90, 0x83B6},{0xAE91, 0x83B7},{0xAE92, 0x83B8},{0xAE93, 0x83B9},{0xAE94, 0x83BA},{0xAE95, 0x83BB},{0xAE96, 0x83BC},
- {0xAE97, 0x83BD},{0xAE98, 0x83BE},{0xAE99, 0x83BF},{0xAE9A, 0x83C0},{0xAE9B, 0x83C1},{0xAE9C, 0x83C2},{0xAE9D, 0x83C3},{0xAE9E, 0x83C4},
- {0xAE9F, 0x83C5},{0xAEA0, 0x83C6},{0xAEA1, 0x83C7},{0xAEA2, 0x83C8},{0xAEA3, 0x83C9},{0xAEA4, 0x83CA},{0xAEA5, 0x83CB},{0xAEA6, 0x83CC},
- {0xAEA7, 0x83CD},{0xAEA8, 0x83CE},{0xAEA9, 0x83CF},{0xAEAA, 0x83D0},{0xAEAB, 0x83D1},{0xAEAC, 0x83D2},{0xAEAD, 0x83D3},{0xAEAE, 0x83D4},
- {0xAEAF, 0x83D5},{0xAEB0, 0x83D6},{0xAEB1, 0x83D7},{0xAEB2, 0x83D8},{0xAEB3, 0x83D9},{0xAEB4, 0x83DA},{0xAEB5, 0x83DB},{0xAEB6, 0x83DC},
- {0xAEB7, 0x83DD},{0xAEB8, 0x83DE},{0xAEB9, 0x83DF},{0xAEBA, 0x83E0},{0xAEBB, 0x83E1},{0xAEBC, 0xB2A8},{0xAEBD, 0xB2A9},{0xAEBE, 0xB2AA},
- {0xAEBF, 0x83E2},{0xAEC0, 0xB2AB},{0xAEC1, 0x83E3},{0xAEC2, 0x83E4},{0xAEC3, 0x83E5},{0xAEC4, 0xB2AC},{0xAEC5, 0x83E6},{0xAEC6, 0x83E7},
- {0xAEC7, 0x83E8},{0xAEC8, 0x83E9},{0xAEC9, 0x83EA},{0xAECA, 0x83EB},{0xAECB, 0x83EC},{0xAECC, 0xB2AD},{0xAECD, 0xB2AE},{0xAECE, 0x83ED},
- {0xAECF, 0xB2AF},{0xAED0, 0xB2B0},{0xAED1, 0xB2B1},{0xAED2, 0x83EE},{0xAED3, 0x83EF},{0xAED4, 0x83F0},{0xAED5, 0x83F1},{0xAED6, 0x83F2},
- {0xAED7, 0x83F3},{0xAED8, 0xB2B2},{0xAED9, 0xB2B3},{0xAEDA, 0x83F4},{0xAEDB, 0x83F5},{0xAEDC, 0xB2B4},{0xAEDD, 0x83F6},{0xAEDE, 0x83F7},
- {0xAEDF, 0x83F8},{0xAEE0, 0x83F9},{0xAEE1, 0x83FA},{0xAEE2, 0x83FB},{0xAEE3, 0x83FC},{0xAEE4, 0x83FD},{0xAEE5, 0x83FE},{0xAEE6, 0x8441},
- {0xAEE7, 0x8442},{0xAEE8, 0xB2B5},{0xAEE9, 0x8443},{0xAEEA, 0x8444},{0xAEEB, 0xB2B6},{0xAEEC, 0x8445},{0xAEED, 0xB2B7},{0xAEEE, 0x8446},
- {0xAEEF, 0x8447},{0xAEF0, 0x8448},{0xAEF1, 0x8449},{0xAEF2, 0x844A},{0xAEF3, 0x844B},{0xAEF4, 0xB2B8},{0xAEF5, 0x844C},{0xAEF6, 0x844D},
- {0xAEF7, 0x844E},{0xAEF8, 0xB2B9},{0xAEF9, 0x844F},{0xAEFA, 0x8450},{0xAEFB, 0x8451},{0xAEFC, 0xB2BA},{0xAEFD, 0x8452},{0xAEFE, 0x8453},
- {0xAEFF, 0x8454},{0xAF00, 0x8455},{0xAF01, 0x8456},{0xAF02, 0x8457},{0xAF03, 0x8458},{0xAF04, 0x8459},{0xAF05, 0x845A},{0xAF06, 0x8461},
- {0xAF07, 0xB2BB},{0xAF08, 0xB2BC},{0xAF09, 0x8462},{0xAF0A, 0x8463},{0xAF0B, 0x8464},{0xAF0C, 0x8465},{0xAF0D, 0xB2BD},{0xAF0E, 0x8466},
- {0xAF0F, 0x8467},{0xAF10, 0xB2BE},{0xAF11, 0x8468},{0xAF12, 0x8469},{0xAF13, 0x846A},{0xAF14, 0x846B},{0xAF15, 0x846C},{0xAF16, 0x846D},
- {0xAF17, 0x846E},{0xAF18, 0x846F},{0xAF19, 0x8470},{0xAF1A, 0x8471},{0xAF1B, 0x8472},{0xAF1C, 0x8473},{0xAF1D, 0x8474},{0xAF1E, 0x8475},
- {0xAF1F, 0x8476},{0xAF20, 0x8477},{0xAF21, 0x8478},{0xAF22, 0x8479},{0xAF23, 0x847A},{0xAF24, 0x8481},{0xAF25, 0x8482},{0xAF26, 0x8483},
- {0xAF27, 0x8484},{0xAF28, 0x8485},{0xAF29, 0x8486},{0xAF2A, 0x8487},{0xAF2B, 0x8488},{0xAF2C, 0xB2BF},{0xAF2D, 0xB2C0},{0xAF2E, 0x8489},
- {0xAF2F, 0x848A},{0xAF30, 0xB2C1},{0xAF31, 0x848B},{0xAF32, 0xB2C2},{0xAF33, 0x848C},{0xAF34, 0xB2C3},{0xAF35, 0x848D},{0xAF36, 0x848E},
- {0xAF37, 0x848F},{0xAF38, 0x8490},{0xAF39, 0x8491},{0xAF3A, 0x8492},{0xAF3B, 0x8493},{0xAF3C, 0xB2C4},{0xAF3D, 0xB2C5},{0xAF3E, 0x8494},
- {0xAF3F, 0xB2C6},{0xAF40, 0x8495},{0xAF41, 0xB2C7},{0xAF42, 0xB2C8},{0xAF43, 0xB2C9},{0xAF44, 0x8496},{0xAF45, 0x8497},{0xAF46, 0x8498},
- {0xAF47, 0x8499},{0xAF48, 0xB2CA},{0xAF49, 0xB2CB},{0xAF4A, 0x849A},{0xAF4B, 0x849B},{0xAF4C, 0x849C},{0xAF4D, 0x849D},{0xAF4E, 0x849E},
- {0xAF4F, 0x849F},{0xAF50, 0xB2CC},{0xAF51, 0x84A0},{0xAF52, 0x84A1},{0xAF53, 0x84A2},{0xAF54, 0x84A3},{0xAF55, 0x84A4},{0xAF56, 0x84A5},
- {0xAF57, 0x84A6},{0xAF58, 0x84A7},{0xAF59, 0x84A8},{0xAF5A, 0x84A9},{0xAF5B, 0x84AA},{0xAF5C, 0xB2CD},{0xAF5D, 0xB2CE},{0xAF5E, 0x84AB},
- {0xAF5F, 0x84AC},{0xAF60, 0x84AD},{0xAF61, 0x84AE},{0xAF62, 0x84AF},{0xAF63, 0x84B0},{0xAF64, 0xB2CF},{0xAF65, 0xB2D0},{0xAF66, 0x84B1},
- {0xAF67, 0x84B2},{0xAF68, 0x84B3},{0xAF69, 0x84B4},{0xAF6A, 0x84B5},{0xAF6B, 0x84B6},{0xAF6C, 0x84B7},{0xAF6D, 0x84B8},{0xAF6E, 0x84B9},
- {0xAF6F, 0x84BA},{0xAF70, 0x84BB},{0xAF71, 0x84BC},{0xAF72, 0x84BD},{0xAF73, 0x84BE},{0xAF74, 0x84BF},{0xAF75, 0x84C0},{0xAF76, 0x84C1},
- {0xAF77, 0x84C2},{0xAF78, 0x84C3},{0xAF79, 0xB2D1},{0xAF7A, 0x84C4},{0xAF7B, 0x84C5},{0xAF7C, 0x84C6},{0xAF7D, 0x84C7},{0xAF7E, 0x84C8},
- {0xAF7F, 0x84C9},{0xAF80, 0xB2D2},{0xAF81, 0x84CA},{0xAF82, 0x84CB},{0xAF83, 0x84CC},{0xAF84, 0xB2D3},{0xAF85, 0x84CD},{0xAF86, 0x84CE},
- {0xAF87, 0x84CF},{0xAF88, 0xB2D4},{0xAF89, 0x84D0},{0xAF8A, 0x84D1},{0xAF8B, 0x84D2},{0xAF8C, 0x84D3},{0xAF8D, 0x84D4},{0xAF8E, 0x84D5},
- {0xAF8F, 0x84D6},{0xAF90, 0xB2D5},{0xAF91, 0xB2D6},{0xAF92, 0x84D7},{0xAF93, 0x84D8},{0xAF94, 0x84D9},{0xAF95, 0xB2D7},{0xAF96, 0x84DA},
- {0xAF97, 0x84DB},{0xAF98, 0x84DC},{0xAF99, 0x84DD},{0xAF9A, 0x84DE},{0xAF9B, 0x84DF},{0xAF9C, 0xB2D8},{0xAF9D, 0x84E0},{0xAF9E, 0x84E1},
- {0xAF9F, 0x84E2},{0xAFA0, 0x84E3},{0xAFA1, 0x84E4},{0xAFA2, 0x84E5},{0xAFA3, 0x84E6},{0xAFA4, 0x84E7},{0xAFA5, 0x84E8},{0xAFA6, 0x84E9},
- {0xAFA7, 0x84EA},{0xAFA8, 0x84EB},{0xAFA9, 0x84EC},{0xAFAA, 0x84ED},{0xAFAB, 0x84EE},{0xAFAC, 0x84EF},{0xAFAD, 0x84F0},{0xAFAE, 0x84F1},
- {0xAFAF, 0x84F2},{0xAFB0, 0x84F3},{0xAFB1, 0x84F4},{0xAFB2, 0x84F5},{0xAFB3, 0x84F6},{0xAFB4, 0x84F7},{0xAFB5, 0x84F8},{0xAFB6, 0x84F9},
- {0xAFB7, 0x84FA},{0xAFB8, 0xB2D9},{0xAFB9, 0xB2DA},{0xAFBA, 0x84FB},{0xAFBB, 0x84FC},{0xAFBC, 0xB2DB},{0xAFBD, 0x84FD},{0xAFBE, 0x84FE},
- {0xAFBF, 0x8541},{0xAFC0, 0xB2DC},{0xAFC1, 0x8542},{0xAFC2, 0x8543},{0xAFC3, 0x8544},{0xAFC4, 0x8545},{0xAFC5, 0x8546},{0xAFC6, 0x8547},
- {0xAFC7, 0xB2DD},{0xAFC8, 0xB2DE},{0xAFC9, 0xB2DF},{0xAFCA, 0x8548},{0xAFCB, 0xB2E0},{0xAFCC, 0x8549},{0xAFCD, 0xB2E1},{0xAFCE, 0xB2E2},
- {0xAFCF, 0x854A},{0xAFD0, 0x854B},{0xAFD1, 0x854C},{0xAFD2, 0x854D},{0xAFD3, 0x854E},{0xAFD4, 0xB2E3},{0xAFD5, 0x854F},{0xAFD6, 0x8550},
- {0xAFD7, 0x8551},{0xAFD8, 0x8552},{0xAFD9, 0x8553},{0xAFDA, 0x8554},{0xAFDB, 0x8555},{0xAFDC, 0xB2E4},{0xAFDD, 0x8556},{0xAFDE, 0x8557},
- {0xAFDF, 0x8558},{0xAFE0, 0x8559},{0xAFE1, 0x855A},{0xAFE2, 0x8561},{0xAFE3, 0x8562},{0xAFE4, 0x8563},{0xAFE5, 0x8564},{0xAFE6, 0x8565},
- {0xAFE7, 0x8566},{0xAFE8, 0xB2E5},{0xAFE9, 0xB2E6},{0xAFEA, 0x8567},{0xAFEB, 0x8568},{0xAFEC, 0x8569},{0xAFED, 0x856A},{0xAFEE, 0x856B},
- {0xAFEF, 0x856C},{0xAFF0, 0xB2E7},{0xAFF1, 0xB2E8},{0xAFF2, 0x856D},{0xAFF3, 0x856E},{0xAFF4, 0xB2E9},{0xAFF5, 0x856F},{0xAFF6, 0x8570},
- {0xAFF7, 0x8571},{0xAFF8, 0xB2EA},{0xAFF9, 0x8572},{0xAFFA, 0x8573},{0xAFFB, 0x8574},{0xAFFC, 0x8575},{0xAFFD, 0x8576},{0xAFFE, 0x8577},
- {0xAFFF, 0x8578},{0xB000, 0xB2EB},{0xB001, 0xB2EC},{0xB002, 0x8579},{0xB003, 0x857A},{0xB004, 0xB2ED},{0xB005, 0x8581},{0xB006, 0x8582},
- {0xB007, 0x8583},{0xB008, 0x8584},{0xB009, 0x8585},{0xB00A, 0x8586},{0xB00B, 0x8587},{0xB00C, 0xB2EE},{0xB00D, 0x8588},{0xB00E, 0x8589},
- {0xB00F, 0x858A},{0xB010, 0xB2EF},{0xB011, 0x858B},{0xB012, 0x858C},{0xB013, 0x858D},{0xB014, 0xB2F0},{0xB015, 0x858E},{0xB016, 0x858F},
- {0xB017, 0x8590},{0xB018, 0x8591},{0xB019, 0x8592},{0xB01A, 0x8593},{0xB01B, 0x8594},{0xB01C, 0xB2F1},{0xB01D, 0xB2F2},{0xB01E, 0x8595},
- {0xB01F, 0x8596},{0xB020, 0x8597},{0xB021, 0x8598},{0xB022, 0x8599},{0xB023, 0x859A},{0xB024, 0x859B},{0xB025, 0x859C},{0xB026, 0x859D},
- {0xB027, 0x859E},{0xB028, 0xB2F3},{0xB029, 0x859F},{0xB02A, 0x85A0},{0xB02B, 0x85A1},{0xB02C, 0x85A2},{0xB02D, 0x85A3},{0xB02E, 0x85A4},
- {0xB02F, 0x85A5},{0xB030, 0x85A6},{0xB031, 0x85A7},{0xB032, 0x85A8},{0xB033, 0x85A9},{0xB034, 0x85AA},{0xB035, 0x85AB},{0xB036, 0x85AC},
- {0xB037, 0x85AD},{0xB038, 0x85AE},{0xB039, 0x85AF},{0xB03A, 0x85B0},{0xB03B, 0x85B1},{0xB03C, 0x85B2},{0xB03D, 0x85B3},{0xB03E, 0x85B4},
- {0xB03F, 0x85B5},{0xB040, 0x85B6},{0xB041, 0x85B7},{0xB042, 0x85B8},{0xB043, 0x85B9},{0xB044, 0xB2F4},{0xB045, 0xB2F5},{0xB046, 0x85BA},
- {0xB047, 0x85BB},{0xB048, 0xB2F6},{0xB049, 0x85BC},{0xB04A, 0xB2F7},{0xB04B, 0x85BD},{0xB04C, 0xB2F8},{0xB04D, 0x85BE},{0xB04E, 0xB2F9},
- {0xB04F, 0x85BF},{0xB050, 0x85C0},{0xB051, 0x85C1},{0xB052, 0x85C2},{0xB053, 0xB2FA},{0xB054, 0xB2FB},{0xB055, 0xB2FC},{0xB056, 0x85C3},
- {0xB057, 0xB2FD},{0xB058, 0x85C4},{0xB059, 0xB2FE},{0xB05A, 0x85C5},{0xB05B, 0x85C6},{0xB05C, 0x85C7},{0xB05D, 0xB3A1},{0xB05E, 0x85C8},
- {0xB05F, 0x85C9},{0xB060, 0x85CA},{0xB061, 0x85CB},{0xB062, 0x85CC},{0xB063, 0x85CD},{0xB064, 0x85CE},{0xB065, 0x85CF},{0xB066, 0x85D0},
- {0xB067, 0x85D1},{0xB068, 0x85D2},{0xB069, 0x85D3},{0xB06A, 0x85D4},{0xB06B, 0x85D5},{0xB06C, 0x85D6},{0xB06D, 0x85D7},{0xB06E, 0x85D8},
- {0xB06F, 0x85D9},{0xB070, 0x85DA},{0xB071, 0x85DB},{0xB072, 0x85DC},{0xB073, 0x85DD},{0xB074, 0x85DE},{0xB075, 0x85DF},{0xB076, 0x85E0},
- {0xB077, 0x85E1},{0xB078, 0x85E2},{0xB079, 0x85E3},{0xB07A, 0x85E4},{0xB07B, 0x85E5},{0xB07C, 0xB3A2},{0xB07D, 0xB3A3},{0xB07E, 0x85E6},
- {0xB07F, 0x85E7},{0xB080, 0xB3A4},{0xB081, 0x85E8},{0xB082, 0x85E9},{0xB083, 0x85EA},{0xB084, 0xB3A5},{0xB085, 0x85EB},{0xB086, 0x85EC},
- {0xB087, 0x85ED},{0xB088, 0x85EE},{0xB089, 0x85EF},{0xB08A, 0x85F0},{0xB08B, 0x85F1},{0xB08C, 0xB3A6},{0xB08D, 0xB3A7},{0xB08E, 0x85F2},
- {0xB08F, 0xB3A8},{0xB090, 0x85F3},{0xB091, 0xB3A9},{0xB092, 0x85F4},{0xB093, 0x85F5},{0xB094, 0x85F6},{0xB095, 0x85F7},{0xB096, 0x85F8},
- {0xB097, 0x85F9},{0xB098, 0xB3AA},{0xB099, 0xB3AB},{0xB09A, 0xB3AC},{0xB09B, 0x85FA},{0xB09C, 0xB3AD},{0xB09D, 0x85FB},{0xB09E, 0x85FC},
- {0xB09F, 0xB3AE},{0xB0A0, 0xB3AF},{0xB0A1, 0xB3B0},{0xB0A2, 0xB3B1},{0xB0A3, 0x85FD},{0xB0A4, 0x85FE},{0xB0A5, 0x8641},{0xB0A6, 0x8642},
- {0xB0A7, 0x8643},{0xB0A8, 0xB3B2},{0xB0A9, 0xB3B3},{0xB0AA, 0x8644},{0xB0AB, 0xB3B4},{0xB0AC, 0xB3B5},{0xB0AD, 0xB3B6},{0xB0AE, 0xB3B7},
- {0xB0AF, 0xB3B8},{0xB0B0, 0x8645},{0xB0B1, 0xB3B9},{0xB0B2, 0x8646},{0xB0B3, 0xB3BA},{0xB0B4, 0xB3BB},{0xB0B5, 0xB3BC},{0xB0B6, 0x8647},
- {0xB0B7, 0x8648},{0xB0B8, 0xB3BD},{0xB0B9, 0x8649},{0xB0BA, 0x864A},{0xB0BB, 0x864B},{0xB0BC, 0xB3BE},{0xB0BD, 0x864C},{0xB0BE, 0x864D},
- {0xB0BF, 0x864E},{0xB0C0, 0x864F},{0xB0C1, 0x8650},{0xB0C2, 0x8651},{0xB0C3, 0x8652},{0xB0C4, 0xB3BF},{0xB0C5, 0xB3C0},{0xB0C6, 0x8653},
- {0xB0C7, 0xB3C1},{0xB0C8, 0xB3C2},{0xB0C9, 0xB3C3},{0xB0CA, 0x8654},{0xB0CB, 0x8655},{0xB0CC, 0x8656},{0xB0CD, 0x8657},{0xB0CE, 0x8658},
- {0xB0CF, 0x8659},{0xB0D0, 0xB3C4},{0xB0D1, 0xB3C5},{0xB0D2, 0x865A},{0xB0D3, 0x8661},{0xB0D4, 0xB3C6},{0xB0D5, 0x8662},{0xB0D6, 0x8663},
- {0xB0D7, 0x8664},{0xB0D8, 0xB3C7},{0xB0D9, 0x8665},{0xB0DA, 0x8666},{0xB0DB, 0x8667},{0xB0DC, 0x8668},{0xB0DD, 0x8669},{0xB0DE, 0x866A},
- {0xB0DF, 0x866B},{0xB0E0, 0xB3C8},{0xB0E1, 0x866C},{0xB0E2, 0x866D},{0xB0E3, 0x866E},{0xB0E4, 0x866F},{0xB0E5, 0xB3C9},{0xB0E6, 0x8670},
- {0xB0E7, 0x8671},{0xB0E8, 0x8672},{0xB0E9, 0x8673},{0xB0EA, 0x8674},{0xB0EB, 0x8675},{0xB0EC, 0x8676},{0xB0ED, 0x8677},{0xB0EE, 0x8678},
- {0xB0EF, 0x8679},{0xB0F0, 0x867A},{0xB0F1, 0x8681},{0xB0F2, 0x8682},{0xB0F3, 0x8683},{0xB0F4, 0x8684},{0xB0F5, 0x8685},{0xB0F6, 0x8686},
- {0xB0F7, 0x8687},{0xB0F8, 0x8688},{0xB0F9, 0x8689},{0xB0FA, 0x868A},{0xB0FB, 0x868B},{0xB0FC, 0x868C},{0xB0FD, 0x868D},{0xB0FE, 0x868E},
- {0xB0FF, 0x868F},{0xB100, 0x8690},{0xB101, 0x8691},{0xB102, 0x8692},{0xB103, 0x8693},{0xB104, 0x8694},{0xB105, 0x8695},{0xB106, 0x8696},
- {0xB107, 0x8697},{0xB108, 0xB3CA},{0xB109, 0xB3CB},{0xB10A, 0x8698},{0xB10B, 0xB3CC},{0xB10C, 0xB3CD},{0xB10D, 0x8699},{0xB10E, 0x869A},
- {0xB10F, 0x869B},{0xB110, 0xB3CE},{0xB111, 0x869C},{0xB112, 0xB3CF},{0xB113, 0xB3D0},{0xB114, 0x869D},{0xB115, 0x869E},{0xB116, 0x869F},
- {0xB117, 0x86A0},{0xB118, 0xB3D1},{0xB119, 0xB3D2},{0xB11A, 0x86A1},{0xB11B, 0xB3D3},{0xB11C, 0xB3D4},{0xB11D, 0xB3D5},{0xB11E, 0x86A2},
- {0xB11F, 0x86A3},{0xB120, 0x86A4},{0xB121, 0x86A5},{0xB122, 0x86A6},{0xB123, 0xB3D6},{0xB124, 0xB3D7},{0xB125, 0xB3D8},{0xB126, 0x86A7},
- {0xB127, 0x86A8},{0xB128, 0xB3D9},{0xB129, 0x86A9},{0xB12A, 0x86AA},{0xB12B, 0x86AB},{0xB12C, 0xB3DA},{0xB12D, 0x86AC},{0xB12E, 0x86AD},
- {0xB12F, 0x86AE},{0xB130, 0x86AF},{0xB131, 0x86B0},{0xB132, 0x86B1},{0xB133, 0x86B2},{0xB134, 0xB3DB},{0xB135, 0xB3DC},{0xB136, 0x86B3},
- {0xB137, 0xB3DD},{0xB138, 0xB3DE},{0xB139, 0xB3DF},{0xB13A, 0x86B4},{0xB13B, 0x86B5},{0xB13C, 0x86B6},{0xB13D, 0x86B7},{0xB13E, 0x86B8},
- {0xB13F, 0x86B9},{0xB140, 0xB3E0},{0xB141, 0xB3E1},{0xB142, 0x86BA},{0xB143, 0x86BB},{0xB144, 0xB3E2},{0xB145, 0x86BC},{0xB146, 0x86BD},
- {0xB147, 0x86BE},{0xB148, 0xB3E3},{0xB149, 0x86BF},{0xB14A, 0x86C0},{0xB14B, 0x86C1},{0xB14C, 0x86C2},{0xB14D, 0x86C3},{0xB14E, 0x86C4},
- {0xB14F, 0x86C5},{0xB150, 0xB3E4},{0xB151, 0xB3E5},{0xB152, 0x86C6},{0xB153, 0x86C7},{0xB154, 0xB3E6},{0xB155, 0xB3E7},{0xB156, 0x86C8},
- {0xB157, 0x86C9},{0xB158, 0xB3E8},{0xB159, 0x86CA},{0xB15A, 0x86CB},{0xB15B, 0x86CC},{0xB15C, 0xB3E9},{0xB15D, 0x86CD},{0xB15E, 0x86CE},
- {0xB15F, 0x86CF},{0xB160, 0xB3EA},{0xB161, 0x86D0},{0xB162, 0x86D1},{0xB163, 0x86D2},{0xB164, 0x86D3},{0xB165, 0x86D4},{0xB166, 0x86D5},
- {0xB167, 0x86D6},{0xB168, 0x86D7},{0xB169, 0x86D8},{0xB16A, 0x86D9},{0xB16B, 0x86DA},{0xB16C, 0x86DB},{0xB16D, 0x86DC},{0xB16E, 0x86DD},
- {0xB16F, 0x86DE},{0xB170, 0x86DF},{0xB171, 0x86E0},{0xB172, 0x86E1},{0xB173, 0x86E2},{0xB174, 0x86E3},{0xB175, 0x86E4},{0xB176, 0x86E5},
- {0xB177, 0x86E6},{0xB178, 0xB3EB},{0xB179, 0xB3EC},{0xB17A, 0x86E7},{0xB17B, 0x86E8},{0xB17C, 0xB3ED},{0xB17D, 0x86E9},{0xB17E, 0x86EA},
- {0xB17F, 0x86EB},{0xB180, 0xB3EE},{0xB181, 0x86EC},{0xB182, 0xB3EF},{0xB183, 0x86ED},{0xB184, 0x86EE},{0xB185, 0x86EF},{0xB186, 0x86F0},
- {0xB187, 0x86F1},{0xB188, 0xB3F0},{0xB189, 0xB3F1},{0xB18A, 0x86F2},{0xB18B, 0xB3F2},{0xB18C, 0x86F3},{0xB18D, 0xB3F3},{0xB18E, 0x86F4},
- {0xB18F, 0x86F5},{0xB190, 0x86F6},{0xB191, 0x86F7},{0xB192, 0xB3F4},{0xB193, 0xB3F5},{0xB194, 0xB3F6},{0xB195, 0x86F8},{0xB196, 0x86F9},
- {0xB197, 0x86FA},{0xB198, 0xB3F7},{0xB199, 0x86FB},{0xB19A, 0x86FC},{0xB19B, 0x86FD},{0xB19C, 0xB3F8},{0xB19D, 0x86FE},{0xB19E, 0x8741},
- {0xB19F, 0x8742},{0xB1A0, 0x8743},{0xB1A1, 0x8744},{0xB1A2, 0x8745},{0xB1A3, 0x8746},{0xB1A4, 0x8747},{0xB1A5, 0x8748},{0xB1A6, 0x8749},
- {0xB1A7, 0x874A},{0xB1A8, 0xB3F9},{0xB1A9, 0x874B},{0xB1AA, 0x874C},{0xB1AB, 0x874D},{0xB1AC, 0x874E},{0xB1AD, 0x874F},{0xB1AE, 0x8750},
- {0xB1AF, 0x8751},{0xB1B0, 0x8752},{0xB1B1, 0x8753},{0xB1B2, 0x8754},{0xB1B3, 0x8755},{0xB1B4, 0x8756},{0xB1B5, 0x8757},{0xB1B6, 0x8758},
- {0xB1B7, 0x8759},{0xB1B8, 0x875A},{0xB1B9, 0x8761},{0xB1BA, 0x8762},{0xB1BB, 0x8763},{0xB1BC, 0x8764},{0xB1BD, 0x8765},{0xB1BE, 0x8766},
- {0xB1BF, 0x8767},{0xB1C0, 0x8768},{0xB1C1, 0x8769},{0xB1C2, 0x876A},{0xB1C3, 0x876B},{0xB1C4, 0x876C},{0xB1C5, 0x876D},{0xB1C6, 0x876E},
- {0xB1C7, 0x876F},{0xB1C8, 0x8770},{0xB1C9, 0x8771},{0xB1CA, 0x8772},{0xB1CB, 0x8773},{0xB1CC, 0xB3FA},{0xB1CD, 0x8774},{0xB1CE, 0x8775},
- {0xB1CF, 0x8776},{0xB1D0, 0xB3FB},{0xB1D1, 0x8777},{0xB1D2, 0x8778},{0xB1D3, 0x8779},{0xB1D4, 0xB3FC},{0xB1D5, 0x877A},{0xB1D6, 0x8781},
- {0xB1D7, 0x8782},{0xB1D8, 0x8783},{0xB1D9, 0x8784},{0xB1DA, 0x8785},{0xB1DB, 0x8786},{0xB1DC, 0xB3FD},{0xB1DD, 0xB3FE},{0xB1DE, 0x8787},
- {0xB1DF, 0xB4A1},{0xB1E0, 0x8788},{0xB1E1, 0x8789},{0xB1E2, 0x878A},{0xB1E3, 0x878B},{0xB1E4, 0x878C},{0xB1E5, 0x878D},{0xB1E6, 0x878E},
- {0xB1E7, 0x878F},{0xB1E8, 0xB4A2},{0xB1E9, 0xB4A3},{0xB1EA, 0x8790},{0xB1EB, 0x8791},{0xB1EC, 0xB4A4},{0xB1ED, 0x8792},{0xB1EE, 0x8793},
- {0xB1EF, 0x8794},{0xB1F0, 0xB4A5},{0xB1F1, 0x8795},{0xB1F2, 0x8796},{0xB1F3, 0x8797},{0xB1F4, 0x8798},{0xB1F5, 0x8799},{0xB1F6, 0x879A},
- {0xB1F7, 0x879B},{0xB1F8, 0x879C},{0xB1F9, 0xB4A6},{0xB1FA, 0x879D},{0xB1FB, 0xB4A7},{0xB1FC, 0x879E},{0xB1FD, 0xB4A8},{0xB1FE, 0x879F},
- {0xB1FF, 0x87A0},{0xB200, 0x87A1},{0xB201, 0x87A2},{0xB202, 0x87A3},{0xB203, 0x87A4},{0xB204, 0xB4A9},{0xB205, 0xB4AA},{0xB206, 0x87A5},
- {0xB207, 0x87A6},{0xB208, 0xB4AB},{0xB209, 0x87A7},{0xB20A, 0x87A8},{0xB20B, 0xB4AC},{0xB20C, 0xB4AD},{0xB20D, 0x87A9},{0xB20E, 0x87AA},
- {0xB20F, 0x87AB},{0xB210, 0x87AC},{0xB211, 0x87AD},{0xB212, 0x87AE},{0xB213, 0x87AF},{0xB214, 0xB4AE},{0xB215, 0xB4AF},{0xB216, 0x87B0},
- {0xB217, 0xB4B0},{0xB218, 0x87B1},{0xB219, 0xB4B1},{0xB21A, 0x87B2},{0xB21B, 0x87B3},{0xB21C, 0x87B4},{0xB21D, 0x87B5},{0xB21E, 0x87B6},
- {0xB21F, 0x87B7},{0xB220, 0xB4B2},{0xB221, 0x87B8},{0xB222, 0x87B9},{0xB223, 0x87BA},{0xB224, 0x87BB},{0xB225, 0x87BC},{0xB226, 0x87BD},
- {0xB227, 0x87BE},{0xB228, 0x87BF},{0xB229, 0x87C0},{0xB22A, 0x87C1},{0xB22B, 0x87C2},{0xB22C, 0x87C3},{0xB22D, 0x87C4},{0xB22E, 0x87C5},
- {0xB22F, 0x87C6},{0xB230, 0x87C7},{0xB231, 0x87C8},{0xB232, 0x87C9},{0xB233, 0x87CA},{0xB234, 0xB4B3},{0xB235, 0x87CB},{0xB236, 0x87CC},
- {0xB237, 0x87CD},{0xB238, 0x87CE},{0xB239, 0x87CF},{0xB23A, 0x87D0},{0xB23B, 0x87D1},{0xB23C, 0xB4B4},{0xB23D, 0x87D2},{0xB23E, 0x87D3},
- {0xB23F, 0x87D4},{0xB240, 0x87D5},{0xB241, 0x87D6},{0xB242, 0x87D7},{0xB243, 0x87D8},{0xB244, 0x87D9},{0xB245, 0x87DA},{0xB246, 0x87DB},
- {0xB247, 0x87DC},{0xB248, 0x87DD},{0xB249, 0x87DE},{0xB24A, 0x87DF},{0xB24B, 0x87E0},{0xB24C, 0x87E1},{0xB24D, 0x87E2},{0xB24E, 0x87E3},
- {0xB24F, 0x87E4},{0xB250, 0x87E5},{0xB251, 0x87E6},{0xB252, 0x87E7},{0xB253, 0x87E8},{0xB254, 0x87E9},{0xB255, 0x87EA},{0xB256, 0x87EB},
- {0xB257, 0x87EC},{0xB258, 0xB4B5},{0xB259, 0x87ED},{0xB25A, 0x87EE},{0xB25B, 0x87EF},{0xB25C, 0xB4B6},{0xB25D, 0x87F0},{0xB25E, 0x87F1},
- {0xB25F, 0x87F2},{0xB260, 0xB4B7},{0xB261, 0x87F3},{0xB262, 0x87F4},{0xB263, 0x87F5},{0xB264, 0x87F6},{0xB265, 0x87F7},{0xB266, 0x87F8},
- {0xB267, 0x87F9},{0xB268, 0xB4B8},{0xB269, 0xB4B9},{0xB26A, 0x87FA},{0xB26B, 0x87FB},{0xB26C, 0x87FC},{0xB26D, 0x87FD},{0xB26E, 0x87FE},
- {0xB26F, 0x8841},{0xB270, 0x8842},{0xB271, 0x8843},{0xB272, 0x8844},{0xB273, 0x8845},{0xB274, 0xB4BA},{0xB275, 0xB4BB},{0xB276, 0x8846},
- {0xB277, 0x8847},{0xB278, 0x8848},{0xB279, 0x8849},{0xB27A, 0x884A},{0xB27B, 0x884B},{0xB27C, 0xB4BC},{0xB27D, 0x884C},{0xB27E, 0x884D},
- {0xB27F, 0x884E},{0xB280, 0x884F},{0xB281, 0x8850},{0xB282, 0x8851},{0xB283, 0x8852},{0xB284, 0xB4BD},{0xB285, 0xB4BE},{0xB286, 0x8853},
- {0xB287, 0x8854},{0xB288, 0x8855},{0xB289, 0xB4BF},{0xB28A, 0x8856},{0xB28B, 0x8857},{0xB28C, 0x8858},{0xB28D, 0x8859},{0xB28E, 0x885A},
- {0xB28F, 0x8861},{0xB290, 0xB4C0},{0xB291, 0xB4C1},{0xB292, 0x8862},{0xB293, 0x8863},{0xB294, 0xB4C2},{0xB295, 0x8864},{0xB296, 0x8865},
- {0xB297, 0x8866},{0xB298, 0xB4C3},{0xB299, 0xB4C4},{0xB29A, 0xB4C5},{0xB29B, 0x8867},{0xB29C, 0x8868},{0xB29D, 0x8869},{0xB29E, 0x886A},
- {0xB29F, 0x886B},{0xB2A0, 0xB4C6},{0xB2A1, 0xB4C7},{0xB2A2, 0x886C},{0xB2A3, 0xB4C8},{0xB2A4, 0x886D},{0xB2A5, 0xB4C9},{0xB2A6, 0xB4CA},
- {0xB2A7, 0x886E},{0xB2A8, 0x886F},{0xB2A9, 0x8870},{0xB2AA, 0xB4CB},{0xB2AB, 0x8871},{0xB2AC, 0xB4CC},{0xB2AD, 0x8872},{0xB2AE, 0x8873},
- {0xB2AF, 0x8874},{0xB2B0, 0xB4CD},{0xB2B1, 0x8875},{0xB2B2, 0x8876},{0xB2B3, 0x8877},{0xB2B4, 0xB4CE},{0xB2B5, 0x8878},{0xB2B6, 0x8879},
- {0xB2B7, 0x887A},{0xB2B8, 0x8881},{0xB2B9, 0x8882},{0xB2BA, 0x8883},{0xB2BB, 0x8884},{0xB2BC, 0x8885},{0xB2BD, 0x8886},{0xB2BE, 0x8887},
- {0xB2BF, 0x8888},{0xB2C0, 0x8889},{0xB2C1, 0x888A},{0xB2C2, 0x888B},{0xB2C3, 0x888C},{0xB2C4, 0x888D},{0xB2C5, 0x888E},{0xB2C6, 0x888F},
- {0xB2C7, 0x8890},{0xB2C8, 0xB4CF},{0xB2C9, 0xB4D0},{0xB2CA, 0x8891},{0xB2CB, 0x8892},{0xB2CC, 0xB4D1},{0xB2CD, 0x8893},{0xB2CE, 0x8894},
- {0xB2CF, 0x8895},{0xB2D0, 0xB4D2},{0xB2D1, 0x8896},{0xB2D2, 0xB4D3},{0xB2D3, 0x8897},{0xB2D4, 0x8898},{0xB2D5, 0x8899},{0xB2D6, 0x889A},
- {0xB2D7, 0x889B},{0xB2D8, 0xB4D4},{0xB2D9, 0xB4D5},{0xB2DA, 0x889C},{0xB2DB, 0xB4D6},{0xB2DC, 0x889D},{0xB2DD, 0xB4D7},{0xB2DE, 0x889E},
- {0xB2DF, 0x889F},{0xB2E0, 0x88A0},{0xB2E1, 0x88A1},{0xB2E2, 0xB4D8},{0xB2E3, 0x88A2},{0xB2E4, 0xB4D9},{0xB2E5, 0xB4DA},{0xB2E6, 0xB4DB},
- {0xB2E7, 0x88A3},{0xB2E8, 0xB4DC},{0xB2E9, 0x88A4},{0xB2EA, 0x88A5},{0xB2EB, 0xB4DD},{0xB2EC, 0xB4DE},{0xB2ED, 0xB4DF},{0xB2EE, 0xB4E0},
- {0xB2EF, 0xB4E1},{0xB2F0, 0x88A6},{0xB2F1, 0x88A7},{0xB2F2, 0x88A8},{0xB2F3, 0xB4E2},{0xB2F4, 0xB4E3},{0xB2F5, 0xB4E4},{0xB2F6, 0x88A9},
- {0xB2F7, 0xB4E5},{0xB2F8, 0xB4E6},{0xB2F9, 0xB4E7},{0xB2FA, 0xB4E8},{0xB2FB, 0xB4E9},{0xB2FC, 0x88AA},{0xB2FD, 0x88AB},{0xB2FE, 0x88AC},
- {0xB2FF, 0xB4EA},{0xB300, 0xB4EB},{0xB301, 0xB4EC},{0xB302, 0x88AD},{0xB303, 0x88AE},{0xB304, 0xB4ED},{0xB305, 0x88AF},{0xB306, 0x88B0},
- {0xB307, 0x88B1},{0xB308, 0xB4EE},{0xB309, 0x88B2},{0xB30A, 0x88B3},{0xB30B, 0x88B4},{0xB30C, 0x88B5},{0xB30D, 0x88B6},{0xB30E, 0x88B7},
- {0xB30F, 0x88B8},{0xB310, 0xB4EF},{0xB311, 0xB4F0},{0xB312, 0x88B9},{0xB313, 0xB4F1},{0xB314, 0xB4F2},{0xB315, 0xB4F3},{0xB316, 0x88BA},
- {0xB317, 0x88BB},{0xB318, 0x88BC},{0xB319, 0x88BD},{0xB31A, 0x88BE},{0xB31B, 0x88BF},{0xB31C, 0xB4F4},{0xB31D, 0x88C0},{0xB31E, 0x88C1},
- {0xB31F, 0x88C2},{0xB320, 0x88C3},{0xB321, 0x88C4},{0xB322, 0x88C5},{0xB323, 0x88C6},{0xB324, 0x88C7},{0xB325, 0x88C8},{0xB326, 0x88C9},
- {0xB327, 0x88CA},{0xB328, 0x88CB},{0xB329, 0x88CC},{0xB32A, 0x88CD},{0xB32B, 0x88CE},{0xB32C, 0x88CF},{0xB32D, 0x88D0},{0xB32E, 0x88D1},
- {0xB32F, 0x88D2},{0xB330, 0x88D3},{0xB331, 0x88D4},{0xB332, 0x88D5},{0xB333, 0x88D6},{0xB334, 0x88D7},{0xB335, 0x88D8},{0xB336, 0x88D9},
- {0xB337, 0x88DA},{0xB338, 0x88DB},{0xB339, 0x88DC},{0xB33A, 0x88DD},{0xB33B, 0x88DE},{0xB33C, 0x88DF},{0xB33D, 0x88E0},{0xB33E, 0x88E1},
- {0xB33F, 0x88E2},{0xB340, 0x88E3},{0xB341, 0x88E4},{0xB342, 0x88E5},{0xB343, 0x88E6},{0xB344, 0x88E7},{0xB345, 0x88E8},{0xB346, 0x88E9},
- {0xB347, 0x88EA},{0xB348, 0x88EB},{0xB349, 0x88EC},{0xB34A, 0x88ED},{0xB34B, 0x88EE},{0xB34C, 0x88EF},{0xB34D, 0x88F0},{0xB34E, 0x88F1},
- {0xB34F, 0x88F2},{0xB350, 0x88F3},{0xB351, 0x88F4},{0xB352, 0x88F5},{0xB353, 0x88F6},{0xB354, 0xB4F5},{0xB355, 0xB4F6},{0xB356, 0xB4F7},
- {0xB357, 0x88F7},{0xB358, 0xB4F8},{0xB359, 0x88F8},{0xB35A, 0x88F9},{0xB35B, 0xB4F9},{0xB35C, 0xB4FA},{0xB35D, 0x88FA},{0xB35E, 0xB4FB},
- {0xB35F, 0xB4FC},{0xB360, 0x88FB},{0xB361, 0x88FC},{0xB362, 0x88FD},{0xB363, 0x88FE},{0xB364, 0xB4FD},{0xB365, 0xB4FE},{0xB366, 0x8941},
- {0xB367, 0xB5A1},{0xB368, 0x8942},{0xB369, 0xB5A2},{0xB36A, 0x8943},{0xB36B, 0xB5A3},{0xB36C, 0x8944},{0xB36D, 0x8945},{0xB36E, 0xB5A4},
- {0xB36F, 0x8946},{0xB370, 0xB5A5},{0xB371, 0xB5A6},{0xB372, 0x8947},{0xB373, 0x8948},{0xB374, 0xB5A7},{0xB375, 0x8949},{0xB376, 0x894A},
- {0xB377, 0x894B},{0xB378, 0xB5A8},{0xB379, 0x894C},{0xB37A, 0x894D},{0xB37B, 0x894E},{0xB37C, 0x894F},{0xB37D, 0x8950},{0xB37E, 0x8951},
- {0xB37F, 0x8952},{0xB380, 0xB5A9},{0xB381, 0xB5AA},{0xB382, 0x8953},{0xB383, 0xB5AB},{0xB384, 0xB5AC},{0xB385, 0xB5AD},{0xB386, 0x8954},
- {0xB387, 0x8955},{0xB388, 0x8956},{0xB389, 0x8957},{0xB38A, 0x8958},{0xB38B, 0x8959},{0xB38C, 0xB5AE},{0xB38D, 0x895A},{0xB38E, 0x8961},
- {0xB38F, 0x8962},{0xB390, 0xB5AF},{0xB391, 0x8963},{0xB392, 0x8964},{0xB393, 0x8965},{0xB394, 0xB5B0},{0xB395, 0x8966},{0xB396, 0x8967},
- {0xB397, 0x8968},{0xB398, 0x8969},{0xB399, 0x896A},{0xB39A, 0x896B},{0xB39B, 0x896C},{0xB39C, 0x896D},{0xB39D, 0x896E},{0xB39E, 0x896F},
- {0xB39F, 0x8970},{0xB3A0, 0xB5B1},{0xB3A1, 0xB5B2},{0xB3A2, 0x8971},{0xB3A3, 0x8972},{0xB3A4, 0x8973},{0xB3A5, 0x8974},{0xB3A6, 0x8975},
- {0xB3A7, 0x8976},{0xB3A8, 0xB5B3},{0xB3A9, 0x8977},{0xB3AA, 0x8978},{0xB3AB, 0x8979},{0xB3AC, 0xB5B4},{0xB3AD, 0x897A},{0xB3AE, 0x8981},
- {0xB3AF, 0x8982},{0xB3B0, 0x8983},{0xB3B1, 0x8984},{0xB3B2, 0x8985},{0xB3B3, 0x8986},{0xB3B4, 0x8987},{0xB3B5, 0x8988},{0xB3B6, 0x8989},
- {0xB3B7, 0x898A},{0xB3B8, 0x898B},{0xB3B9, 0x898C},{0xB3BA, 0x898D},{0xB3BB, 0x898E},{0xB3BC, 0x898F},{0xB3BD, 0x8990},{0xB3BE, 0x8991},
- {0xB3BF, 0x8992},{0xB3C0, 0x8993},{0xB3C1, 0x8994},{0xB3C2, 0x8995},{0xB3C3, 0x8996},{0xB3C4, 0xB5B5},{0xB3C5, 0xB5B6},{0xB3C6, 0x8997},
- {0xB3C7, 0x8998},{0xB3C8, 0xB5B7},{0xB3C9, 0x8999},{0xB3CA, 0x899A},{0xB3CB, 0xB5B8},{0xB3CC, 0xB5B9},{0xB3CD, 0x899B},{0xB3CE, 0xB5BA},
- {0xB3CF, 0x899C},{0xB3D0, 0xB5BB},{0xB3D1, 0x899D},{0xB3D2, 0x899E},{0xB3D3, 0x899F},{0xB3D4, 0xB5BC},{0xB3D5, 0xB5BD},{0xB3D6, 0x89A0},
- {0xB3D7, 0xB5BE},{0xB3D8, 0x89A1},{0xB3D9, 0xB5BF},{0xB3DA, 0x89A2},{0xB3DB, 0xB5C0},{0xB3DC, 0x89A3},{0xB3DD, 0xB5C1},{0xB3DE, 0x89A4},
- {0xB3DF, 0x89A5},{0xB3E0, 0xB5C2},{0xB3E1, 0x89A6},{0xB3E2, 0x89A7},{0xB3E3, 0x89A8},{0xB3E4, 0xB5C3},{0xB3E5, 0x89A9},{0xB3E6, 0x89AA},
- {0xB3E7, 0x89AB},{0xB3E8, 0xB5C4},{0xB3E9, 0x89AC},{0xB3EA, 0x89AD},{0xB3EB, 0x89AE},{0xB3EC, 0x89AF},{0xB3ED, 0x89B0},{0xB3EE, 0x89B1},
- {0xB3EF, 0x89B2},{0xB3F0, 0x89B3},{0xB3F1, 0x89B4},{0xB3F2, 0x89B5},{0xB3F3, 0x89B6},{0xB3F4, 0x89B7},{0xB3F5, 0x89B8},{0xB3F6, 0x89B9},
- {0xB3F7, 0x89BA},{0xB3F8, 0x89BB},{0xB3F9, 0x89BC},{0xB3FA, 0x89BD},{0xB3FB, 0x89BE},{0xB3FC, 0xB5C5},{0xB3FD, 0x89BF},{0xB3FE, 0x89C0},
- {0xB3FF, 0x89C1},{0xB400, 0x89C2},{0xB401, 0x89C3},{0xB402, 0x89C4},{0xB403, 0x89C5},{0xB404, 0x89C6},{0xB405, 0x89C7},{0xB406, 0x89C8},
- {0xB407, 0x89C9},{0xB408, 0x89CA},{0xB409, 0x89CB},{0xB40A, 0x89CC},{0xB40B, 0x89CD},{0xB40C, 0x89CE},{0xB40D, 0x89CF},{0xB40E, 0x89D0},
- {0xB40F, 0x89D1},{0xB410, 0xB5C6},{0xB411, 0x89D2},{0xB412, 0x89D3},{0xB413, 0x89D4},{0xB414, 0x89D5},{0xB415, 0x89D6},{0xB416, 0x89D7},
- {0xB417, 0x89D8},{0xB418, 0xB5C7},{0xB419, 0x89D9},{0xB41A, 0x89DA},{0xB41B, 0x89DB},{0xB41C, 0xB5C8},{0xB41D, 0x89DC},{0xB41E, 0x89DD},
- {0xB41F, 0x89DE},{0xB420, 0xB5C9},{0xB421, 0x89DF},{0xB422, 0x89E0},{0xB423, 0x89E1},{0xB424, 0x89E2},{0xB425, 0x89E3},{0xB426, 0x89E4},
- {0xB427, 0x89E5},{0xB428, 0xB5CA},{0xB429, 0xB5CB},{0xB42A, 0x89E6},{0xB42B, 0xB5CC},{0xB42C, 0x89E7},{0xB42D, 0x89E8},{0xB42E, 0x89E9},
- {0xB42F, 0x89EA},{0xB430, 0x89EB},{0xB431, 0x89EC},{0xB432, 0x89ED},{0xB433, 0x89EE},{0xB434, 0xB5CD},{0xB435, 0x89EF},{0xB436, 0x89F0},
- {0xB437, 0x89F1},{0xB438, 0x89F2},{0xB439, 0x89F3},{0xB43A, 0x89F4},{0xB43B, 0x89F5},{0xB43C, 0x89F6},{0xB43D, 0x89F7},{0xB43E, 0x89F8},
- {0xB43F, 0x89F9},{0xB440, 0x89FA},{0xB441, 0x89FB},{0xB442, 0x89FC},{0xB443, 0x89FD},{0xB444, 0x89FE},{0xB445, 0x8A41},{0xB446, 0x8A42},
- {0xB447, 0x8A43},{0xB448, 0x8A44},{0xB449, 0x8A45},{0xB44A, 0x8A46},{0xB44B, 0x8A47},{0xB44C, 0x8A48},{0xB44D, 0x8A49},{0xB44E, 0x8A4A},
- {0xB44F, 0x8A4B},{0xB450, 0xB5CE},{0xB451, 0xB5CF},{0xB452, 0x8A4C},{0xB453, 0x8A4D},{0xB454, 0xB5D0},{0xB455, 0x8A4E},{0xB456, 0x8A4F},
- {0xB457, 0x8A50},{0xB458, 0xB5D1},{0xB459, 0x8A51},{0xB45A, 0x8A52},{0xB45B, 0x8A53},{0xB45C, 0x8A54},{0xB45D, 0x8A55},{0xB45E, 0x8A56},
- {0xB45F, 0x8A57},{0xB460, 0xB5D2},{0xB461, 0xB5D3},{0xB462, 0x8A58},{0xB463, 0xB5D4},{0xB464, 0x8A59},{0xB465, 0xB5D5},{0xB466, 0x8A5A},
- {0xB467, 0x8A61},{0xB468, 0x8A62},{0xB469, 0x8A63},{0xB46A, 0x8A64},{0xB46B, 0x8A65},{0xB46C, 0xB5D6},{0xB46D, 0x8A66},{0xB46E, 0x8A67},
- {0xB46F, 0x8A68},{0xB470, 0x8A69},{0xB471, 0x8A6A},{0xB472, 0x8A6B},{0xB473, 0x8A6C},{0xB474, 0x8A6D},{0xB475, 0x8A6E},{0xB476, 0x8A6F},
- {0xB477, 0x8A70},{0xB478, 0x8A71},{0xB479, 0x8A72},{0xB47A, 0x8A73},{0xB47B, 0x8A74},{0xB47C, 0x8A75},{0xB47D, 0x8A76},{0xB47E, 0x8A77},
- {0xB47F, 0x8A78},{0xB480, 0xB5D7},{0xB481, 0x8A79},{0xB482, 0x8A7A},{0xB483, 0x8A81},{0xB484, 0x8A82},{0xB485, 0x8A83},{0xB486, 0x8A84},
- {0xB487, 0x8A85},{0xB488, 0xB5D8},{0xB489, 0x8A86},{0xB48A, 0x8A87},{0xB48B, 0x8A88},{0xB48C, 0x8A89},{0xB48D, 0x8A8A},{0xB48E, 0x8A8B},
- {0xB48F, 0x8A8C},{0xB490, 0x8A8D},{0xB491, 0x8A8E},{0xB492, 0x8A8F},{0xB493, 0x8A90},{0xB494, 0x8A91},{0xB495, 0x8A92},{0xB496, 0x8A93},
- {0xB497, 0x8A94},{0xB498, 0x8A95},{0xB499, 0x8A96},{0xB49A, 0x8A97},{0xB49B, 0x8A98},{0xB49C, 0x8A99},{0xB49D, 0xB5D9},{0xB49E, 0x8A9A},
- {0xB49F, 0x8A9B},{0xB4A0, 0x8A9C},{0xB4A1, 0x8A9D},{0xB4A2, 0x8A9E},{0xB4A3, 0x8A9F},{0xB4A4, 0xB5DA},{0xB4A5, 0x8AA0},{0xB4A6, 0x8AA1},
- {0xB4A7, 0x8AA2},{0xB4A8, 0xB5DB},{0xB4A9, 0x8AA3},{0xB4AA, 0x8AA4},{0xB4AB, 0x8AA5},{0xB4AC, 0xB5DC},{0xB4AD, 0x8AA6},{0xB4AE, 0x8AA7},
- {0xB4AF, 0x8AA8},{0xB4B0, 0x8AA9},{0xB4B1, 0x8AAA},{0xB4B2, 0x8AAB},{0xB4B3, 0x8AAC},{0xB4B4, 0x8AAD},{0xB4B5, 0xB5DD},{0xB4B6, 0x8AAE},
- {0xB4B7, 0xB5DE},{0xB4B8, 0x8AAF},{0xB4B9, 0xB5DF},{0xB4BA, 0x8AB0},{0xB4BB, 0x8AB1},{0xB4BC, 0x8AB2},{0xB4BD, 0x8AB3},{0xB4BE, 0x8AB4},
- {0xB4BF, 0x8AB5},{0xB4C0, 0xB5E0},{0xB4C1, 0x8AB6},{0xB4C2, 0x8AB7},{0xB4C3, 0x8AB8},{0xB4C4, 0xB5E1},{0xB4C5, 0x8AB9},{0xB4C6, 0x8ABA},
- {0xB4C7, 0x8ABB},{0xB4C8, 0xB5E2},{0xB4C9, 0x8ABC},{0xB4CA, 0x8ABD},{0xB4CB, 0x8ABE},{0xB4CC, 0x8ABF},{0xB4CD, 0x8AC0},{0xB4CE, 0x8AC1},
- {0xB4CF, 0x8AC2},{0xB4D0, 0xB5E3},{0xB4D1, 0x8AC3},{0xB4D2, 0x8AC4},{0xB4D3, 0x8AC5},{0xB4D4, 0x8AC6},{0xB4D5, 0xB5E4},{0xB4D6, 0x8AC7},
- {0xB4D7, 0x8AC8},{0xB4D8, 0x8AC9},{0xB4D9, 0x8ACA},{0xB4DA, 0x8ACB},{0xB4DB, 0x8ACC},{0xB4DC, 0xB5E5},{0xB4DD, 0xB5E6},{0xB4DE, 0x8ACD},
- {0xB4DF, 0x8ACE},{0xB4E0, 0xB5E7},{0xB4E1, 0x8ACF},{0xB4E2, 0x8AD0},{0xB4E3, 0xB5E8},{0xB4E4, 0xB5E9},{0xB4E5, 0x8AD1},{0xB4E6, 0xB5EA},
- {0xB4E7, 0x8AD2},{0xB4E8, 0x8AD3},{0xB4E9, 0x8AD4},{0xB4EA, 0x8AD5},{0xB4EB, 0x8AD6},{0xB4EC, 0xB5EB},{0xB4ED, 0xB5EC},{0xB4EE, 0x8AD7},
- {0xB4EF, 0xB5ED},{0xB4F0, 0x8AD8},{0xB4F1, 0xB5EE},{0xB4F2, 0x8AD9},{0xB4F3, 0x8ADA},{0xB4F4, 0x8ADB},{0xB4F5, 0x8ADC},{0xB4F6, 0x8ADD},
- {0xB4F7, 0x8ADE},{0xB4F8, 0xB5EF},{0xB4F9, 0x8ADF},{0xB4FA, 0x8AE0},{0xB4FB, 0x8AE1},{0xB4FC, 0x8AE2},{0xB4FD, 0x8AE3},{0xB4FE, 0x8AE4},
- {0xB4FF, 0x8AE5},{0xB500, 0x8AE6},{0xB501, 0x8AE7},{0xB502, 0x8AE8},{0xB503, 0x8AE9},{0xB504, 0x8AEA},{0xB505, 0x8AEB},{0xB506, 0x8AEC},
- {0xB507, 0x8AED},{0xB508, 0x8AEE},{0xB509, 0x8AEF},{0xB50A, 0x8AF0},{0xB50B, 0x8AF1},{0xB50C, 0x8AF2},{0xB50D, 0x8AF3},{0xB50E, 0x8AF4},
- {0xB50F, 0x8AF5},{0xB510, 0x8AF6},{0xB511, 0x8AF7},{0xB512, 0x8AF8},{0xB513, 0x8AF9},{0xB514, 0xB5F0},{0xB515, 0xB5F1},{0xB516, 0x8AFA},
- {0xB517, 0x8AFB},{0xB518, 0xB5F2},{0xB519, 0x8AFC},{0xB51A, 0x8AFD},{0xB51B, 0xB5F3},{0xB51C, 0xB5F4},{0xB51D, 0x8AFE},{0xB51E, 0x8B41},
- {0xB51F, 0x8B42},{0xB520, 0x8B43},{0xB521, 0x8B44},{0xB522, 0x8B45},{0xB523, 0x8B46},{0xB524, 0xB5F5},{0xB525, 0xB5F6},{0xB526, 0x8B47},
- {0xB527, 0xB5F7},{0xB528, 0xB5F8},{0xB529, 0xB5F9},{0xB52A, 0xB5FA},{0xB52B, 0x8B48},{0xB52C, 0x8B49},{0xB52D, 0x8B4A},{0xB52E, 0x8B4B},
- {0xB52F, 0x8B4C},{0xB530, 0xB5FB},{0xB531, 0xB5FC},{0xB532, 0x8B4D},{0xB533, 0x8B4E},{0xB534, 0xB5FD},{0xB535, 0x8B4F},{0xB536, 0x8B50},
- {0xB537, 0x8B51},{0xB538, 0xB5FE},{0xB539, 0x8B52},{0xB53A, 0x8B53},{0xB53B, 0x8B54},{0xB53C, 0x8B55},{0xB53D, 0x8B56},{0xB53E, 0x8B57},
- {0xB53F, 0x8B58},{0xB540, 0xB6A1},{0xB541, 0xB6A2},{0xB542, 0x8B59},{0xB543, 0xB6A3},{0xB544, 0xB6A4},{0xB545, 0xB6A5},{0xB546, 0x8B5A},
- {0xB547, 0x8B61},{0xB548, 0x8B62},{0xB549, 0x8B63},{0xB54A, 0x8B64},{0xB54B, 0xB6A6},{0xB54C, 0xB6A7},{0xB54D, 0xB6A8},{0xB54E, 0x8B65},
- {0xB54F, 0x8B66},{0xB550, 0xB6A9},{0xB551, 0x8B67},{0xB552, 0x8B68},{0xB553, 0x8B69},{0xB554, 0xB6AA},{0xB555, 0x8B6A},{0xB556, 0x8B6B},
- {0xB557, 0x8B6C},{0xB558, 0x8B6D},{0xB559, 0x8B6E},{0xB55A, 0x8B6F},{0xB55B, 0x8B70},{0xB55C, 0xB6AB},{0xB55D, 0xB6AC},{0xB55E, 0x8B71},
- {0xB55F, 0xB6AD},{0xB560, 0xB6AE},{0xB561, 0xB6AF},{0xB562, 0x8B72},{0xB563, 0x8B73},{0xB564, 0x8B74},{0xB565, 0x8B75},{0xB566, 0x8B76},
- {0xB567, 0x8B77},{0xB568, 0x8B78},{0xB569, 0x8B79},{0xB56A, 0x8B7A},{0xB56B, 0x8B81},{0xB56C, 0x8B82},{0xB56D, 0x8B83},{0xB56E, 0x8B84},
- {0xB56F, 0x8B85},{0xB570, 0x8B86},{0xB571, 0x8B87},{0xB572, 0x8B88},{0xB573, 0x8B89},{0xB574, 0x8B8A},{0xB575, 0x8B8B},{0xB576, 0x8B8C},
- {0xB577, 0x8B8D},{0xB578, 0x8B8E},{0xB579, 0x8B8F},{0xB57A, 0x8B90},{0xB57B, 0x8B91},{0xB57C, 0x8B92},{0xB57D, 0x8B93},{0xB57E, 0x8B94},
- {0xB57F, 0x8B95},{0xB580, 0x8B96},{0xB581, 0x8B97},{0xB582, 0x8B98},{0xB583, 0x8B99},{0xB584, 0x8B9A},{0xB585, 0x8B9B},{0xB586, 0x8B9C},
- {0xB587, 0x8B9D},{0xB588, 0x8B9E},{0xB589, 0x8B9F},{0xB58A, 0x8BA0},{0xB58B, 0x8BA1},{0xB58C, 0x8BA2},{0xB58D, 0x8BA3},{0xB58E, 0x8BA4},
- {0xB58F, 0x8BA5},{0xB590, 0x8BA6},{0xB591, 0x8BA7},{0xB592, 0x8BA8},{0xB593, 0x8BA9},{0xB594, 0x8BAA},{0xB595, 0x8BAB},{0xB596, 0x8BAC},
- {0xB597, 0x8BAD},{0xB598, 0x8BAE},{0xB599, 0x8BAF},{0xB59A, 0x8BB0},{0xB59B, 0x8BB1},{0xB59C, 0x8BB2},{0xB59D, 0x8BB3},{0xB59E, 0x8BB4},
- {0xB59F, 0x8BB5},{0xB5A0, 0xB6B0},{0xB5A1, 0xB6B1},{0xB5A2, 0x8BB6},{0xB5A3, 0x8BB7},{0xB5A4, 0xB6B2},{0xB5A5, 0x8BB8},{0xB5A6, 0x8BB9},
- {0xB5A7, 0x8BBA},{0xB5A8, 0xB6B3},{0xB5A9, 0x8BBB},{0xB5AA, 0xB6B4},{0xB5AB, 0xB6B5},{0xB5AC, 0x8BBC},{0xB5AD, 0x8BBD},{0xB5AE, 0x8BBE},
- {0xB5AF, 0x8BBF},{0xB5B0, 0xB6B6},{0xB5B1, 0xB6B7},{0xB5B2, 0x8BC0},{0xB5B3, 0xB6B8},{0xB5B4, 0xB6B9},{0xB5B5, 0xB6BA},{0xB5B6, 0x8BC1},
- {0xB5B7, 0x8BC2},{0xB5B8, 0x8BC3},{0xB5B9, 0x8BC4},{0xB5BA, 0x8BC5},{0xB5BB, 0xB6BB},{0xB5BC, 0xB6BC},{0xB5BD, 0xB6BD},{0xB5BE, 0x8BC6},
- {0xB5BF, 0x8BC7},{0xB5C0, 0xB6BE},{0xB5C1, 0x8BC8},{0xB5C2, 0x8BC9},{0xB5C3, 0x8BCA},{0xB5C4, 0xB6BF},{0xB5C5, 0x8BCB},{0xB5C6, 0x8BCC},
- {0xB5C7, 0x8BCD},{0xB5C8, 0x8BCE},{0xB5C9, 0x8BCF},{0xB5CA, 0x8BD0},{0xB5CB, 0x8BD1},{0xB5CC, 0xB6C0},{0xB5CD, 0xB6C1},{0xB5CE, 0x8BD2},
- {0xB5CF, 0xB6C2},{0xB5D0, 0xB6C3},{0xB5D1, 0xB6C4},{0xB5D2, 0x8BD3},{0xB5D3, 0x8BD4},{0xB5D4, 0x8BD5},{0xB5D5, 0x8BD6},{0xB5D6, 0x8BD7},
- {0xB5D7, 0x8BD8},{0xB5D8, 0xB6C5},{0xB5D9, 0x8BD9},{0xB5DA, 0x8BDA},{0xB5DB, 0x8BDB},{0xB5DC, 0x8BDC},{0xB5DD, 0x8BDD},{0xB5DE, 0x8BDE},
- {0xB5DF, 0x8BDF},{0xB5E0, 0x8BE0},{0xB5E1, 0x8BE1},{0xB5E2, 0x8BE2},{0xB5E3, 0x8BE3},{0xB5E4, 0x8BE4},{0xB5E5, 0x8BE5},{0xB5E6, 0x8BE6},
- {0xB5E7, 0x8BE7},{0xB5E8, 0x8BE8},{0xB5E9, 0x8BE9},{0xB5EA, 0x8BEA},{0xB5EB, 0x8BEB},{0xB5EC, 0xB6C6},{0xB5ED, 0x8BEC},{0xB5EE, 0x8BED},
- {0xB5EF, 0x8BEE},{0xB5F0, 0x8BEF},{0xB5F1, 0x8BF0},{0xB5F2, 0x8BF1},{0xB5F3, 0x8BF2},{0xB5F4, 0x8BF3},{0xB5F5, 0x8BF4},{0xB5F6, 0x8BF5},
- {0xB5F7, 0x8BF6},{0xB5F8, 0x8BF7},{0xB5F9, 0x8BF8},{0xB5FA, 0x8BF9},{0xB5FB, 0x8BFA},{0xB5FC, 0x8BFB},{0xB5FD, 0x8BFC},{0xB5FE, 0x8BFD},
- {0xB5FF, 0x8BFE},{0xB600, 0x8C41},{0xB601, 0x8C42},{0xB602, 0x8C43},{0xB603, 0x8C44},{0xB604, 0x8C45},{0xB605, 0x8C46},{0xB606, 0x8C47},
- {0xB607, 0x8C48},{0xB608, 0x8C49},{0xB609, 0x8C4A},{0xB60A, 0x8C4B},{0xB60B, 0x8C4C},{0xB60C, 0x8C4D},{0xB60D, 0x8C4E},{0xB60E, 0x8C4F},
- {0xB60F, 0x8C50},{0xB610, 0xB6C7},{0xB611, 0xB6C8},{0xB612, 0x8C51},{0xB613, 0x8C52},{0xB614, 0xB6C9},{0xB615, 0x8C53},{0xB616, 0x8C54},
- {0xB617, 0x8C55},{0xB618, 0xB6CA},{0xB619, 0x8C56},{0xB61A, 0x8C57},{0xB61B, 0x8C58},{0xB61C, 0x8C59},{0xB61D, 0x8C5A},{0xB61E, 0x8C61},
- {0xB61F, 0x8C62},{0xB620, 0x8C63},{0xB621, 0x8C64},{0xB622, 0x8C65},{0xB623, 0x8C66},{0xB624, 0x8C67},{0xB625, 0xB6CB},{0xB626, 0x8C68},
- {0xB627, 0x8C69},{0xB628, 0x8C6A},{0xB629, 0x8C6B},{0xB62A, 0x8C6C},{0xB62B, 0x8C6D},{0xB62C, 0xB6CC},{0xB62D, 0x8C6E},{0xB62E, 0x8C6F},
- {0xB62F, 0x8C70},{0xB630, 0x8C71},{0xB631, 0x8C72},{0xB632, 0x8C73},{0xB633, 0x8C74},{0xB634, 0xB6CD},{0xB635, 0x8C75},{0xB636, 0x8C76},
- {0xB637, 0x8C77},{0xB638, 0x8C78},{0xB639, 0x8C79},{0xB63A, 0x8C7A},{0xB63B, 0x8C81},{0xB63C, 0x8C82},{0xB63D, 0x8C83},{0xB63E, 0x8C84},
- {0xB63F, 0x8C85},{0xB640, 0x8C86},{0xB641, 0x8C87},{0xB642, 0x8C88},{0xB643, 0x8C89},{0xB644, 0x8C8A},{0xB645, 0x8C8B},{0xB646, 0x8C8C},
- {0xB647, 0x8C8D},{0xB648, 0xB6CE},{0xB649, 0x8C8E},{0xB64A, 0x8C8F},{0xB64B, 0x8C90},{0xB64C, 0x8C91},{0xB64D, 0x8C92},{0xB64E, 0x8C93},
- {0xB64F, 0x8C94},{0xB650, 0x8C95},{0xB651, 0x8C96},{0xB652, 0x8C97},{0xB653, 0x8C98},{0xB654, 0x8C99},{0xB655, 0x8C9A},{0xB656, 0x8C9B},
- {0xB657, 0x8C9C},{0xB658, 0x8C9D},{0xB659, 0x8C9E},{0xB65A, 0x8C9F},{0xB65B, 0x8CA0},{0xB65C, 0x8CA1},{0xB65D, 0x8CA2},{0xB65E, 0x8CA3},
- {0xB65F, 0x8CA4},{0xB660, 0x8CA5},{0xB661, 0x8CA6},{0xB662, 0x8CA7},{0xB663, 0x8CA8},{0xB664, 0xB6CF},{0xB665, 0x8CA9},{0xB666, 0x8CAA},
- {0xB667, 0x8CAB},{0xB668, 0xB6D0},{0xB669, 0x8CAC},{0xB66A, 0x8CAD},{0xB66B, 0x8CAE},{0xB66C, 0x8CAF},{0xB66D, 0x8CB0},{0xB66E, 0x8CB1},
- {0xB66F, 0x8CB2},{0xB670, 0x8CB3},{0xB671, 0x8CB4},{0xB672, 0x8CB5},{0xB673, 0x8CB6},{0xB674, 0x8CB7},{0xB675, 0x8CB8},{0xB676, 0x8CB9},
- {0xB677, 0x8CBA},{0xB678, 0x8CBB},{0xB679, 0x8CBC},{0xB67A, 0x8CBD},{0xB67B, 0x8CBE},{0xB67C, 0x8CBF},{0xB67D, 0x8CC0},{0xB67E, 0x8CC1},
- {0xB67F, 0x8CC2},{0xB680, 0x8CC3},{0xB681, 0x8CC4},{0xB682, 0x8CC5},{0xB683, 0x8CC6},{0xB684, 0x8CC7},{0xB685, 0x8CC8},{0xB686, 0x8CC9},
- {0xB687, 0x8CCA},{0xB688, 0x8CCB},{0xB689, 0x8CCC},{0xB68A, 0x8CCD},{0xB68B, 0x8CCE},{0xB68C, 0x8CCF},{0xB68D, 0x8CD0},{0xB68E, 0x8CD1},
- {0xB68F, 0x8CD2},{0xB690, 0x8CD3},{0xB691, 0x8CD4},{0xB692, 0x8CD5},{0xB693, 0x8CD6},{0xB694, 0x8CD7},{0xB695, 0x8CD8},{0xB696, 0x8CD9},
- {0xB697, 0x8CDA},{0xB698, 0x8CDB},{0xB699, 0x8CDC},{0xB69A, 0x8CDD},{0xB69B, 0x8CDE},{0xB69C, 0xB6D1},{0xB69D, 0xB6D2},{0xB69E, 0x8CDF},
- {0xB69F, 0x8CE0},{0xB6A0, 0xB6D3},{0xB6A1, 0x8CE1},{0xB6A2, 0x8CE2},{0xB6A3, 0x8CE3},{0xB6A4, 0xB6D4},{0xB6A5, 0x8CE4},{0xB6A6, 0x8CE5},
- {0xB6A7, 0x8CE6},{0xB6A8, 0x8CE7},{0xB6A9, 0x8CE8},{0xB6AA, 0x8CE9},{0xB6AB, 0xB6D5},{0xB6AC, 0xB6D6},{0xB6AD, 0x8CEA},{0xB6AE, 0x8CEB},
- {0xB6AF, 0x8CEC},{0xB6B0, 0x8CED},{0xB6B1, 0xB6D7},{0xB6B2, 0x8CEE},{0xB6B3, 0x8CEF},{0xB6B4, 0x8CF0},{0xB6B5, 0x8CF1},{0xB6B6, 0x8CF2},
- {0xB6B7, 0x8CF3},{0xB6B8, 0x8CF4},{0xB6B9, 0x8CF5},{0xB6BA, 0x8CF6},{0xB6BB, 0x8CF7},{0xB6BC, 0x8CF8},{0xB6BD, 0x8CF9},{0xB6BE, 0x8CFA},
- {0xB6BF, 0x8CFB},{0xB6C0, 0x8CFC},{0xB6C1, 0x8CFD},{0xB6C2, 0x8CFE},{0xB6C3, 0x8D41},{0xB6C4, 0x8D42},{0xB6C5, 0x8D43},{0xB6C6, 0x8D44},
- {0xB6C7, 0x8D45},{0xB6C8, 0x8D46},{0xB6C9, 0x8D47},{0xB6CA, 0x8D48},{0xB6CB, 0x8D49},{0xB6CC, 0x8D4A},{0xB6CD, 0x8D4B},{0xB6CE, 0x8D4C},
- {0xB6CF, 0x8D4D},{0xB6D0, 0x8D4E},{0xB6D1, 0x8D4F},{0xB6D2, 0x8D50},{0xB6D3, 0x8D51},{0xB6D4, 0xB6D8},{0xB6D5, 0x8D52},{0xB6D6, 0x8D53},
- {0xB6D7, 0x8D54},{0xB6D8, 0x8D55},{0xB6D9, 0x8D56},{0xB6DA, 0x8D57},{0xB6DB, 0x8D58},{0xB6DC, 0x8D59},{0xB6DD, 0x8D5A},{0xB6DE, 0x8D61},
- {0xB6DF, 0x8D62},{0xB6E0, 0x8D63},{0xB6E1, 0x8D64},{0xB6E2, 0x8D65},{0xB6E3, 0x8D66},{0xB6E4, 0x8D67},{0xB6E5, 0x8D68},{0xB6E6, 0x8D69},
- {0xB6E7, 0x8D6A},{0xB6E8, 0x8D6B},{0xB6E9, 0x8D6C},{0xB6EA, 0x8D6D},{0xB6EB, 0x8D6E},{0xB6EC, 0x8D6F},{0xB6ED, 0x8D70},{0xB6EE, 0x8D71},
- {0xB6EF, 0x8D72},{0xB6F0, 0xB6D9},{0xB6F1, 0x8D73},{0xB6F2, 0x8D74},{0xB6F3, 0x8D75},{0xB6F4, 0xB6DA},{0xB6F5, 0x8D76},{0xB6F6, 0x8D77},
- {0xB6F7, 0x8D78},{0xB6F8, 0xB6DB},{0xB6F9, 0x8D79},{0xB6FA, 0x8D7A},{0xB6FB, 0x8D81},{0xB6FC, 0x8D82},{0xB6FD, 0x8D83},{0xB6FE, 0x8D84},
- {0xB6FF, 0x8D85},{0xB700, 0xB6DC},{0xB701, 0xB6DD},{0xB702, 0x8D86},{0xB703, 0x8D87},{0xB704, 0x8D88},{0xB705, 0xB6DE},{0xB706, 0x8D89},
- {0xB707, 0x8D8A},{0xB708, 0x8D8B},{0xB709, 0x8D8C},{0xB70A, 0x8D8D},{0xB70B, 0x8D8E},{0xB70C, 0x8D8F},{0xB70D, 0x8D90},{0xB70E, 0x8D91},
- {0xB70F, 0x8D92},{0xB710, 0x8D93},{0xB711, 0x8D94},{0xB712, 0x8D95},{0xB713, 0x8D96},{0xB714, 0x8D97},{0xB715, 0x8D98},{0xB716, 0x8D99},
- {0xB717, 0x8D9A},{0xB718, 0x8D9B},{0xB719, 0x8D9C},{0xB71A, 0x8D9D},{0xB71B, 0x8D9E},{0xB71C, 0x8D9F},{0xB71D, 0x8DA0},{0xB71E, 0x8DA1},
- {0xB71F, 0x8DA2},{0xB720, 0x8DA3},{0xB721, 0x8DA4},{0xB722, 0x8DA5},{0xB723, 0x8DA6},{0xB724, 0x8DA7},{0xB725, 0x8DA8},{0xB726, 0x8DA9},
- {0xB727, 0x8DAA},{0xB728, 0xB6DF},{0xB729, 0xB6E0},{0xB72A, 0x8DAB},{0xB72B, 0x8DAC},{0xB72C, 0xB6E1},{0xB72D, 0x8DAD},{0xB72E, 0x8DAE},
- {0xB72F, 0xB6E2},{0xB730, 0xB6E3},{0xB731, 0x8DAF},{0xB732, 0x8DB0},{0xB733, 0x8DB1},{0xB734, 0x8DB2},{0xB735, 0x8DB3},{0xB736, 0x8DB4},
- {0xB737, 0x8DB5},{0xB738, 0xB6E4},{0xB739, 0xB6E5},{0xB73A, 0x8DB6},{0xB73B, 0xB6E6},{0xB73C, 0x8DB7},{0xB73D, 0x8DB8},{0xB73E, 0x8DB9},
- {0xB73F, 0x8DBA},{0xB740, 0x8DBB},{0xB741, 0x8DBC},{0xB742, 0x8DBD},{0xB743, 0x8DBE},{0xB744, 0xB6E7},{0xB745, 0x8DBF},{0xB746, 0x8DC0},
- {0xB747, 0x8DC1},{0xB748, 0xB6E8},{0xB749, 0x8DC2},{0xB74A, 0x8DC3},{0xB74B, 0x8DC4},{0xB74C, 0xB6E9},{0xB74D, 0x8DC5},{0xB74E, 0x8DC6},
- {0xB74F, 0x8DC7},{0xB750, 0x8DC8},{0xB751, 0x8DC9},{0xB752, 0x8DCA},{0xB753, 0x8DCB},{0xB754, 0xB6EA},{0xB755, 0xB6EB},{0xB756, 0x8DCC},
- {0xB757, 0x8DCD},{0xB758, 0x8DCE},{0xB759, 0x8DCF},{0xB75A, 0x8DD0},{0xB75B, 0x8DD1},{0xB75C, 0x8DD2},{0xB75D, 0x8DD3},{0xB75E, 0x8DD4},
- {0xB75F, 0x8DD5},{0xB760, 0xB6EC},{0xB761, 0x8DD6},{0xB762, 0x8DD7},{0xB763, 0x8DD8},{0xB764, 0xB6ED},{0xB765, 0x8DD9},{0xB766, 0x8DDA},
- {0xB767, 0x8DDB},{0xB768, 0xB6EE},{0xB769, 0x8DDC},{0xB76A, 0x8DDD},{0xB76B, 0x8DDE},{0xB76C, 0x8DDF},{0xB76D, 0x8DE0},{0xB76E, 0x8DE1},
- {0xB76F, 0x8DE2},{0xB770, 0xB6EF},{0xB771, 0xB6F0},{0xB772, 0x8DE3},{0xB773, 0xB6F1},{0xB774, 0x8DE4},{0xB775, 0xB6F2},{0xB776, 0x8DE5},
- {0xB777, 0x8DE6},{0xB778, 0x8DE7},{0xB779, 0x8DE8},{0xB77A, 0x8DE9},{0xB77B, 0x8DEA},{0xB77C, 0xB6F3},{0xB77D, 0xB6F4},{0xB77E, 0x8DEB},
- {0xB77F, 0x8DEC},{0xB780, 0xB6F5},{0xB781, 0x8DED},{0xB782, 0x8DEE},{0xB783, 0x8DEF},{0xB784, 0xB6F6},{0xB785, 0x8DF0},{0xB786, 0x8DF1},
- {0xB787, 0x8DF2},{0xB788, 0x8DF3},{0xB789, 0x8DF4},{0xB78A, 0x8DF5},{0xB78B, 0x8DF6},{0xB78C, 0xB6F7},{0xB78D, 0xB6F8},{0xB78E, 0x8DF7},
- {0xB78F, 0xB6F9},{0xB790, 0xB6FA},{0xB791, 0xB6FB},{0xB792, 0xB6FC},{0xB793, 0x8DF8},{0xB794, 0x8DF9},{0xB795, 0x8DFA},{0xB796, 0xB6FD},
- {0xB797, 0xB6FE},{0xB798, 0xB7A1},{0xB799, 0xB7A2},{0xB79A, 0x8DFB},{0xB79B, 0x8DFC},{0xB79C, 0xB7A3},{0xB79D, 0x8DFD},{0xB79E, 0x8DFE},
- {0xB79F, 0x8E41},{0xB7A0, 0xB7A4},{0xB7A1, 0x8E42},{0xB7A2, 0x8E43},{0xB7A3, 0x8E44},{0xB7A4, 0x8E45},{0xB7A5, 0x8E46},{0xB7A6, 0x8E47},
- {0xB7A7, 0x8E48},{0xB7A8, 0xB7A5},{0xB7A9, 0xB7A6},{0xB7AA, 0x8E49},{0xB7AB, 0xB7A7},{0xB7AC, 0xB7A8},{0xB7AD, 0xB7A9},{0xB7AE, 0x8E4A},
- {0xB7AF, 0x8E4B},{0xB7B0, 0x8E4C},{0xB7B1, 0x8E4D},{0xB7B2, 0x8E4E},{0xB7B3, 0x8E4F},{0xB7B4, 0xB7AA},{0xB7B5, 0xB7AB},{0xB7B6, 0x8E50},
- {0xB7B7, 0x8E51},{0xB7B8, 0xB7AC},{0xB7B9, 0x8E52},{0xB7BA, 0x8E53},{0xB7BB, 0x8E54},{0xB7BC, 0x8E55},{0xB7BD, 0x8E56},{0xB7BE, 0x8E57},
- {0xB7BF, 0x8E58},{0xB7C0, 0x8E59},{0xB7C1, 0x8E5A},{0xB7C2, 0x8E61},{0xB7C3, 0x8E62},{0xB7C4, 0x8E63},{0xB7C5, 0x8E64},{0xB7C6, 0x8E65},
- {0xB7C7, 0xB7AD},{0xB7C8, 0x8E66},{0xB7C9, 0xB7AE},{0xB7CA, 0x8E67},{0xB7CB, 0x8E68},{0xB7CC, 0x8E69},{0xB7CD, 0x8E6A},{0xB7CE, 0x8E6B},
- {0xB7CF, 0x8E6C},{0xB7D0, 0x8E6D},{0xB7D1, 0x8E6E},{0xB7D2, 0x8E6F},{0xB7D3, 0x8E70},{0xB7D4, 0x8E71},{0xB7D5, 0x8E72},{0xB7D6, 0x8E73},
- {0xB7D7, 0x8E74},{0xB7D8, 0x8E75},{0xB7D9, 0x8E76},{0xB7DA, 0x8E77},{0xB7DB, 0x8E78},{0xB7DC, 0x8E79},{0xB7DD, 0x8E7A},{0xB7DE, 0x8E81},
- {0xB7DF, 0x8E82},{0xB7E0, 0x8E83},{0xB7E1, 0x8E84},{0xB7E2, 0x8E85},{0xB7E3, 0x8E86},{0xB7E4, 0x8E87},{0xB7E5, 0x8E88},{0xB7E6, 0x8E89},
- {0xB7E7, 0x8E8A},{0xB7E8, 0x8E8B},{0xB7E9, 0x8E8C},{0xB7EA, 0x8E8D},{0xB7EB, 0x8E8E},{0xB7EC, 0xB7AF},{0xB7ED, 0xB7B0},{0xB7EE, 0x8E8F},
- {0xB7EF, 0x8E90},{0xB7F0, 0xB7B1},{0xB7F1, 0x8E91},{0xB7F2, 0x8E92},{0xB7F3, 0x8E93},{0xB7F4, 0xB7B2},{0xB7F5, 0x8E94},{0xB7F6, 0x8E95},
- {0xB7F7, 0x8E96},{0xB7F8, 0x8E97},{0xB7F9, 0x8E98},{0xB7FA, 0x8E99},{0xB7FB, 0x8E9A},{0xB7FC, 0xB7B3},{0xB7FD, 0xB7B4},{0xB7FE, 0x8E9B},
- {0xB7FF, 0xB7B5},{0xB800, 0xB7B6},{0xB801, 0xB7B7},{0xB802, 0x8E9C},{0xB803, 0x8E9D},{0xB804, 0x8E9E},{0xB805, 0x8E9F},{0xB806, 0x8EA0},
- {0xB807, 0xB7B8},{0xB808, 0xB7B9},{0xB809, 0xB7BA},{0xB80A, 0x8EA1},{0xB80B, 0x8EA2},{0xB80C, 0xB7BB},{0xB80D, 0x8EA3},{0xB80E, 0x8EA4},
- {0xB80F, 0x8EA5},{0xB810, 0xB7BC},{0xB811, 0x8EA6},{0xB812, 0x8EA7},{0xB813, 0x8EA8},{0xB814, 0x8EA9},{0xB815, 0x8EAA},{0xB816, 0x8EAB},
- {0xB817, 0x8EAC},{0xB818, 0xB7BD},{0xB819, 0xB7BE},{0xB81A, 0x8EAD},{0xB81B, 0xB7BF},{0xB81C, 0x8EAE},{0xB81D, 0xB7C0},{0xB81E, 0x8EAF},
- {0xB81F, 0x8EB0},{0xB820, 0x8EB1},{0xB821, 0x8EB2},{0xB822, 0x8EB3},{0xB823, 0x8EB4},{0xB824, 0xB7C1},{0xB825, 0xB7C2},{0xB826, 0x8EB5},
- {0xB827, 0x8EB6},{0xB828, 0xB7C3},{0xB829, 0x8EB7},{0xB82A, 0x8EB8},{0xB82B, 0x8EB9},{0xB82C, 0xB7C4},{0xB82D, 0x8EBA},{0xB82E, 0x8EBB},
- {0xB82F, 0x8EBC},{0xB830, 0x8EBD},{0xB831, 0x8EBE},{0xB832, 0x8EBF},{0xB833, 0x8EC0},{0xB834, 0xB7C5},{0xB835, 0xB7C6},{0xB836, 0x8EC1},
- {0xB837, 0xB7C7},{0xB838, 0xB7C8},{0xB839, 0xB7C9},{0xB83A, 0x8EC2},{0xB83B, 0x8EC3},{0xB83C, 0x8EC4},{0xB83D, 0x8EC5},{0xB83E, 0x8EC6},
- {0xB83F, 0x8EC7},{0xB840, 0xB7CA},{0xB841, 0x8EC8},{0xB842, 0x8EC9},{0xB843, 0x8ECA},{0xB844, 0xB7CB},{0xB845, 0x8ECB},{0xB846, 0x8ECC},
- {0xB847, 0x8ECD},{0xB848, 0x8ECE},{0xB849, 0x8ECF},{0xB84A, 0x8ED0},{0xB84B, 0x8ED1},{0xB84C, 0x8ED2},{0xB84D, 0x8ED3},{0xB84E, 0x8ED4},
- {0xB84F, 0x8ED5},{0xB850, 0x8ED6},{0xB851, 0xB7CC},{0xB852, 0x8ED7},{0xB853, 0xB7CD},{0xB854, 0x8ED8},{0xB855, 0x8ED9},{0xB856, 0x8EDA},
- {0xB857, 0x8EDB},{0xB858, 0x8EDC},{0xB859, 0x8EDD},{0xB85A, 0x8EDE},{0xB85B, 0x8EDF},{0xB85C, 0xB7CE},{0xB85D, 0xB7CF},{0xB85E, 0x8EE0},
- {0xB85F, 0x8EE1},{0xB860, 0xB7D0},{0xB861, 0x8EE2},{0xB862, 0x8EE3},{0xB863, 0x8EE4},{0xB864, 0xB7D1},{0xB865, 0x8EE5},{0xB866, 0x8EE6},
- {0xB867, 0x8EE7},{0xB868, 0x8EE8},{0xB869, 0x8EE9},{0xB86A, 0x8EEA},{0xB86B, 0x8EEB},{0xB86C, 0xB7D2},{0xB86D, 0xB7D3},{0xB86E, 0x8EEC},
- {0xB86F, 0xB7D4},{0xB870, 0x8EED},{0xB871, 0xB7D5},{0xB872, 0x8EEE},{0xB873, 0x8EEF},{0xB874, 0x8EF0},{0xB875, 0x8EF1},{0xB876, 0x8EF2},
- {0xB877, 0x8EF3},{0xB878, 0xB7D6},{0xB879, 0x8EF4},{0xB87A, 0x8EF5},{0xB87B, 0x8EF6},{0xB87C, 0xB7D7},{0xB87D, 0x8EF7},{0xB87E, 0x8EF8},
- {0xB87F, 0x8EF9},{0xB880, 0x8EFA},{0xB881, 0x8EFB},{0xB882, 0x8EFC},{0xB883, 0x8EFD},{0xB884, 0x8EFE},{0xB885, 0x8F41},{0xB886, 0x8F42},
- {0xB887, 0x8F43},{0xB888, 0x8F44},{0xB889, 0x8F45},{0xB88A, 0x8F46},{0xB88B, 0x8F47},{0xB88C, 0x8F48},{0xB88D, 0xB7D8},{0xB88E, 0x8F49},
- {0xB88F, 0x8F4A},{0xB890, 0x8F4B},{0xB891, 0x8F4C},{0xB892, 0x8F4D},{0xB893, 0x8F4E},{0xB894, 0x8F4F},{0xB895, 0x8F50},{0xB896, 0x8F51},
- {0xB897, 0x8F52},{0xB898, 0x8F53},{0xB899, 0x8F54},{0xB89A, 0x8F55},{0xB89B, 0x8F56},{0xB89C, 0x8F57},{0xB89D, 0x8F58},{0xB89E, 0x8F59},
- {0xB89F, 0x8F5A},{0xB8A0, 0x8F61},{0xB8A1, 0x8F62},{0xB8A2, 0x8F63},{0xB8A3, 0x8F64},{0xB8A4, 0x8F65},{0xB8A5, 0x8F66},{0xB8A6, 0x8F67},
- {0xB8A7, 0x8F68},{0xB8A8, 0xB7D9},{0xB8A9, 0x8F69},{0xB8AA, 0x8F6A},{0xB8AB, 0x8F6B},{0xB8AC, 0x8F6C},{0xB8AD, 0x8F6D},{0xB8AE, 0x8F6E},
- {0xB8AF, 0x8F6F},{0xB8B0, 0xB7DA},{0xB8B1, 0x8F70},{0xB8B2, 0x8F71},{0xB8B3, 0x8F72},{0xB8B4, 0xB7DB},{0xB8B5, 0x8F73},{0xB8B6, 0x8F74},
- {0xB8B7, 0x8F75},{0xB8B8, 0xB7DC},{0xB8B9, 0x8F76},{0xB8BA, 0x8F77},{0xB8BB, 0x8F78},{0xB8BC, 0x8F79},{0xB8BD, 0x8F7A},{0xB8BE, 0x8F81},
- {0xB8BF, 0x8F82},{0xB8C0, 0xB7DD},{0xB8C1, 0xB7DE},{0xB8C2, 0x8F83},{0xB8C3, 0xB7DF},{0xB8C4, 0x8F84},{0xB8C5, 0xB7E0},{0xB8C6, 0x8F85},
- {0xB8C7, 0x8F86},{0xB8C8, 0x8F87},{0xB8C9, 0x8F88},{0xB8CA, 0x8F89},{0xB8CB, 0x8F8A},{0xB8CC, 0xB7E1},{0xB8CD, 0x8F8B},{0xB8CE, 0x8F8C},
- {0xB8CF, 0x8F8D},{0xB8D0, 0xB7E2},{0xB8D1, 0x8F8E},{0xB8D2, 0x8F8F},{0xB8D3, 0x8F90},{0xB8D4, 0xB7E3},{0xB8D5, 0x8F91},{0xB8D6, 0x8F92},
- {0xB8D7, 0x8F93},{0xB8D8, 0x8F94},{0xB8D9, 0x8F95},{0xB8DA, 0x8F96},{0xB8DB, 0x8F97},{0xB8DC, 0x8F98},{0xB8DD, 0xB7E4},{0xB8DE, 0x8F99},
- {0xB8DF, 0xB7E5},{0xB8E0, 0x8F9A},{0xB8E1, 0xB7E6},{0xB8E2, 0x8F9B},{0xB8E3, 0x8F9C},{0xB8E4, 0x8F9D},{0xB8E5, 0x8F9E},{0xB8E6, 0x8F9F},
- {0xB8E7, 0x8FA0},{0xB8E8, 0xB7E7},{0xB8E9, 0xB7E8},{0xB8EA, 0x8FA1},{0xB8EB, 0x8FA2},{0xB8EC, 0xB7E9},{0xB8ED, 0x8FA3},{0xB8EE, 0x8FA4},
- {0xB8EF, 0x8FA5},{0xB8F0, 0xB7EA},{0xB8F1, 0x8FA6},{0xB8F2, 0x8FA7},{0xB8F3, 0x8FA8},{0xB8F4, 0x8FA9},{0xB8F5, 0x8FAA},{0xB8F6, 0x8FAB},
- {0xB8F7, 0x8FAC},{0xB8F8, 0xB7EB},{0xB8F9, 0xB7EC},{0xB8FA, 0x8FAD},{0xB8FB, 0xB7ED},{0xB8FC, 0x8FAE},{0xB8FD, 0xB7EE},{0xB8FE, 0x8FAF},
- {0xB8FF, 0x8FB0},{0xB900, 0x8FB1},{0xB901, 0x8FB2},{0xB902, 0x8FB3},{0xB903, 0x8FB4},{0xB904, 0xB7EF},{0xB905, 0x8FB5},{0xB906, 0x8FB6},
- {0xB907, 0x8FB7},{0xB908, 0x8FB8},{0xB909, 0x8FB9},{0xB90A, 0x8FBA},{0xB90B, 0x8FBB},{0xB90C, 0x8FBC},{0xB90D, 0x8FBD},{0xB90E, 0x8FBE},
- {0xB90F, 0x8FBF},{0xB910, 0x8FC0},{0xB911, 0x8FC1},{0xB912, 0x8FC2},{0xB913, 0x8FC3},{0xB914, 0x8FC4},{0xB915, 0x8FC5},{0xB916, 0x8FC6},
- {0xB917, 0x8FC7},{0xB918, 0xB7F0},{0xB919, 0x8FC8},{0xB91A, 0x8FC9},{0xB91B, 0x8FCA},{0xB91C, 0x8FCB},{0xB91D, 0x8FCC},{0xB91E, 0x8FCD},
- {0xB91F, 0x8FCE},{0xB920, 0xB7F1},{0xB921, 0x8FCF},{0xB922, 0x8FD0},{0xB923, 0x8FD1},{0xB924, 0x8FD2},{0xB925, 0x8FD3},{0xB926, 0x8FD4},
- {0xB927, 0x8FD5},{0xB928, 0x8FD6},{0xB929, 0x8FD7},{0xB92A, 0x8FD8},{0xB92B, 0x8FD9},{0xB92C, 0x8FDA},{0xB92D, 0x8FDB},{0xB92E, 0x8FDC},
- {0xB92F, 0x8FDD},{0xB930, 0x8FDE},{0xB931, 0x8FDF},{0xB932, 0x8FE0},{0xB933, 0x8FE1},{0xB934, 0x8FE2},{0xB935, 0x8FE3},{0xB936, 0x8FE4},
- {0xB937, 0x8FE5},{0xB938, 0x8FE6},{0xB939, 0x8FE7},{0xB93A, 0x8FE8},{0xB93B, 0x8FE9},{0xB93C, 0xB7F2},{0xB93D, 0xB7F3},{0xB93E, 0x8FEA},
- {0xB93F, 0x8FEB},{0xB940, 0xB7F4},{0xB941, 0x8FEC},{0xB942, 0x8FED},{0xB943, 0x8FEE},{0xB944, 0xB7F5},{0xB945, 0x8FEF},{0xB946, 0x8FF0},
- {0xB947, 0x8FF1},{0xB948, 0x8FF2},{0xB949, 0x8FF3},{0xB94A, 0x8FF4},{0xB94B, 0x8FF5},{0xB94C, 0xB7F6},{0xB94D, 0x8FF6},{0xB94E, 0x8FF7},
- {0xB94F, 0xB7F7},{0xB950, 0x8FF8},{0xB951, 0xB7F8},{0xB952, 0x8FF9},{0xB953, 0x8FFA},{0xB954, 0x8FFB},{0xB955, 0x8FFC},{0xB956, 0x8FFD},
- {0xB957, 0x8FFE},{0xB958, 0xB7F9},{0xB959, 0xB7FA},{0xB95A, 0x9041},{0xB95B, 0x9042},{0xB95C, 0xB7FB},{0xB95D, 0x9043},{0xB95E, 0x9044},
- {0xB95F, 0x9045},{0xB960, 0xB7FC},{0xB961, 0x9046},{0xB962, 0x9047},{0xB963, 0x9048},{0xB964, 0x9049},{0xB965, 0x904A},{0xB966, 0x904B},
- {0xB967, 0x904C},{0xB968, 0xB7FD},{0xB969, 0xB7FE},{0xB96A, 0x904D},{0xB96B, 0xB8A1},{0xB96C, 0x904E},{0xB96D, 0xB8A2},{0xB96E, 0x904F},
- {0xB96F, 0x9050},{0xB970, 0x9051},{0xB971, 0x9052},{0xB972, 0x9053},{0xB973, 0x9054},{0xB974, 0xB8A3},{0xB975, 0xB8A4},{0xB976, 0x9055},
- {0xB977, 0x9056},{0xB978, 0xB8A5},{0xB979, 0x9057},{0xB97A, 0x9058},{0xB97B, 0x9059},{0xB97C, 0xB8A6},{0xB97D, 0x905A},{0xB97E, 0x9061},
- {0xB97F, 0x9062},{0xB980, 0x9063},{0xB981, 0x9064},{0xB982, 0x9065},{0xB983, 0x9066},{0xB984, 0xB8A7},{0xB985, 0xB8A8},{0xB986, 0x9067},
- {0xB987, 0xB8A9},{0xB988, 0x9068},{0xB989, 0xB8AA},{0xB98A, 0xB8AB},{0xB98B, 0x9069},{0xB98C, 0x906A},{0xB98D, 0xB8AC},{0xB98E, 0xB8AD},
- {0xB98F, 0x906B},{0xB990, 0x906C},{0xB991, 0x906D},{0xB992, 0x906E},{0xB993, 0x906F},{0xB994, 0x9070},{0xB995, 0x9071},{0xB996, 0x9072},
- {0xB997, 0x9073},{0xB998, 0x9074},{0xB999, 0x9075},{0xB99A, 0x9076},{0xB99B, 0x9077},{0xB99C, 0x9078},{0xB99D, 0x9079},{0xB99E, 0x907A},
- {0xB99F, 0x9081},{0xB9A0, 0x9082},{0xB9A1, 0x9083},{0xB9A2, 0x9084},{0xB9A3, 0x9085},{0xB9A4, 0x9086},{0xB9A5, 0x9087},{0xB9A6, 0x9088},
- {0xB9A7, 0x9089},{0xB9A8, 0x908A},{0xB9A9, 0x908B},{0xB9AA, 0x908C},{0xB9AB, 0x908D},{0xB9AC, 0xB8AE},{0xB9AD, 0xB8AF},{0xB9AE, 0x908E},
- {0xB9AF, 0x908F},{0xB9B0, 0xB8B0},{0xB9B1, 0x9090},{0xB9B2, 0x9091},{0xB9B3, 0x9092},{0xB9B4, 0xB8B1},{0xB9B5, 0x9093},{0xB9B6, 0x9094},
- {0xB9B7, 0x9095},{0xB9B8, 0x9096},{0xB9B9, 0x9097},{0xB9BA, 0x9098},{0xB9BB, 0x9099},{0xB9BC, 0xB8B2},{0xB9BD, 0xB8B3},{0xB9BE, 0x909A},
- {0xB9BF, 0xB8B4},{0xB9C0, 0x909B},{0xB9C1, 0xB8B5},{0xB9C2, 0x909C},{0xB9C3, 0x909D},{0xB9C4, 0x909E},{0xB9C5, 0x909F},{0xB9C6, 0x90A0},
- {0xB9C7, 0x90A1},{0xB9C8, 0xB8B6},{0xB9C9, 0xB8B7},{0xB9CA, 0x90A2},{0xB9CB, 0x90A3},{0xB9CC, 0xB8B8},{0xB9CD, 0x90A4},{0xB9CE, 0xB8B9},
- {0xB9CF, 0xB8BA},{0xB9D0, 0xB8BB},{0xB9D1, 0xB8BC},{0xB9D2, 0xB8BD},{0xB9D3, 0x90A5},{0xB9D4, 0x90A6},{0xB9D5, 0x90A7},{0xB9D6, 0x90A8},
- {0xB9D7, 0x90A9},{0xB9D8, 0xB8BE},{0xB9D9, 0xB8BF},{0xB9DA, 0x90AA},{0xB9DB, 0xB8C0},{0xB9DC, 0x90AB},{0xB9DD, 0xB8C1},{0xB9DE, 0xB8C2},
- {0xB9DF, 0x90AC},{0xB9E0, 0x90AD},{0xB9E1, 0xB8C3},{0xB9E2, 0x90AE},{0xB9E3, 0xB8C4},{0xB9E4, 0xB8C5},{0xB9E5, 0xB8C6},{0xB9E6, 0x90AF},
- {0xB9E7, 0x90B0},{0xB9E8, 0xB8C7},{0xB9E9, 0x90B1},{0xB9EA, 0x90B2},{0xB9EB, 0x90B3},{0xB9EC, 0xB8C8},{0xB9ED, 0x90B4},{0xB9EE, 0x90B5},
- {0xB9EF, 0x90B6},{0xB9F0, 0x90B7},{0xB9F1, 0x90B8},{0xB9F2, 0x90B9},{0xB9F3, 0x90BA},{0xB9F4, 0xB8C9},{0xB9F5, 0xB8CA},{0xB9F6, 0x90BB},
- {0xB9F7, 0xB8CB},{0xB9F8, 0xB8CC},{0xB9F9, 0xB8CD},{0xB9FA, 0xB8CE},{0xB9FB, 0x90BC},{0xB9FC, 0x90BD},{0xB9FD, 0x90BE},{0xB9FE, 0x90BF},
- {0xB9FF, 0x90C0},{0xBA00, 0xB8CF},{0xBA01, 0xB8D0},{0xBA02, 0x90C1},{0xBA03, 0x90C2},{0xBA04, 0x90C3},{0xBA05, 0x90C4},{0xBA06, 0x90C5},
- {0xBA07, 0x90C6},{0xBA08, 0xB8D1},{0xBA09, 0x90C7},{0xBA0A, 0x90C8},{0xBA0B, 0x90C9},{0xBA0C, 0x90CA},{0xBA0D, 0x90CB},{0xBA0E, 0x90CC},
- {0xBA0F, 0x90CD},{0xBA10, 0x90CE},{0xBA11, 0x90CF},{0xBA12, 0x90D0},{0xBA13, 0x90D1},{0xBA14, 0x90D2},{0xBA15, 0xB8D2},{0xBA16, 0x90D3},
- {0xBA17, 0x90D4},{0xBA18, 0x90D5},{0xBA19, 0x90D6},{0xBA1A, 0x90D7},{0xBA1B, 0x90D8},{0xBA1C, 0x90D9},{0xBA1D, 0x90DA},{0xBA1E, 0x90DB},
- {0xBA1F, 0x90DC},{0xBA20, 0x90DD},{0xBA21, 0x90DE},{0xBA22, 0x90DF},{0xBA23, 0x90E0},{0xBA24, 0x90E1},{0xBA25, 0x90E2},{0xBA26, 0x90E3},
- {0xBA27, 0x90E4},{0xBA28, 0x90E5},{0xBA29, 0x90E6},{0xBA2A, 0x90E7},{0xBA2B, 0x90E8},{0xBA2C, 0x90E9},{0xBA2D, 0x90EA},{0xBA2E, 0x90EB},
- {0xBA2F, 0x90EC},{0xBA30, 0x90ED},{0xBA31, 0x90EE},{0xBA32, 0x90EF},{0xBA33, 0x90F0},{0xBA34, 0x90F1},{0xBA35, 0x90F2},{0xBA36, 0x90F3},
- {0xBA37, 0x90F4},{0xBA38, 0xB8D3},{0xBA39, 0xB8D4},{0xBA3A, 0x90F5},{0xBA3B, 0x90F6},{0xBA3C, 0xB8D5},{0xBA3D, 0x90F7},{0xBA3E, 0x90F8},
- {0xBA3F, 0x90F9},{0xBA40, 0xB8D6},{0xBA41, 0x90FA},{0xBA42, 0xB8D7},{0xBA43, 0x90FB},{0xBA44, 0x90FC},{0xBA45, 0x90FD},{0xBA46, 0x90FE},
- {0xBA47, 0x9141},{0xBA48, 0xB8D8},{0xBA49, 0xB8D9},{0xBA4A, 0x9142},{0xBA4B, 0xB8DA},{0xBA4C, 0x9143},{0xBA4D, 0xB8DB},{0xBA4E, 0xB8DC},
- {0xBA4F, 0x9144},{0xBA50, 0x9145},{0xBA51, 0x9146},{0xBA52, 0x9147},{0xBA53, 0xB8DD},{0xBA54, 0xB8DE},{0xBA55, 0xB8DF},{0xBA56, 0x9148},
- {0xBA57, 0x9149},{0xBA58, 0xB8E0},{0xBA59, 0x914A},{0xBA5A, 0x914B},{0xBA5B, 0x914C},{0xBA5C, 0xB8E1},{0xBA5D, 0x914D},{0xBA5E, 0x914E},
- {0xBA5F, 0x914F},{0xBA60, 0x9150},{0xBA61, 0x9151},{0xBA62, 0x9152},{0xBA63, 0x9153},{0xBA64, 0xB8E2},{0xBA65, 0xB8E3},{0xBA66, 0x9154},
- {0xBA67, 0xB8E4},{0xBA68, 0xB8E5},{0xBA69, 0xB8E6},{0xBA6A, 0x9155},{0xBA6B, 0x9156},{0xBA6C, 0x9157},{0xBA6D, 0x9158},{0xBA6E, 0x9159},
- {0xBA6F, 0x915A},{0xBA70, 0xB8E7},{0xBA71, 0xB8E8},{0xBA72, 0x9161},{0xBA73, 0x9162},{0xBA74, 0xB8E9},{0xBA75, 0x9163},{0xBA76, 0x9164},
- {0xBA77, 0x9165},{0xBA78, 0xB8EA},{0xBA79, 0x9166},{0xBA7A, 0x9167},{0xBA7B, 0x9168},{0xBA7C, 0x9169},{0xBA7D, 0x916A},{0xBA7E, 0x916B},
- {0xBA7F, 0x916C},{0xBA80, 0x916D},{0xBA81, 0x916E},{0xBA82, 0x916F},{0xBA83, 0xB8EB},{0xBA84, 0xB8EC},{0xBA85, 0xB8ED},{0xBA86, 0x9170},
- {0xBA87, 0xB8EE},{0xBA88, 0x9171},{0xBA89, 0x9172},{0xBA8A, 0x9173},{0xBA8B, 0x9174},{0xBA8C, 0xB8EF},{0xBA8D, 0x9175},{0xBA8E, 0x9176},
- {0xBA8F, 0x9177},{0xBA90, 0x9178},{0xBA91, 0x9179},{0xBA92, 0x917A},{0xBA93, 0x9181},{0xBA94, 0x9182},{0xBA95, 0x9183},{0xBA96, 0x9184},
- {0xBA97, 0x9185},{0xBA98, 0x9186},{0xBA99, 0x9187},{0xBA9A, 0x9188},{0xBA9B, 0x9189},{0xBA9C, 0x918A},{0xBA9D, 0x918B},{0xBA9E, 0x918C},
- {0xBA9F, 0x918D},{0xBAA0, 0x918E},{0xBAA1, 0x918F},{0xBAA2, 0x9190},{0xBAA3, 0x9191},{0xBAA4, 0x9192},{0xBAA5, 0x9193},{0xBAA6, 0x9194},
- {0xBAA7, 0x9195},{0xBAA8, 0xB8F0},{0xBAA9, 0xB8F1},{0xBAAA, 0x9196},{0xBAAB, 0xB8F2},{0xBAAC, 0xB8F3},{0xBAAD, 0x9197},{0xBAAE, 0x9198},
- {0xBAAF, 0x9199},{0xBAB0, 0xB8F4},{0xBAB1, 0x919A},{0xBAB2, 0xB8F5},{0xBAB3, 0x919B},{0xBAB4, 0x919C},{0xBAB5, 0x919D},{0xBAB6, 0x919E},
- {0xBAB7, 0x919F},{0xBAB8, 0xB8F6},{0xBAB9, 0xB8F7},{0xBABA, 0x91A0},{0xBABB, 0xB8F8},{0xBABC, 0x91A1},{0xBABD, 0xB8F9},{0xBABE, 0x91A2},
- {0xBABF, 0x91A3},{0xBAC0, 0x91A4},{0xBAC1, 0x91A5},{0xBAC2, 0x91A6},{0xBAC3, 0x91A7},{0xBAC4, 0xB8FA},{0xBAC5, 0x91A8},{0xBAC6, 0x91A9},
- {0xBAC7, 0x91AA},{0xBAC8, 0xB8FB},{0xBAC9, 0x91AB},{0xBACA, 0x91AC},{0xBACB, 0x91AD},{0xBACC, 0x91AE},{0xBACD, 0x91AF},{0xBACE, 0x91B0},
- {0xBACF, 0x91B1},{0xBAD0, 0x91B2},{0xBAD1, 0x91B3},{0xBAD2, 0x91B4},{0xBAD3, 0x91B5},{0xBAD4, 0x91B6},{0xBAD5, 0x91B7},{0xBAD6, 0x91B8},
- {0xBAD7, 0x91B9},{0xBAD8, 0xB8FC},{0xBAD9, 0xB8FD},{0xBADA, 0x91BA},{0xBADB, 0x91BB},{0xBADC, 0x91BC},{0xBADD, 0x91BD},{0xBADE, 0x91BE},
- {0xBADF, 0x91BF},{0xBAE0, 0x91C0},{0xBAE1, 0x91C1},{0xBAE2, 0x91C2},{0xBAE3, 0x91C3},{0xBAE4, 0x91C4},{0xBAE5, 0x91C5},{0xBAE6, 0x91C6},
- {0xBAE7, 0x91C7},{0xBAE8, 0x91C8},{0xBAE9, 0x91C9},{0xBAEA, 0x91CA},{0xBAEB, 0x91CB},{0xBAEC, 0x91CC},{0xBAED, 0x91CD},{0xBAEE, 0x91CE},
- {0xBAEF, 0x91CF},{0xBAF0, 0x91D0},{0xBAF1, 0x91D1},{0xBAF2, 0x91D2},{0xBAF3, 0x91D3},{0xBAF4, 0x91D4},{0xBAF5, 0x91D5},{0xBAF6, 0x91D6},
- {0xBAF7, 0x91D7},{0xBAF8, 0x91D8},{0xBAF9, 0x91D9},{0xBAFA, 0x91DA},{0xBAFB, 0x91DB},{0xBAFC, 0xB8FE},{0xBAFD, 0x91DC},{0xBAFE, 0x91DD},
- {0xBAFF, 0x91DE},{0xBB00, 0xB9A1},{0xBB01, 0x91DF},{0xBB02, 0x91E0},{0xBB03, 0x91E1},{0xBB04, 0xB9A2},{0xBB05, 0x91E2},{0xBB06, 0x91E3},
- {0xBB07, 0x91E4},{0xBB08, 0x91E5},{0xBB09, 0x91E6},{0xBB0A, 0x91E7},{0xBB0B, 0x91E8},{0xBB0C, 0x91E9},{0xBB0D, 0xB9A3},{0xBB0E, 0x91EA},
- {0xBB0F, 0xB9A4},{0xBB10, 0x91EB},{0xBB11, 0xB9A5},{0xBB12, 0x91EC},{0xBB13, 0x91ED},{0xBB14, 0x91EE},{0xBB15, 0x91EF},{0xBB16, 0x91F0},
- {0xBB17, 0x91F1},{0xBB18, 0xB9A6},{0xBB19, 0x91F2},{0xBB1A, 0x91F3},{0xBB1B, 0x91F4},{0xBB1C, 0xB9A7},{0xBB1D, 0x91F5},{0xBB1E, 0x91F6},
- {0xBB1F, 0x91F7},{0xBB20, 0xB9A8},{0xBB21, 0x91F8},{0xBB22, 0x91F9},{0xBB23, 0x91FA},{0xBB24, 0x91FB},{0xBB25, 0x91FC},{0xBB26, 0x91FD},
- {0xBB27, 0x91FE},{0xBB28, 0x9241},{0xBB29, 0xB9A9},{0xBB2A, 0x9242},{0xBB2B, 0xB9AA},{0xBB2C, 0x9243},{0xBB2D, 0x9244},{0xBB2E, 0x9245},
- {0xBB2F, 0x9246},{0xBB30, 0x9247},{0xBB31, 0x9248},{0xBB32, 0x9249},{0xBB33, 0x924A},{0xBB34, 0xB9AB},{0xBB35, 0xB9AC},{0xBB36, 0xB9AD},
- {0xBB37, 0x924B},{0xBB38, 0xB9AE},{0xBB39, 0x924C},{0xBB3A, 0x924D},{0xBB3B, 0xB9AF},{0xBB3C, 0xB9B0},{0xBB3D, 0xB9B1},{0xBB3E, 0xB9B2},
- {0xBB3F, 0x924E},{0xBB40, 0x924F},{0xBB41, 0x9250},{0xBB42, 0x9251},{0xBB43, 0x9252},{0xBB44, 0xB9B3},{0xBB45, 0xB9B4},{0xBB46, 0x9253},
- {0xBB47, 0xB9B5},{0xBB48, 0x9254},{0xBB49, 0xB9B6},{0xBB4A, 0x9255},{0xBB4B, 0x9256},{0xBB4C, 0x9257},{0xBB4D, 0xB9B7},{0xBB4E, 0x9258},
- {0xBB4F, 0xB9B8},{0xBB50, 0xB9B9},{0xBB51, 0x9259},{0xBB52, 0x925A},{0xBB53, 0x9261},{0xBB54, 0xB9BA},{0xBB55, 0x9262},{0xBB56, 0x9263},
- {0xBB57, 0x9264},{0xBB58, 0xB9BB},{0xBB59, 0x9265},{0xBB5A, 0x9266},{0xBB5B, 0x9267},{0xBB5C, 0x9268},{0xBB5D, 0x9269},{0xBB5E, 0x926A},
- {0xBB5F, 0x926B},{0xBB60, 0x926C},{0xBB61, 0xB9BC},{0xBB62, 0x926D},{0xBB63, 0xB9BD},{0xBB64, 0x926E},{0xBB65, 0x926F},{0xBB66, 0x9270},
- {0xBB67, 0x9271},{0xBB68, 0x9272},{0xBB69, 0x9273},{0xBB6A, 0x9274},{0xBB6B, 0x9275},{0xBB6C, 0xB9BE},{0xBB6D, 0x9276},{0xBB6E, 0x9277},
- {0xBB6F, 0x9278},{0xBB70, 0x9279},{0xBB71, 0x927A},{0xBB72, 0x9281},{0xBB73, 0x9282},{0xBB74, 0x9283},{0xBB75, 0x9284},{0xBB76, 0x9285},
- {0xBB77, 0x9286},{0xBB78, 0x9287},{0xBB79, 0x9288},{0xBB7A, 0x9289},{0xBB7B, 0x928A},{0xBB7C, 0x928B},{0xBB7D, 0x928C},{0xBB7E, 0x928D},
- {0xBB7F, 0x928E},{0xBB80, 0x928F},{0xBB81, 0x9290},{0xBB82, 0x9291},{0xBB83, 0x9292},{0xBB84, 0x9293},{0xBB85, 0x9294},{0xBB86, 0x9295},
- {0xBB87, 0x9296},{0xBB88, 0xB9BF},{0xBB89, 0x9297},{0xBB8A, 0x9298},{0xBB8B, 0x9299},{0xBB8C, 0xB9C0},{0xBB8D, 0x929A},{0xBB8E, 0x929B},
- {0xBB8F, 0x929C},{0xBB90, 0xB9C1},{0xBB91, 0x929D},{0xBB92, 0x929E},{0xBB93, 0x929F},{0xBB94, 0x92A0},{0xBB95, 0x92A1},{0xBB96, 0x92A2},
- {0xBB97, 0x92A3},{0xBB98, 0x92A4},{0xBB99, 0x92A5},{0xBB9A, 0x92A6},{0xBB9B, 0x92A7},{0xBB9C, 0x92A8},{0xBB9D, 0x92A9},{0xBB9E, 0x92AA},
- {0xBB9F, 0x92AB},{0xBBA0, 0x92AC},{0xBBA1, 0x92AD},{0xBBA2, 0x92AE},{0xBBA3, 0x92AF},{0xBBA4, 0xB9C2},{0xBBA5, 0x92B0},{0xBBA6, 0x92B1},
- {0xBBA7, 0x92B2},{0xBBA8, 0xB9C3},{0xBBA9, 0x92B3},{0xBBAA, 0x92B4},{0xBBAB, 0x92B5},{0xBBAC, 0xB9C4},{0xBBAD, 0x92B6},{0xBBAE, 0x92B7},
- {0xBBAF, 0x92B8},{0xBBB0, 0x92B9},{0xBBB1, 0x92BA},{0xBBB2, 0x92BB},{0xBBB3, 0x92BC},{0xBBB4, 0xB9C5},{0xBBB5, 0x92BD},{0xBBB6, 0x92BE},
- {0xBBB7, 0xB9C6},{0xBBB8, 0x92BF},{0xBBB9, 0x92C0},{0xBBBA, 0x92C1},{0xBBBB, 0x92C2},{0xBBBC, 0x92C3},{0xBBBD, 0x92C4},{0xBBBE, 0x92C5},
- {0xBBBF, 0x92C6},{0xBBC0, 0xB9C7},{0xBBC1, 0x92C7},{0xBBC2, 0x92C8},{0xBBC3, 0x92C9},{0xBBC4, 0xB9C8},{0xBBC5, 0x92CA},{0xBBC6, 0x92CB},
- {0xBBC7, 0x92CC},{0xBBC8, 0xB9C9},{0xBBC9, 0x92CD},{0xBBCA, 0x92CE},{0xBBCB, 0x92CF},{0xBBCC, 0x92D0},{0xBBCD, 0x92D1},{0xBBCE, 0x92D2},
- {0xBBCF, 0x92D3},{0xBBD0, 0xB9CA},{0xBBD1, 0x92D4},{0xBBD2, 0x92D5},{0xBBD3, 0xB9CB},{0xBBD4, 0x92D6},{0xBBD5, 0x92D7},{0xBBD6, 0x92D8},
- {0xBBD7, 0x92D9},{0xBBD8, 0x92DA},{0xBBD9, 0x92DB},{0xBBDA, 0x92DC},{0xBBDB, 0x92DD},{0xBBDC, 0x92DE},{0xBBDD, 0x92DF},{0xBBDE, 0x92E0},
- {0xBBDF, 0x92E1},{0xBBE0, 0x92E2},{0xBBE1, 0x92E3},{0xBBE2, 0x92E4},{0xBBE3, 0x92E5},{0xBBE4, 0x92E6},{0xBBE5, 0x92E7},{0xBBE6, 0x92E8},
- {0xBBE7, 0x92E9},{0xBBE8, 0x92EA},{0xBBE9, 0x92EB},{0xBBEA, 0x92EC},{0xBBEB, 0x92ED},{0xBBEC, 0x92EE},{0xBBED, 0x92EF},{0xBBEE, 0x92F0},
- {0xBBEF, 0x92F1},{0xBBF0, 0x92F2},{0xBBF1, 0x92F3},{0xBBF2, 0x92F4},{0xBBF3, 0x92F5},{0xBBF4, 0x92F6},{0xBBF5, 0x92F7},{0xBBF6, 0x92F8},
- {0xBBF7, 0x92F9},{0xBBF8, 0xB9CC},{0xBBF9, 0xB9CD},{0xBBFA, 0x92FA},{0xBBFB, 0x92FB},{0xBBFC, 0xB9CE},{0xBBFD, 0x92FC},{0xBBFE, 0x92FD},
- {0xBBFF, 0xB9CF},{0xBC00, 0xB9D0},{0xBC01, 0x92FE},{0xBC02, 0xB9D1},{0xBC03, 0x9341},{0xBC04, 0x9342},{0xBC05, 0x9343},{0xBC06, 0x9344},
- {0xBC07, 0x9345},{0xBC08, 0xB9D2},{0xBC09, 0xB9D3},{0xBC0A, 0x9346},{0xBC0B, 0xB9D4},{0xBC0C, 0xB9D5},{0xBC0D, 0xB9D6},{0xBC0E, 0x9347},
- {0xBC0F, 0xB9D7},{0xBC10, 0x9348},{0xBC11, 0xB9D8},{0xBC12, 0x9349},{0xBC13, 0x934A},{0xBC14, 0xB9D9},{0xBC15, 0xB9DA},{0xBC16, 0xB9DB},
- {0xBC17, 0xB9DC},{0xBC18, 0xB9DD},{0xBC19, 0x934B},{0xBC1A, 0x934C},{0xBC1B, 0xB9DE},{0xBC1C, 0xB9DF},{0xBC1D, 0xB9E0},{0xBC1E, 0xB9E1},
- {0xBC1F, 0xB9E2},{0xBC20, 0x934D},{0xBC21, 0x934E},{0xBC22, 0x934F},{0xBC23, 0x9350},{0xBC24, 0xB9E3},{0xBC25, 0xB9E4},{0xBC26, 0x9351},
- {0xBC27, 0xB9E5},{0xBC28, 0x9352},{0xBC29, 0xB9E6},{0xBC2A, 0x9353},{0xBC2B, 0x9354},{0xBC2C, 0x9355},{0xBC2D, 0xB9E7},{0xBC2E, 0x9356},
- {0xBC2F, 0x9357},{0xBC30, 0xB9E8},{0xBC31, 0xB9E9},{0xBC32, 0x9358},{0xBC33, 0x9359},{0xBC34, 0xB9EA},{0xBC35, 0x935A},{0xBC36, 0x9361},
- {0xBC37, 0x9362},{0xBC38, 0xB9EB},{0xBC39, 0x9363},{0xBC3A, 0x9364},{0xBC3B, 0x9365},{0xBC3C, 0x9366},{0xBC3D, 0x9367},{0xBC3E, 0x9368},
- {0xBC3F, 0x9369},{0xBC40, 0xB9EC},{0xBC41, 0xB9ED},{0xBC42, 0x936A},{0xBC43, 0xB9EE},{0xBC44, 0xB9EF},{0xBC45, 0xB9F0},{0xBC46, 0x936B},
- {0xBC47, 0x936C},{0xBC48, 0x936D},{0xBC49, 0xB9F1},{0xBC4A, 0x936E},{0xBC4B, 0x936F},{0xBC4C, 0xB9F2},{0xBC4D, 0xB9F3},{0xBC4E, 0x9370},
- {0xBC4F, 0x9371},{0xBC50, 0xB9F4},{0xBC51, 0x9372},{0xBC52, 0x9373},{0xBC53, 0x9374},{0xBC54, 0x9375},{0xBC55, 0x9376},{0xBC56, 0x9377},
- {0xBC57, 0x9378},{0xBC58, 0x9379},{0xBC59, 0x937A},{0xBC5A, 0x9381},{0xBC5B, 0x9382},{0xBC5C, 0x9383},{0xBC5D, 0xB9F5},{0xBC5E, 0x9384},
- {0xBC5F, 0x9385},{0xBC60, 0x9386},{0xBC61, 0x9387},{0xBC62, 0x9388},{0xBC63, 0x9389},{0xBC64, 0x938A},{0xBC65, 0x938B},{0xBC66, 0x938C},
- {0xBC67, 0x938D},{0xBC68, 0x938E},{0xBC69, 0x938F},{0xBC6A, 0x9390},{0xBC6B, 0x9391},{0xBC6C, 0x9392},{0xBC6D, 0x9393},{0xBC6E, 0x9394},
- {0xBC6F, 0x9395},{0xBC70, 0x9396},{0xBC71, 0x9397},{0xBC72, 0x9398},{0xBC73, 0x9399},{0xBC74, 0x939A},{0xBC75, 0x939B},{0xBC76, 0x939C},
- {0xBC77, 0x939D},{0xBC78, 0x939E},{0xBC79, 0x939F},{0xBC7A, 0x93A0},{0xBC7B, 0x93A1},{0xBC7C, 0x93A2},{0xBC7D, 0x93A3},{0xBC7E, 0x93A4},
- {0xBC7F, 0x93A5},{0xBC80, 0x93A6},{0xBC81, 0x93A7},{0xBC82, 0x93A8},{0xBC83, 0x93A9},{0xBC84, 0xB9F6},{0xBC85, 0xB9F7},{0xBC86, 0x93AA},
- {0xBC87, 0x93AB},{0xBC88, 0xB9F8},{0xBC89, 0x93AC},{0xBC8A, 0x93AD},{0xBC8B, 0xB9F9},{0xBC8C, 0xB9FA},{0xBC8D, 0x93AE},{0xBC8E, 0xB9FB},
- {0xBC8F, 0x93AF},{0xBC90, 0x93B0},{0xBC91, 0x93B1},{0xBC92, 0x93B2},{0xBC93, 0x93B3},{0xBC94, 0xB9FC},{0xBC95, 0xB9FD},{0xBC96, 0x93B4},
- {0xBC97, 0xB9FE},{0xBC98, 0x93B5},{0xBC99, 0xBAA1},{0xBC9A, 0xBAA2},{0xBC9B, 0x93B6},{0xBC9C, 0x93B7},{0xBC9D, 0x93B8},{0xBC9E, 0x93B9},
- {0xBC9F, 0x93BA},{0xBCA0, 0xBAA3},{0xBCA1, 0xBAA4},{0xBCA2, 0x93BB},{0xBCA3, 0x93BC},{0xBCA4, 0xBAA5},{0xBCA5, 0x93BD},{0xBCA6, 0x93BE},
- {0xBCA7, 0xBAA6},{0xBCA8, 0xBAA7},{0xBCA9, 0x93BF},{0xBCAA, 0x93C0},{0xBCAB, 0x93C1},{0xBCAC, 0x93C2},{0xBCAD, 0x93C3},{0xBCAE, 0x93C4},
- {0xBCAF, 0x93C5},{0xBCB0, 0xBAA8},{0xBCB1, 0xBAA9},{0xBCB2, 0x93C6},{0xBCB3, 0xBAAA},{0xBCB4, 0xBAAB},{0xBCB5, 0xBAAC},{0xBCB6, 0x93C7},
- {0xBCB7, 0x93C8},{0xBCB8, 0x93C9},{0xBCB9, 0x93CA},{0xBCBA, 0x93CB},{0xBCBB, 0x93CC},{0xBCBC, 0xBAAD},{0xBCBD, 0xBAAE},{0xBCBE, 0x93CD},
- {0xBCBF, 0x93CE},{0xBCC0, 0xBAAF},{0xBCC1, 0x93CF},{0xBCC2, 0x93D0},{0xBCC3, 0x93D1},{0xBCC4, 0xBAB0},{0xBCC5, 0x93D2},{0xBCC6, 0x93D3},
- {0xBCC7, 0x93D4},{0xBCC8, 0x93D5},{0xBCC9, 0x93D6},{0xBCCA, 0x93D7},{0xBCCB, 0x93D8},{0xBCCC, 0x93D9},{0xBCCD, 0xBAB1},{0xBCCE, 0x93DA},
- {0xBCCF, 0xBAB2},{0xBCD0, 0xBAB3},{0xBCD1, 0xBAB4},{0xBCD2, 0x93DB},{0xBCD3, 0x93DC},{0xBCD4, 0x93DD},{0xBCD5, 0xBAB5},{0xBCD6, 0x93DE},
- {0xBCD7, 0x93DF},{0xBCD8, 0xBAB6},{0xBCD9, 0x93E0},{0xBCDA, 0x93E1},{0xBCDB, 0x93E2},{0xBCDC, 0xBAB7},{0xBCDD, 0x93E3},{0xBCDE, 0x93E4},
- {0xBCDF, 0x93E5},{0xBCE0, 0x93E6},{0xBCE1, 0x93E7},{0xBCE2, 0x93E8},{0xBCE3, 0x93E9},{0xBCE4, 0x93EA},{0xBCE5, 0x93EB},{0xBCE6, 0x93EC},
- {0xBCE7, 0x93ED},{0xBCE8, 0x93EE},{0xBCE9, 0x93EF},{0xBCEA, 0x93F0},{0xBCEB, 0x93F1},{0xBCEC, 0x93F2},{0xBCED, 0x93F3},{0xBCEE, 0x93F4},
- {0xBCEF, 0x93F5},{0xBCF0, 0x93F6},{0xBCF1, 0x93F7},{0xBCF2, 0x93F8},{0xBCF3, 0x93F9},{0xBCF4, 0xBAB8},{0xBCF5, 0xBAB9},{0xBCF6, 0xBABA},
- {0xBCF7, 0x93FA},{0xBCF8, 0xBABB},{0xBCF9, 0x93FB},{0xBCFA, 0x93FC},{0xBCFB, 0x93FD},{0xBCFC, 0xBABC},{0xBCFD, 0x93FE},{0xBCFE, 0x9441},
- {0xBCFF, 0x9442},{0xBD00, 0x9443},{0xBD01, 0x9444},{0xBD02, 0x9445},{0xBD03, 0x9446},{0xBD04, 0xBABD},{0xBD05, 0xBABE},{0xBD06, 0x9447},
- {0xBD07, 0xBABF},{0xBD08, 0x9448},{0xBD09, 0xBAC0},{0xBD0A, 0x9449},{0xBD0B, 0x944A},{0xBD0C, 0x944B},{0xBD0D, 0x944C},{0xBD0E, 0x944D},
- {0xBD0F, 0x944E},{0xBD10, 0xBAC1},{0xBD11, 0x944F},{0xBD12, 0x9450},{0xBD13, 0x9451},{0xBD14, 0xBAC2},{0xBD15, 0x9452},{0xBD16, 0x9453},
- {0xBD17, 0x9454},{0xBD18, 0x9455},{0xBD19, 0x9456},{0xBD1A, 0x9457},{0xBD1B, 0x9458},{0xBD1C, 0x9459},{0xBD1D, 0x945A},{0xBD1E, 0x9461},
- {0xBD1F, 0x9462},{0xBD20, 0x9463},{0xBD21, 0x9464},{0xBD22, 0x9465},{0xBD23, 0x9466},{0xBD24, 0xBAC3},{0xBD25, 0x9467},{0xBD26, 0x9468},
- {0xBD27, 0x9469},{0xBD28, 0x946A},{0xBD29, 0x946B},{0xBD2A, 0x946C},{0xBD2B, 0x946D},{0xBD2C, 0xBAC4},{0xBD2D, 0x946E},{0xBD2E, 0x946F},
- {0xBD2F, 0x9470},{0xBD30, 0x9471},{0xBD31, 0x9472},{0xBD32, 0x9473},{0xBD33, 0x9474},{0xBD34, 0x9475},{0xBD35, 0x9476},{0xBD36, 0x9477},
- {0xBD37, 0x9478},{0xBD38, 0x9479},{0xBD39, 0x947A},{0xBD3A, 0x9481},{0xBD3B, 0x9482},{0xBD3C, 0x9483},{0xBD3D, 0x9484},{0xBD3E, 0x9485},
- {0xBD3F, 0x9486},{0xBD40, 0xBAC5},{0xBD41, 0x9487},{0xBD42, 0x9488},{0xBD43, 0x9489},{0xBD44, 0x948A},{0xBD45, 0x948B},{0xBD46, 0x948C},
- {0xBD47, 0x948D},{0xBD48, 0xBAC6},{0xBD49, 0xBAC7},{0xBD4A, 0x948E},{0xBD4B, 0x948F},{0xBD4C, 0xBAC8},{0xBD4D, 0x9490},{0xBD4E, 0x9491},
- {0xBD4F, 0x9492},{0xBD50, 0xBAC9},{0xBD51, 0x9493},{0xBD52, 0x9494},{0xBD53, 0x9495},{0xBD54, 0x9496},{0xBD55, 0x9497},{0xBD56, 0x9498},
- {0xBD57, 0x9499},{0xBD58, 0xBACA},{0xBD59, 0xBACB},{0xBD5A, 0x949A},{0xBD5B, 0x949B},{0xBD5C, 0x949C},{0xBD5D, 0x949D},{0xBD5E, 0x949E},
- {0xBD5F, 0x949F},{0xBD60, 0x94A0},{0xBD61, 0x94A1},{0xBD62, 0x94A2},{0xBD63, 0x94A3},{0xBD64, 0xBACC},{0xBD65, 0x94A4},{0xBD66, 0x94A5},
- {0xBD67, 0x94A6},{0xBD68, 0xBACD},{0xBD69, 0x94A7},{0xBD6A, 0x94A8},{0xBD6B, 0x94A9},{0xBD6C, 0x94AA},{0xBD6D, 0x94AB},{0xBD6E, 0x94AC},
- {0xBD6F, 0x94AD},{0xBD70, 0x94AE},{0xBD71, 0x94AF},{0xBD72, 0x94B0},{0xBD73, 0x94B1},{0xBD74, 0x94B2},{0xBD75, 0x94B3},{0xBD76, 0x94B4},
- {0xBD77, 0x94B5},{0xBD78, 0x94B6},{0xBD79, 0x94B7},{0xBD7A, 0x94B8},{0xBD7B, 0x94B9},{0xBD7C, 0x94BA},{0xBD7D, 0x94BB},{0xBD7E, 0x94BC},
- {0xBD7F, 0x94BD},{0xBD80, 0xBACE},{0xBD81, 0xBACF},{0xBD82, 0x94BE},{0xBD83, 0x94BF},{0xBD84, 0xBAD0},{0xBD85, 0x94C0},{0xBD86, 0x94C1},
- {0xBD87, 0xBAD1},{0xBD88, 0xBAD2},{0xBD89, 0xBAD3},{0xBD8A, 0xBAD4},{0xBD8B, 0x94C2},{0xBD8C, 0x94C3},{0xBD8D, 0x94C4},{0xBD8E, 0x94C5},
- {0xBD8F, 0x94C6},{0xBD90, 0xBAD5},{0xBD91, 0xBAD6},{0xBD92, 0x94C7},{0xBD93, 0xBAD7},{0xBD94, 0x94C8},{0xBD95, 0xBAD8},{0xBD96, 0x94C9},
- {0xBD97, 0x94CA},{0xBD98, 0x94CB},{0xBD99, 0xBAD9},{0xBD9A, 0xBADA},{0xBD9B, 0x94CC},{0xBD9C, 0xBADB},{0xBD9D, 0x94CD},{0xBD9E, 0x94CE},
- {0xBD9F, 0x94CF},{0xBDA0, 0x94D0},{0xBDA1, 0x94D1},{0xBDA2, 0x94D2},{0xBDA3, 0x94D3},{0xBDA4, 0xBADC},{0xBDA5, 0x94D4},{0xBDA6, 0x94D5},
- {0xBDA7, 0x94D6},{0xBDA8, 0x94D7},{0xBDA9, 0x94D8},{0xBDAA, 0x94D9},{0xBDAB, 0x94DA},{0xBDAC, 0x94DB},{0xBDAD, 0x94DC},{0xBDAE, 0x94DD},
- {0xBDAF, 0x94DE},{0xBDB0, 0xBADD},{0xBDB1, 0x94DF},{0xBDB2, 0x94E0},{0xBDB3, 0x94E1},{0xBDB4, 0x94E2},{0xBDB5, 0x94E3},{0xBDB6, 0x94E4},
- {0xBDB7, 0x94E5},{0xBDB8, 0xBADE},{0xBDB9, 0x94E6},{0xBDBA, 0x94E7},{0xBDBB, 0x94E8},{0xBDBC, 0x94E9},{0xBDBD, 0x94EA},{0xBDBE, 0x94EB},
- {0xBDBF, 0x94EC},{0xBDC0, 0x94ED},{0xBDC1, 0x94EE},{0xBDC2, 0x94EF},{0xBDC3, 0x94F0},{0xBDC4, 0x94F1},{0xBDC5, 0x94F2},{0xBDC6, 0x94F3},
- {0xBDC7, 0x94F4},{0xBDC8, 0x94F5},{0xBDC9, 0x94F6},{0xBDCA, 0x94F7},{0xBDCB, 0x94F8},{0xBDCC, 0x94F9},{0xBDCD, 0x94FA},{0xBDCE, 0x94FB},
- {0xBDCF, 0x94FC},{0xBDD0, 0x94FD},{0xBDD1, 0x94FE},{0xBDD2, 0x9541},{0xBDD3, 0x9542},{0xBDD4, 0xBADF},{0xBDD5, 0xBAE0},{0xBDD6, 0x9543},
- {0xBDD7, 0x9544},{0xBDD8, 0xBAE1},{0xBDD9, 0x9545},{0xBDDA, 0x9546},{0xBDDB, 0x9547},{0xBDDC, 0xBAE2},{0xBDDD, 0x9548},{0xBDDE, 0x9549},
- {0xBDDF, 0x954A},{0xBDE0, 0x954B},{0xBDE1, 0x954C},{0xBDE2, 0x954D},{0xBDE3, 0x954E},{0xBDE4, 0x954F},{0xBDE5, 0x9550},{0xBDE6, 0x9551},
- {0xBDE7, 0x9552},{0xBDE8, 0x9553},{0xBDE9, 0xBAE3},{0xBDEA, 0x9554},{0xBDEB, 0x9555},{0xBDEC, 0x9556},{0xBDED, 0x9557},{0xBDEE, 0x9558},
- {0xBDEF, 0x9559},{0xBDF0, 0xBAE4},{0xBDF1, 0x955A},{0xBDF2, 0x9561},{0xBDF3, 0x9562},{0xBDF4, 0xBAE5},{0xBDF5, 0x9563},{0xBDF6, 0x9564},
- {0xBDF7, 0x9565},{0xBDF8, 0xBAE6},{0xBDF9, 0x9566},{0xBDFA, 0x9567},{0xBDFB, 0x9568},{0xBDFC, 0x9569},{0xBDFD, 0x956A},{0xBDFE, 0x956B},
- {0xBDFF, 0x956C},{0xBE00, 0xBAE7},{0xBE01, 0x956D},{0xBE02, 0x956E},{0xBE03, 0xBAE8},{0xBE04, 0x956F},{0xBE05, 0xBAE9},{0xBE06, 0x9570},
- {0xBE07, 0x9571},{0xBE08, 0x9572},{0xBE09, 0x9573},{0xBE0A, 0x9574},{0xBE0B, 0x9575},{0xBE0C, 0xBAEA},{0xBE0D, 0xBAEB},{0xBE0E, 0x9576},
- {0xBE0F, 0x9577},{0xBE10, 0xBAEC},{0xBE11, 0x9578},{0xBE12, 0x9579},{0xBE13, 0x957A},{0xBE14, 0xBAED},{0xBE15, 0x9581},{0xBE16, 0x9582},
- {0xBE17, 0x9583},{0xBE18, 0x9584},{0xBE19, 0x9585},{0xBE1A, 0x9586},{0xBE1B, 0x9587},{0xBE1C, 0xBAEE},{0xBE1D, 0xBAEF},{0xBE1E, 0x9588},
- {0xBE1F, 0xBAF0},{0xBE20, 0x9589},{0xBE21, 0x958A},{0xBE22, 0x958B},{0xBE23, 0x958C},{0xBE24, 0x958D},{0xBE25, 0x958E},{0xBE26, 0x958F},
- {0xBE27, 0x9590},{0xBE28, 0x9591},{0xBE29, 0x9592},{0xBE2A, 0x9593},{0xBE2B, 0x9594},{0xBE2C, 0x9595},{0xBE2D, 0x9596},{0xBE2E, 0x9597},
- {0xBE2F, 0x9598},{0xBE30, 0x9599},{0xBE31, 0x959A},{0xBE32, 0x959B},{0xBE33, 0x959C},{0xBE34, 0x959D},{0xBE35, 0x959E},{0xBE36, 0x959F},
- {0xBE37, 0x95A0},{0xBE38, 0x95A1},{0xBE39, 0x95A2},{0xBE3A, 0x95A3},{0xBE3B, 0x95A4},{0xBE3C, 0x95A5},{0xBE3D, 0x95A6},{0xBE3E, 0x95A7},
- {0xBE3F, 0x95A8},{0xBE40, 0x95A9},{0xBE41, 0x95AA},{0xBE42, 0x95AB},{0xBE43, 0x95AC},{0xBE44, 0xBAF1},{0xBE45, 0xBAF2},{0xBE46, 0x95AD},
- {0xBE47, 0x95AE},{0xBE48, 0xBAF3},{0xBE49, 0x95AF},{0xBE4A, 0x95B0},{0xBE4B, 0x95B1},{0xBE4C, 0xBAF4},{0xBE4D, 0x95B2},{0xBE4E, 0xBAF5},
- {0xBE4F, 0x95B3},{0xBE50, 0x95B4},{0xBE51, 0x95B5},{0xBE52, 0x95B6},{0xBE53, 0x95B7},{0xBE54, 0xBAF6},{0xBE55, 0xBAF7},{0xBE56, 0x95B8},
- {0xBE57, 0xBAF8},{0xBE58, 0x95B9},{0xBE59, 0xBAF9},{0xBE5A, 0xBAFA},{0xBE5B, 0xBAFB},{0xBE5C, 0x95BA},{0xBE5D, 0x95BB},{0xBE5E, 0x95BC},
- {0xBE5F, 0x95BD},{0xBE60, 0xBAFC},{0xBE61, 0xBAFD},{0xBE62, 0x95BE},{0xBE63, 0x95BF},{0xBE64, 0xBAFE},{0xBE65, 0x95C0},{0xBE66, 0x95C1},
- {0xBE67, 0x95C2},{0xBE68, 0xBBA1},{0xBE69, 0x95C3},{0xBE6A, 0xBBA2},{0xBE6B, 0x95C4},{0xBE6C, 0x95C5},{0xBE6D, 0x95C6},{0xBE6E, 0x95C7},
- {0xBE6F, 0x95C8},{0xBE70, 0xBBA3},{0xBE71, 0xBBA4},{0xBE72, 0x95C9},{0xBE73, 0xBBA5},{0xBE74, 0xBBA6},{0xBE75, 0xBBA7},{0xBE76, 0x95CA},
- {0xBE77, 0x95CB},{0xBE78, 0x95CC},{0xBE79, 0x95CD},{0xBE7A, 0x95CE},{0xBE7B, 0xBBA8},{0xBE7C, 0xBBA9},{0xBE7D, 0xBBAA},{0xBE7E, 0x95CF},
- {0xBE7F, 0x95D0},{0xBE80, 0xBBAB},{0xBE81, 0x95D1},{0xBE82, 0x95D2},{0xBE83, 0x95D3},{0xBE84, 0xBBAC},{0xBE85, 0x95D4},{0xBE86, 0x95D5},
- {0xBE87, 0x95D6},{0xBE88, 0x95D7},{0xBE89, 0x95D8},{0xBE8A, 0x95D9},{0xBE8B, 0x95DA},{0xBE8C, 0xBBAD},{0xBE8D, 0xBBAE},{0xBE8E, 0x95DB},
- {0xBE8F, 0xBBAF},{0xBE90, 0xBBB0},{0xBE91, 0xBBB1},{0xBE92, 0x95DC},{0xBE93, 0x95DD},{0xBE94, 0x95DE},{0xBE95, 0x95DF},{0xBE96, 0x95E0},
- {0xBE97, 0x95E1},{0xBE98, 0xBBB2},{0xBE99, 0xBBB3},{0xBE9A, 0x95E2},{0xBE9B, 0x95E3},{0xBE9C, 0x95E4},{0xBE9D, 0x95E5},{0xBE9E, 0x95E6},
- {0xBE9F, 0x95E7},{0xBEA0, 0x95E8},{0xBEA1, 0x95E9},{0xBEA2, 0x95EA},{0xBEA3, 0x95EB},{0xBEA4, 0x95EC},{0xBEA5, 0x95ED},{0xBEA6, 0x95EE},
- {0xBEA7, 0x95EF},{0xBEA8, 0xBBB4},{0xBEA9, 0x95F0},{0xBEAA, 0x95F1},{0xBEAB, 0x95F2},{0xBEAC, 0x95F3},{0xBEAD, 0x95F4},{0xBEAE, 0x95F5},
- {0xBEAF, 0x95F6},{0xBEB0, 0x95F7},{0xBEB1, 0x95F8},{0xBEB2, 0x95F9},{0xBEB3, 0x95FA},{0xBEB4, 0x95FB},{0xBEB5, 0x95FC},{0xBEB6, 0x95FD},
- {0xBEB7, 0x95FE},{0xBEB8, 0x9641},{0xBEB9, 0x9642},{0xBEBA, 0x9643},{0xBEBB, 0x9644},{0xBEBC, 0x9645},{0xBEBD, 0x9646},{0xBEBE, 0x9647},
- {0xBEBF, 0x9648},{0xBEC0, 0x9649},{0xBEC1, 0x964A},{0xBEC2, 0x964B},{0xBEC3, 0x964C},{0xBEC4, 0x964D},{0xBEC5, 0x964E},{0xBEC6, 0x964F},
- {0xBEC7, 0x9650},{0xBEC8, 0x9651},{0xBEC9, 0x9652},{0xBECA, 0x9653},{0xBECB, 0x9654},{0xBECC, 0x9655},{0xBECD, 0x9656},{0xBECE, 0x9657},
- {0xBECF, 0x9658},{0xBED0, 0xBBB5},{0xBED1, 0xBBB6},{0xBED2, 0x9659},{0xBED3, 0x965A},{0xBED4, 0xBBB7},{0xBED5, 0x9661},{0xBED6, 0x9662},
- {0xBED7, 0xBBB8},{0xBED8, 0xBBB9},{0xBED9, 0x9663},{0xBEDA, 0x9664},{0xBEDB, 0x9665},{0xBEDC, 0x9666},{0xBEDD, 0x9667},{0xBEDE, 0x9668},
- {0xBEDF, 0x9669},{0xBEE0, 0xBBBA},{0xBEE1, 0x966A},{0xBEE2, 0x966B},{0xBEE3, 0xBBBB},{0xBEE4, 0xBBBC},{0xBEE5, 0xBBBD},{0xBEE6, 0x966C},
- {0xBEE7, 0x966D},{0xBEE8, 0x966E},{0xBEE9, 0x966F},{0xBEEA, 0x9670},{0xBEEB, 0x9671},{0xBEEC, 0xBBBE},{0xBEED, 0x9672},{0xBEEE, 0x9673},
- {0xBEEF, 0x9674},{0xBEF0, 0x9675},{0xBEF1, 0x9676},{0xBEF2, 0x9677},{0xBEF3, 0x9678},{0xBEF4, 0x9679},{0xBEF5, 0x967A},{0xBEF6, 0x9681},
- {0xBEF7, 0x9682},{0xBEF8, 0x9683},{0xBEF9, 0x9684},{0xBEFA, 0x9685},{0xBEFB, 0x9686},{0xBEFC, 0x9687},{0xBEFD, 0x9688},{0xBEFE, 0x9689},
- {0xBEFF, 0x968A},{0xBF00, 0x968B},{0xBF01, 0xBBBF},{0xBF02, 0x968C},{0xBF03, 0x968D},{0xBF04, 0x968E},{0xBF05, 0x968F},{0xBF06, 0x9690},
- {0xBF07, 0x9691},{0xBF08, 0xBBC0},{0xBF09, 0xBBC1},{0xBF0A, 0x9692},{0xBF0B, 0x9693},{0xBF0C, 0x9694},{0xBF0D, 0x9695},{0xBF0E, 0x9696},
- {0xBF0F, 0x9697},{0xBF10, 0x9698},{0xBF11, 0x9699},{0xBF12, 0x969A},{0xBF13, 0x969B},{0xBF14, 0x969C},{0xBF15, 0x969D},{0xBF16, 0x969E},
- {0xBF17, 0x969F},{0xBF18, 0xBBC2},{0xBF19, 0xBBC3},{0xBF1A, 0x96A0},{0xBF1B, 0xBBC4},{0xBF1C, 0xBBC5},{0xBF1D, 0xBBC6},{0xBF1E, 0x96A1},
- {0xBF1F, 0x96A2},{0xBF20, 0x96A3},{0xBF21, 0x96A4},{0xBF22, 0x96A5},{0xBF23, 0x96A6},{0xBF24, 0x96A7},{0xBF25, 0x96A8},{0xBF26, 0x96A9},
- {0xBF27, 0x96AA},{0xBF28, 0x96AB},{0xBF29, 0x96AC},{0xBF2A, 0x96AD},{0xBF2B, 0x96AE},{0xBF2C, 0x96AF},{0xBF2D, 0x96B0},{0xBF2E, 0x96B1},
- {0xBF2F, 0x96B2},{0xBF30, 0x96B3},{0xBF31, 0x96B4},{0xBF32, 0x96B5},{0xBF33, 0x96B6},{0xBF34, 0x96B7},{0xBF35, 0x96B8},{0xBF36, 0x96B9},
- {0xBF37, 0x96BA},{0xBF38, 0x96BB},{0xBF39, 0x96BC},{0xBF3A, 0x96BD},{0xBF3B, 0x96BE},{0xBF3C, 0x96BF},{0xBF3D, 0x96C0},{0xBF3E, 0x96C1},
- {0xBF3F, 0x96C2},{0xBF40, 0xBBC7},{0xBF41, 0xBBC8},{0xBF42, 0x96C3},{0xBF43, 0x96C4},{0xBF44, 0xBBC9},{0xBF45, 0x96C5},{0xBF46, 0x96C6},
- {0xBF47, 0x96C7},{0xBF48, 0xBBCA},{0xBF49, 0x96C8},{0xBF4A, 0x96C9},{0xBF4B, 0x96CA},{0xBF4C, 0x96CB},{0xBF4D, 0x96CC},{0xBF4E, 0x96CD},
- {0xBF4F, 0x96CE},{0xBF50, 0xBBCB},{0xBF51, 0xBBCC},{0xBF52, 0x96CF},{0xBF53, 0x96D0},{0xBF54, 0x96D1},{0xBF55, 0xBBCD},{0xBF56, 0x96D2},
- {0xBF57, 0x96D3},{0xBF58, 0x96D4},{0xBF59, 0x96D5},{0xBF5A, 0x96D6},{0xBF5B, 0x96D7},{0xBF5C, 0x96D8},{0xBF5D, 0x96D9},{0xBF5E, 0x96DA},
- {0xBF5F, 0x96DB},{0xBF60, 0x96DC},{0xBF61, 0x96DD},{0xBF62, 0x96DE},{0xBF63, 0x96DF},{0xBF64, 0x96E0},{0xBF65, 0x96E1},{0xBF66, 0x96E2},
- {0xBF67, 0x96E3},{0xBF68, 0x96E4},{0xBF69, 0x96E5},{0xBF6A, 0x96E6},{0xBF6B, 0x96E7},{0xBF6C, 0x96E8},{0xBF6D, 0x96E9},{0xBF6E, 0x96EA},
- {0xBF6F, 0x96EB},{0xBF70, 0x96EC},{0xBF71, 0x96ED},{0xBF72, 0x96EE},{0xBF73, 0x96EF},{0xBF74, 0x96F0},{0xBF75, 0x96F1},{0xBF76, 0x96F2},
- {0xBF77, 0x96F3},{0xBF78, 0x96F4},{0xBF79, 0x96F5},{0xBF7A, 0x96F6},{0xBF7B, 0x96F7},{0xBF7C, 0x96F8},{0xBF7D, 0x96F9},{0xBF7E, 0x96FA},
- {0xBF7F, 0x96FB},{0xBF80, 0x96FC},{0xBF81, 0x96FD},{0xBF82, 0x96FE},{0xBF83, 0x9741},{0xBF84, 0x9742},{0xBF85, 0x9743},{0xBF86, 0x9744},
- {0xBF87, 0x9745},{0xBF88, 0x9746},{0xBF89, 0x9747},{0xBF8A, 0x9748},{0xBF8B, 0x9749},{0xBF8C, 0x974A},{0xBF8D, 0x974B},{0xBF8E, 0x974C},
- {0xBF8F, 0x974D},{0xBF90, 0x974E},{0xBF91, 0x974F},{0xBF92, 0x9750},{0xBF93, 0x9751},{0xBF94, 0xBBCE},{0xBF95, 0x9752},{0xBF96, 0x9753},
- {0xBF97, 0x9754},{0xBF98, 0x9755},{0xBF99, 0x9756},{0xBF9A, 0x9757},{0xBF9B, 0x9758},{0xBF9C, 0x9759},{0xBF9D, 0x975A},{0xBF9E, 0x9761},
- {0xBF9F, 0x9762},{0xBFA0, 0x9763},{0xBFA1, 0x9764},{0xBFA2, 0x9765},{0xBFA3, 0x9766},{0xBFA4, 0x9767},{0xBFA5, 0x9768},{0xBFA6, 0x9769},
- {0xBFA7, 0x976A},{0xBFA8, 0x976B},{0xBFA9, 0x976C},{0xBFAA, 0x976D},{0xBFAB, 0x976E},{0xBFAC, 0x976F},{0xBFAD, 0x9770},{0xBFAE, 0x9771},
- {0xBFAF, 0x9772},{0xBFB0, 0xBBCF},{0xBFB1, 0x9773},{0xBFB2, 0x9774},{0xBFB3, 0x9775},{0xBFB4, 0x9776},{0xBFB5, 0x9777},{0xBFB6, 0x9778},
- {0xBFB7, 0x9779},{0xBFB8, 0x977A},{0xBFB9, 0x9781},{0xBFBA, 0x9782},{0xBFBB, 0x9783},{0xBFBC, 0x9784},{0xBFBD, 0x9785},{0xBFBE, 0x9786},
- {0xBFBF, 0x9787},{0xBFC0, 0x9788},{0xBFC1, 0x9789},{0xBFC2, 0x978A},{0xBFC3, 0x978B},{0xBFC4, 0x978C},{0xBFC5, 0xBBD0},{0xBFC6, 0x978D},
- {0xBFC7, 0x978E},{0xBFC8, 0x978F},{0xBFC9, 0x9790},{0xBFCA, 0x9791},{0xBFCB, 0x9792},{0xBFCC, 0xBBD1},{0xBFCD, 0xBBD2},{0xBFCE, 0x9793},
- {0xBFCF, 0x9794},{0xBFD0, 0xBBD3},{0xBFD1, 0x9795},{0xBFD2, 0x9796},{0xBFD3, 0x9797},{0xBFD4, 0xBBD4},{0xBFD5, 0x9798},{0xBFD6, 0x9799},
- {0xBFD7, 0x979A},{0xBFD8, 0x979B},{0xBFD9, 0x979C},{0xBFDA, 0x979D},{0xBFDB, 0x979E},{0xBFDC, 0xBBD5},{0xBFDD, 0x979F},{0xBFDE, 0x97A0},
- {0xBFDF, 0xBBD6},{0xBFE0, 0x97A1},{0xBFE1, 0xBBD7},{0xBFE2, 0x97A2},{0xBFE3, 0x97A3},{0xBFE4, 0x97A4},{0xBFE5, 0x97A5},{0xBFE6, 0x97A6},
- {0xBFE7, 0x97A7},{0xBFE8, 0x97A8},{0xBFE9, 0x97A9},{0xBFEA, 0x97AA},{0xBFEB, 0x97AB},{0xBFEC, 0x97AC},{0xBFED, 0x97AD},{0xBFEE, 0x97AE},
- {0xBFEF, 0x97AF},{0xBFF0, 0x97B0},{0xBFF1, 0x97B1},{0xBFF2, 0x97B2},{0xBFF3, 0x97B3},{0xBFF4, 0x97B4},{0xBFF5, 0x97B5},{0xBFF6, 0x97B6},
- {0xBFF7, 0x97B7},{0xBFF8, 0x97B8},{0xBFF9, 0x97B9},{0xBFFA, 0x97BA},{0xBFFB, 0x97BB},{0xBFFC, 0x97BC},{0xBFFD, 0x97BD},{0xBFFE, 0x97BE},
- {0xBFFF, 0x97BF},{0xC000, 0x97C0},{0xC001, 0x97C1},{0xC002, 0x97C2},{0xC003, 0x97C3},{0xC004, 0x97C4},{0xC005, 0x97C5},{0xC006, 0x97C6},
- {0xC007, 0x97C7},{0xC008, 0x97C8},{0xC009, 0x97C9},{0xC00A, 0x97CA},{0xC00B, 0x97CB},{0xC00C, 0x97CC},{0xC00D, 0x97CD},{0xC00E, 0x97CE},
- {0xC00F, 0x97CF},{0xC010, 0x97D0},{0xC011, 0x97D1},{0xC012, 0x97D2},{0xC013, 0x97D3},{0xC014, 0x97D4},{0xC015, 0x97D5},{0xC016, 0x97D6},
- {0xC017, 0x97D7},{0xC018, 0x97D8},{0xC019, 0x97D9},{0xC01A, 0x97DA},{0xC01B, 0x97DB},{0xC01C, 0x97DC},{0xC01D, 0x97DD},{0xC01E, 0x97DE},
- {0xC01F, 0x97DF},{0xC020, 0x97E0},{0xC021, 0x97E1},{0xC022, 0x97E2},{0xC023, 0x97E3},{0xC024, 0x97E4},{0xC025, 0x97E5},{0xC026, 0x97E6},
- {0xC027, 0x97E7},{0xC028, 0x97E8},{0xC029, 0x97E9},{0xC02A, 0x97EA},{0xC02B, 0x97EB},{0xC02C, 0x97EC},{0xC02D, 0x97ED},{0xC02E, 0x97EE},
- {0xC02F, 0x97EF},{0xC030, 0x97F0},{0xC031, 0x97F1},{0xC032, 0x97F2},{0xC033, 0x97F3},{0xC034, 0x97F4},{0xC035, 0x97F5},{0xC036, 0x97F6},
- {0xC037, 0x97F7},{0xC038, 0x97F8},{0xC039, 0x97F9},{0xC03A, 0x97FA},{0xC03B, 0x97FB},{0xC03C, 0xBBD8},{0xC03D, 0x97FC},{0xC03E, 0x97FD},
- {0xC03F, 0x97FE},{0xC040, 0x9841},{0xC041, 0x9842},{0xC042, 0x9843},{0xC043, 0x9844},{0xC044, 0x9845},{0xC045, 0x9846},{0xC046, 0x9847},
- {0xC047, 0x9848},{0xC048, 0x9849},{0xC049, 0x984A},{0xC04A, 0x984B},{0xC04B, 0x984C},{0xC04C, 0x984D},{0xC04D, 0x984E},{0xC04E, 0x984F},
- {0xC04F, 0x9850},{0xC050, 0x9851},{0xC051, 0xBBD9},{0xC052, 0x9852},{0xC053, 0x9853},{0xC054, 0x9854},{0xC055, 0x9855},{0xC056, 0x9856},
- {0xC057, 0x9857},{0xC058, 0xBBDA},{0xC059, 0x9858},{0xC05A, 0x9859},{0xC05B, 0x985A},{0xC05C, 0xBBDB},{0xC05D, 0x9861},{0xC05E, 0x9862},
- {0xC05F, 0x9863},{0xC060, 0xBBDC},{0xC061, 0x9864},{0xC062, 0x9865},{0xC063, 0x9866},{0xC064, 0x9867},{0xC065, 0x9868},{0xC066, 0x9869},
- {0xC067, 0x986A},{0xC068, 0xBBDD},{0xC069, 0xBBDE},{0xC06A, 0x986B},{0xC06B, 0x986C},{0xC06C, 0x986D},{0xC06D, 0x986E},{0xC06E, 0x986F},
- {0xC06F, 0x9870},{0xC070, 0x9871},{0xC071, 0x9872},{0xC072, 0x9873},{0xC073, 0x9874},{0xC074, 0x9875},{0xC075, 0x9876},{0xC076, 0x9877},
- {0xC077, 0x9878},{0xC078, 0x9879},{0xC079, 0x987A},{0xC07A, 0x9881},{0xC07B, 0x9882},{0xC07C, 0x9883},{0xC07D, 0x9884},{0xC07E, 0x9885},
- {0xC07F, 0x9886},{0xC080, 0x9887},{0xC081, 0x9888},{0xC082, 0x9889},{0xC083, 0x988A},{0xC084, 0x988B},{0xC085, 0x988C},{0xC086, 0x988D},
- {0xC087, 0x988E},{0xC088, 0x988F},{0xC089, 0x9890},{0xC08A, 0x9891},{0xC08B, 0x9892},{0xC08C, 0x9893},{0xC08D, 0x9894},{0xC08E, 0x9895},
- {0xC08F, 0x9896},{0xC090, 0xBBDF},{0xC091, 0xBBE0},{0xC092, 0x9897},{0xC093, 0x9898},{0xC094, 0xBBE1},{0xC095, 0x9899},{0xC096, 0x989A},
- {0xC097, 0x989B},{0xC098, 0xBBE2},{0xC099, 0x989C},{0xC09A, 0x989D},{0xC09B, 0x989E},{0xC09C, 0x989F},{0xC09D, 0x98A0},{0xC09E, 0x98A1},
- {0xC09F, 0x98A2},{0xC0A0, 0xBBE3},{0xC0A1, 0xBBE4},{0xC0A2, 0x98A3},{0xC0A3, 0xBBE5},{0xC0A4, 0x98A4},{0xC0A5, 0xBBE6},{0xC0A6, 0x98A5},
- {0xC0A7, 0x98A6},{0xC0A8, 0x98A7},{0xC0A9, 0x98A8},{0xC0AA, 0x98A9},{0xC0AB, 0x98AA},{0xC0AC, 0xBBE7},{0xC0AD, 0xBBE8},{0xC0AE, 0x98AB},
- {0xC0AF, 0xBBE9},{0xC0B0, 0xBBEA},{0xC0B1, 0x98AC},{0xC0B2, 0x98AD},{0xC0B3, 0xBBEB},{0xC0B4, 0xBBEC},{0xC0B5, 0xBBED},{0xC0B6, 0xBBEE},
- {0xC0B7, 0x98AE},{0xC0B8, 0x98AF},{0xC0B9, 0x98B0},{0xC0BA, 0x98B1},{0xC0BB, 0x98B2},{0xC0BC, 0xBBEF},{0xC0BD, 0xBBF0},{0xC0BE, 0x98B3},
- {0xC0BF, 0xBBF1},{0xC0C0, 0xBBF2},{0xC0C1, 0xBBF3},{0xC0C2, 0x98B4},{0xC0C3, 0x98B5},{0xC0C4, 0x98B6},{0xC0C5, 0xBBF4},{0xC0C6, 0x98B7},
- {0xC0C7, 0x98B8},{0xC0C8, 0xBBF5},{0xC0C9, 0xBBF6},{0xC0CA, 0x98B9},{0xC0CB, 0x98BA},{0xC0CC, 0xBBF7},{0xC0CD, 0x98BB},{0xC0CE, 0x98BC},
- {0xC0CF, 0x98BD},{0xC0D0, 0xBBF8},{0xC0D1, 0x98BE},{0xC0D2, 0x98BF},{0xC0D3, 0x98C0},{0xC0D4, 0x98C1},{0xC0D5, 0x98C2},{0xC0D6, 0x98C3},
- {0xC0D7, 0x98C4},{0xC0D8, 0xBBF9},{0xC0D9, 0xBBFA},{0xC0DA, 0x98C5},{0xC0DB, 0xBBFB},{0xC0DC, 0xBBFC},{0xC0DD, 0xBBFD},{0xC0DE, 0x98C6},
- {0xC0DF, 0x98C7},{0xC0E0, 0x98C8},{0xC0E1, 0x98C9},{0xC0E2, 0x98CA},{0xC0E3, 0x98CB},{0xC0E4, 0xBBFE},{0xC0E5, 0xBCA1},{0xC0E6, 0x98CC},
- {0xC0E7, 0x98CD},{0xC0E8, 0xBCA2},{0xC0E9, 0x98CE},{0xC0EA, 0x98CF},{0xC0EB, 0x98D0},{0xC0EC, 0xBCA3},{0xC0ED, 0x98D1},{0xC0EE, 0x98D2},
- {0xC0EF, 0x98D3},{0xC0F0, 0x98D4},{0xC0F1, 0x98D5},{0xC0F2, 0x98D6},{0xC0F3, 0x98D7},{0xC0F4, 0xBCA4},{0xC0F5, 0xBCA5},{0xC0F6, 0x98D8},
- {0xC0F7, 0xBCA6},{0xC0F8, 0x98D9},{0xC0F9, 0xBCA7},{0xC0FA, 0x98DA},{0xC0FB, 0x98DB},{0xC0FC, 0x98DC},{0xC0FD, 0x98DD},{0xC0FE, 0x98DE},
- {0xC0FF, 0x98DF},{0xC100, 0xBCA8},{0xC101, 0x98E0},{0xC102, 0x98E1},{0xC103, 0x98E2},{0xC104, 0xBCA9},{0xC105, 0x98E3},{0xC106, 0x98E4},
- {0xC107, 0x98E5},{0xC108, 0xBCAA},{0xC109, 0x98E6},{0xC10A, 0x98E7},{0xC10B, 0x98E8},{0xC10C, 0x98E9},{0xC10D, 0x98EA},{0xC10E, 0x98EB},
- {0xC10F, 0x98EC},{0xC110, 0xBCAB},{0xC111, 0x98ED},{0xC112, 0x98EE},{0xC113, 0x98EF},{0xC114, 0x98F0},{0xC115, 0xBCAC},{0xC116, 0x98F1},
- {0xC117, 0x98F2},{0xC118, 0x98F3},{0xC119, 0x98F4},{0xC11A, 0x98F5},{0xC11B, 0x98F6},{0xC11C, 0xBCAD},{0xC11D, 0xBCAE},{0xC11E, 0xBCAF},
- {0xC11F, 0xBCB0},{0xC120, 0xBCB1},{0xC121, 0x98F7},{0xC122, 0x98F8},{0xC123, 0xBCB2},{0xC124, 0xBCB3},{0xC125, 0x98F9},{0xC126, 0xBCB4},
- {0xC127, 0xBCB5},{0xC128, 0x98FA},{0xC129, 0x98FB},{0xC12A, 0x98FC},{0xC12B, 0x98FD},{0xC12C, 0xBCB6},{0xC12D, 0xBCB7},{0xC12E, 0x98FE},
- {0xC12F, 0xBCB8},{0xC130, 0xBCB9},{0xC131, 0xBCBA},{0xC132, 0x9941},{0xC133, 0x9942},{0xC134, 0x9943},{0xC135, 0x9944},{0xC136, 0xBCBB},
- {0xC137, 0x9945},{0xC138, 0xBCBC},{0xC139, 0xBCBD},{0xC13A, 0x9946},{0xC13B, 0x9947},{0xC13C, 0xBCBE},{0xC13D, 0x9948},{0xC13E, 0x9949},
- {0xC13F, 0x994A},{0xC140, 0xBCBF},{0xC141, 0x994B},{0xC142, 0x994C},{0xC143, 0x994D},{0xC144, 0x994E},{0xC145, 0x994F},{0xC146, 0x9950},
- {0xC147, 0x9951},{0xC148, 0xBCC0},{0xC149, 0xBCC1},{0xC14A, 0x9952},{0xC14B, 0xBCC2},{0xC14C, 0xBCC3},{0xC14D, 0xBCC4},{0xC14E, 0x9953},
- {0xC14F, 0x9954},{0xC150, 0x9955},{0xC151, 0x9956},{0xC152, 0x9957},{0xC153, 0x9958},{0xC154, 0xBCC5},{0xC155, 0xBCC6},{0xC156, 0x9959},
- {0xC157, 0x995A},{0xC158, 0xBCC7},{0xC159, 0x9961},{0xC15A, 0x9962},{0xC15B, 0x9963},{0xC15C, 0xBCC8},{0xC15D, 0x9964},{0xC15E, 0x9965},
- {0xC15F, 0x9966},{0xC160, 0x9967},{0xC161, 0x9968},{0xC162, 0x9969},{0xC163, 0x996A},{0xC164, 0xBCC9},{0xC165, 0xBCCA},{0xC166, 0x996B},
- {0xC167, 0xBCCB},{0xC168, 0xBCCC},{0xC169, 0xBCCD},{0xC16A, 0x996C},{0xC16B, 0x996D},{0xC16C, 0x996E},{0xC16D, 0x996F},{0xC16E, 0x9970},
- {0xC16F, 0x9971},{0xC170, 0xBCCE},{0xC171, 0x9972},{0xC172, 0x9973},{0xC173, 0x9974},{0xC174, 0xBCCF},{0xC175, 0x9975},{0xC176, 0x9976},
- {0xC177, 0x9977},{0xC178, 0xBCD0},{0xC179, 0x9978},{0xC17A, 0x9979},{0xC17B, 0x997A},{0xC17C, 0x9981},{0xC17D, 0x9982},{0xC17E, 0x9983},
- {0xC17F, 0x9984},{0xC180, 0x9985},{0xC181, 0x9986},{0xC182, 0x9987},{0xC183, 0x9988},{0xC184, 0x9989},{0xC185, 0xBCD1},{0xC186, 0x998A},
- {0xC187, 0x998B},{0xC188, 0x998C},{0xC189, 0x998D},{0xC18A, 0x998E},{0xC18B, 0x998F},{0xC18C, 0xBCD2},{0xC18D, 0xBCD3},{0xC18E, 0xBCD4},
- {0xC18F, 0x9990},{0xC190, 0xBCD5},{0xC191, 0x9991},{0xC192, 0x9992},{0xC193, 0x9993},{0xC194, 0xBCD6},{0xC195, 0x9994},{0xC196, 0xBCD7},
- {0xC197, 0x9995},{0xC198, 0x9996},{0xC199, 0x9997},{0xC19A, 0x9998},{0xC19B, 0x9999},{0xC19C, 0xBCD8},{0xC19D, 0xBCD9},{0xC19E, 0x999A},
- {0xC19F, 0xBCDA},{0xC1A0, 0x999B},{0xC1A1, 0xBCDB},{0xC1A2, 0x999C},{0xC1A3, 0x999D},{0xC1A4, 0x999E},{0xC1A5, 0xBCDC},{0xC1A6, 0x999F},
- {0xC1A7, 0x99A0},{0xC1A8, 0xBCDD},{0xC1A9, 0xBCDE},{0xC1AA, 0x99A1},{0xC1AB, 0x99A2},{0xC1AC, 0xBCDF},{0xC1AD, 0x99A3},{0xC1AE, 0x99A4},
- {0xC1AF, 0x99A5},{0xC1B0, 0xBCE0},{0xC1B1, 0x99A6},{0xC1B2, 0x99A7},{0xC1B3, 0x99A8},{0xC1B4, 0x99A9},{0xC1B5, 0x99AA},{0xC1B6, 0x99AB},
- {0xC1B7, 0x99AC},{0xC1B8, 0x99AD},{0xC1B9, 0x99AE},{0xC1BA, 0x99AF},{0xC1BB, 0x99B0},{0xC1BC, 0x99B1},{0xC1BD, 0xBCE1},{0xC1BE, 0x99B2},
- {0xC1BF, 0x99B3},{0xC1C0, 0x99B4},{0xC1C1, 0x99B5},{0xC1C2, 0x99B6},{0xC1C3, 0x99B7},{0xC1C4, 0xBCE2},{0xC1C5, 0x99B8},{0xC1C6, 0x99B9},
- {0xC1C7, 0x99BA},{0xC1C8, 0xBCE3},{0xC1C9, 0x99BB},{0xC1CA, 0x99BC},{0xC1CB, 0x99BD},{0xC1CC, 0xBCE4},{0xC1CD, 0x99BE},{0xC1CE, 0x99BF},
- {0xC1CF, 0x99C0},{0xC1D0, 0x99C1},{0xC1D1, 0x99C2},{0xC1D2, 0x99C3},{0xC1D3, 0x99C4},{0xC1D4, 0xBCE5},{0xC1D5, 0x99C5},{0xC1D6, 0x99C6},
- {0xC1D7, 0xBCE6},{0xC1D8, 0xBCE7},{0xC1D9, 0x99C7},{0xC1DA, 0x99C8},{0xC1DB, 0x99C9},{0xC1DC, 0x99CA},{0xC1DD, 0x99CB},{0xC1DE, 0x99CC},
- {0xC1DF, 0x99CD},{0xC1E0, 0xBCE8},{0xC1E1, 0x99CE},{0xC1E2, 0x99CF},{0xC1E3, 0x99D0},{0xC1E4, 0xBCE9},{0xC1E5, 0x99D1},{0xC1E6, 0x99D2},
- {0xC1E7, 0x99D3},{0xC1E8, 0xBCEA},{0xC1E9, 0x99D4},{0xC1EA, 0x99D5},{0xC1EB, 0x99D6},{0xC1EC, 0x99D7},{0xC1ED, 0x99D8},{0xC1EE, 0x99D9},
- {0xC1EF, 0x99DA},{0xC1F0, 0xBCEB},{0xC1F1, 0xBCEC},{0xC1F2, 0x99DB},{0xC1F3, 0xBCED},{0xC1F4, 0x99DC},{0xC1F5, 0x99DD},{0xC1F6, 0x99DE},
- {0xC1F7, 0x99DF},{0xC1F8, 0x99E0},{0xC1F9, 0x99E1},{0xC1FA, 0x99E2},{0xC1FB, 0x99E3},{0xC1FC, 0xBCEE},{0xC1FD, 0xBCEF},{0xC1FE, 0x99E4},
- {0xC1FF, 0x99E5},{0xC200, 0xBCF0},{0xC201, 0x99E6},{0xC202, 0x99E7},{0xC203, 0x99E8},{0xC204, 0xBCF1},{0xC205, 0x99E9},{0xC206, 0x99EA},
- {0xC207, 0x99EB},{0xC208, 0x99EC},{0xC209, 0x99ED},{0xC20A, 0x99EE},{0xC20B, 0x99EF},{0xC20C, 0xBCF2},{0xC20D, 0xBCF3},{0xC20E, 0x99F0},
- {0xC20F, 0xBCF4},{0xC210, 0x99F1},{0xC211, 0xBCF5},{0xC212, 0x99F2},{0xC213, 0x99F3},{0xC214, 0x99F4},{0xC215, 0x99F5},{0xC216, 0x99F6},
- {0xC217, 0x99F7},{0xC218, 0xBCF6},{0xC219, 0xBCF7},{0xC21A, 0x99F8},{0xC21B, 0x99F9},{0xC21C, 0xBCF8},{0xC21D, 0x99FA},{0xC21E, 0x99FB},
- {0xC21F, 0xBCF9},{0xC220, 0xBCFA},{0xC221, 0x99FC},{0xC222, 0x99FD},{0xC223, 0x99FE},{0xC224, 0x9A41},{0xC225, 0x9A42},{0xC226, 0x9A43},
- {0xC227, 0x9A44},{0xC228, 0xBCFB},{0xC229, 0xBCFC},{0xC22A, 0x9A45},{0xC22B, 0xBCFD},{0xC22C, 0x9A46},{0xC22D, 0xBCFE},{0xC22E, 0x9A47},
- {0xC22F, 0xBDA1},{0xC230, 0x9A48},{0xC231, 0xBDA2},{0xC232, 0xBDA3},{0xC233, 0x9A49},{0xC234, 0xBDA4},{0xC235, 0x9A4A},{0xC236, 0x9A4B},
- {0xC237, 0x9A4C},{0xC238, 0x9A4D},{0xC239, 0x9A4E},{0xC23A, 0x9A4F},{0xC23B, 0x9A50},{0xC23C, 0x9A51},{0xC23D, 0x9A52},{0xC23E, 0x9A53},
- {0xC23F, 0x9A54},{0xC240, 0x9A55},{0xC241, 0x9A56},{0xC242, 0x9A57},{0xC243, 0x9A58},{0xC244, 0x9A59},{0xC245, 0x9A5A},{0xC246, 0x9A61},
- {0xC247, 0x9A62},{0xC248, 0xBDA5},{0xC249, 0x9A63},{0xC24A, 0x9A64},{0xC24B, 0x9A65},{0xC24C, 0x9A66},{0xC24D, 0x9A67},{0xC24E, 0x9A68},
- {0xC24F, 0x9A69},{0xC250, 0xBDA6},{0xC251, 0xBDA7},{0xC252, 0x9A6A},{0xC253, 0x9A6B},{0xC254, 0xBDA8},{0xC255, 0x9A6C},{0xC256, 0x9A6D},
- {0xC257, 0x9A6E},{0xC258, 0xBDA9},{0xC259, 0x9A6F},{0xC25A, 0x9A70},{0xC25B, 0x9A71},{0xC25C, 0x9A72},{0xC25D, 0x9A73},{0xC25E, 0x9A74},
- {0xC25F, 0x9A75},{0xC260, 0xBDAA},{0xC261, 0x9A76},{0xC262, 0x9A77},{0xC263, 0x9A78},{0xC264, 0x9A79},{0xC265, 0xBDAB},{0xC266, 0x9A7A},
- {0xC267, 0x9A81},{0xC268, 0x9A82},{0xC269, 0x9A83},{0xC26A, 0x9A84},{0xC26B, 0x9A85},{0xC26C, 0xBDAC},{0xC26D, 0xBDAD},{0xC26E, 0x9A86},
- {0xC26F, 0x9A87},{0xC270, 0xBDAE},{0xC271, 0x9A88},{0xC272, 0x9A89},{0xC273, 0x9A8A},{0xC274, 0xBDAF},{0xC275, 0x9A8B},{0xC276, 0x9A8C},
- {0xC277, 0x9A8D},{0xC278, 0x9A8E},{0xC279, 0x9A8F},{0xC27A, 0x9A90},{0xC27B, 0x9A91},{0xC27C, 0xBDB0},{0xC27D, 0xBDB1},{0xC27E, 0x9A92},
- {0xC27F, 0xBDB2},{0xC280, 0x9A93},{0xC281, 0xBDB3},{0xC282, 0x9A94},{0xC283, 0x9A95},{0xC284, 0x9A96},{0xC285, 0x9A97},{0xC286, 0x9A98},
- {0xC287, 0x9A99},{0xC288, 0xBDB4},{0xC289, 0xBDB5},{0xC28A, 0x9A9A},{0xC28B, 0x9A9B},{0xC28C, 0x9A9C},{0xC28D, 0x9A9D},{0xC28E, 0x9A9E},
- {0xC28F, 0x9A9F},{0xC290, 0xBDB6},{0xC291, 0x9AA0},{0xC292, 0x9AA1},{0xC293, 0x9AA2},{0xC294, 0x9AA3},{0xC295, 0x9AA4},{0xC296, 0x9AA5},
- {0xC297, 0x9AA6},{0xC298, 0xBDB7},{0xC299, 0x9AA7},{0xC29A, 0x9AA8},{0xC29B, 0xBDB8},{0xC29C, 0x9AA9},{0xC29D, 0xBDB9},{0xC29E, 0x9AAA},
- {0xC29F, 0x9AAB},{0xC2A0, 0x9AAC},{0xC2A1, 0x9AAD},{0xC2A2, 0x9AAE},{0xC2A3, 0x9AAF},{0xC2A4, 0xBDBA},{0xC2A5, 0xBDBB},{0xC2A6, 0x9AB0},
- {0xC2A7, 0x9AB1},{0xC2A8, 0xBDBC},{0xC2A9, 0x9AB2},{0xC2AA, 0x9AB3},{0xC2AB, 0x9AB4},{0xC2AC, 0xBDBD},{0xC2AD, 0xBDBE},{0xC2AE, 0x9AB5},
- {0xC2AF, 0x9AB6},{0xC2B0, 0x9AB7},{0xC2B1, 0x9AB8},{0xC2B2, 0x9AB9},{0xC2B3, 0x9ABA},{0xC2B4, 0xBDBF},{0xC2B5, 0xBDC0},{0xC2B6, 0x9ABB},
- {0xC2B7, 0xBDC1},{0xC2B8, 0x9ABC},{0xC2B9, 0xBDC2},{0xC2BA, 0x9ABD},{0xC2BB, 0x9ABE},{0xC2BC, 0x9ABF},{0xC2BD, 0x9AC0},{0xC2BE, 0x9AC1},
- {0xC2BF, 0x9AC2},{0xC2C0, 0x9AC3},{0xC2C1, 0x9AC4},{0xC2C2, 0x9AC5},{0xC2C3, 0x9AC6},{0xC2C4, 0x9AC7},{0xC2C5, 0x9AC8},{0xC2C6, 0x9AC9},
- {0xC2C7, 0x9ACA},{0xC2C8, 0x9ACB},{0xC2C9, 0x9ACC},{0xC2CA, 0x9ACD},{0xC2CB, 0x9ACE},{0xC2CC, 0x9ACF},{0xC2CD, 0x9AD0},{0xC2CE, 0x9AD1},
- {0xC2CF, 0x9AD2},{0xC2D0, 0x9AD3},{0xC2D1, 0x9AD4},{0xC2D2, 0x9AD5},{0xC2D3, 0x9AD6},{0xC2D4, 0x9AD7},{0xC2D5, 0x9AD8},{0xC2D6, 0x9AD9},
- {0xC2D7, 0x9ADA},{0xC2D8, 0x9ADB},{0xC2D9, 0x9ADC},{0xC2DA, 0x9ADD},{0xC2DB, 0x9ADE},{0xC2DC, 0xBDC3},{0xC2DD, 0xBDC4},{0xC2DE, 0x9ADF},
- {0xC2DF, 0x9AE0},{0xC2E0, 0xBDC5},{0xC2E1, 0x9AE1},{0xC2E2, 0x9AE2},{0xC2E3, 0xBDC6},{0xC2E4, 0xBDC7},{0xC2E5, 0x9AE3},{0xC2E6, 0x9AE4},
- {0xC2E7, 0x9AE5},{0xC2E8, 0x9AE6},{0xC2E9, 0x9AE7},{0xC2EA, 0x9AE8},{0xC2EB, 0xBDC8},{0xC2EC, 0xBDC9},{0xC2ED, 0xBDCA},{0xC2EE, 0x9AE9},
- {0xC2EF, 0xBDCB},{0xC2F0, 0x9AEA},{0xC2F1, 0xBDCC},{0xC2F2, 0x9AEB},{0xC2F3, 0x9AEC},{0xC2F4, 0x9AED},{0xC2F5, 0x9AEE},{0xC2F6, 0xBDCD},
- {0xC2F7, 0x9AEF},{0xC2F8, 0xBDCE},{0xC2F9, 0xBDCF},{0xC2FA, 0x9AF0},{0xC2FB, 0xBDD0},{0xC2FC, 0xBDD1},{0xC2FD, 0x9AF1},{0xC2FE, 0x9AF2},
- {0xC2FF, 0x9AF3},{0xC300, 0xBDD2},{0xC301, 0x9AF4},{0xC302, 0x9AF5},{0xC303, 0x9AF6},{0xC304, 0x9AF7},{0xC305, 0x9AF8},{0xC306, 0x9AF9},
- {0xC307, 0x9AFA},{0xC308, 0xBDD3},{0xC309, 0xBDD4},{0xC30A, 0x9AFB},{0xC30B, 0x9AFC},{0xC30C, 0xBDD5},{0xC30D, 0xBDD6},{0xC30E, 0x9AFD},
- {0xC30F, 0x9AFE},{0xC310, 0x9B41},{0xC311, 0x9B42},{0xC312, 0x9B43},{0xC313, 0xBDD7},{0xC314, 0xBDD8},{0xC315, 0xBDD9},{0xC316, 0x9B44},
- {0xC317, 0x9B45},{0xC318, 0xBDDA},{0xC319, 0x9B46},{0xC31A, 0x9B47},{0xC31B, 0x9B48},{0xC31C, 0xBDDB},{0xC31D, 0x9B49},{0xC31E, 0x9B4A},
- {0xC31F, 0x9B4B},{0xC320, 0x9B4C},{0xC321, 0x9B4D},{0xC322, 0x9B4E},{0xC323, 0x9B4F},{0xC324, 0xBDDC},{0xC325, 0xBDDD},{0xC326, 0x9B50},
- {0xC327, 0x9B51},{0xC328, 0xBDDE},{0xC329, 0xBDDF},{0xC32A, 0x9B52},{0xC32B, 0x9B53},{0xC32C, 0x9B54},{0xC32D, 0x9B55},{0xC32E, 0x9B56},
- {0xC32F, 0x9B57},{0xC330, 0x9B58},{0xC331, 0x9B59},{0xC332, 0x9B5A},{0xC333, 0x9B61},{0xC334, 0x9B62},{0xC335, 0x9B63},{0xC336, 0x9B64},
- {0xC337, 0x9B65},{0xC338, 0x9B66},{0xC339, 0x9B67},{0xC33A, 0x9B68},{0xC33B, 0x9B69},{0xC33C, 0x9B6A},{0xC33D, 0x9B6B},{0xC33E, 0x9B6C},
- {0xC33F, 0x9B6D},{0xC340, 0x9B6E},{0xC341, 0x9B6F},{0xC342, 0x9B70},{0xC343, 0x9B71},{0xC344, 0x9B72},{0xC345, 0xBDE0},{0xC346, 0x9B73},
- {0xC347, 0x9B74},{0xC348, 0x9B75},{0xC349, 0x9B76},{0xC34A, 0x9B77},{0xC34B, 0x9B78},{0xC34C, 0x9B79},{0xC34D, 0x9B7A},{0xC34E, 0x9B81},
- {0xC34F, 0x9B82},{0xC350, 0x9B83},{0xC351, 0x9B84},{0xC352, 0x9B85},{0xC353, 0x9B86},{0xC354, 0x9B87},{0xC355, 0x9B88},{0xC356, 0x9B89},
- {0xC357, 0x9B8A},{0xC358, 0x9B8B},{0xC359, 0x9B8C},{0xC35A, 0x9B8D},{0xC35B, 0x9B8E},{0xC35C, 0x9B8F},{0xC35D, 0x9B90},{0xC35E, 0x9B91},
- {0xC35F, 0x9B92},{0xC360, 0x9B93},{0xC361, 0x9B94},{0xC362, 0x9B95},{0xC363, 0x9B96},{0xC364, 0x9B97},{0xC365, 0x9B98},{0xC366, 0x9B99},
- {0xC367, 0x9B9A},{0xC368, 0xBDE1},{0xC369, 0xBDE2},{0xC36A, 0x9B9B},{0xC36B, 0x9B9C},{0xC36C, 0xBDE3},{0xC36D, 0x9B9D},{0xC36E, 0x9B9E},
- {0xC36F, 0x9B9F},{0xC370, 0xBDE4},{0xC371, 0x9BA0},{0xC372, 0xBDE5},{0xC373, 0x9BA1},{0xC374, 0x9BA2},{0xC375, 0x9BA3},{0xC376, 0x9BA4},
- {0xC377, 0x9BA5},{0xC378, 0xBDE6},{0xC379, 0xBDE7},{0xC37A, 0x9BA6},{0xC37B, 0x9BA7},{0xC37C, 0xBDE8},{0xC37D, 0xBDE9},{0xC37E, 0x9BA8},
- {0xC37F, 0x9BA9},{0xC380, 0x9BAA},{0xC381, 0x9BAB},{0xC382, 0x9BAC},{0xC383, 0x9BAD},{0xC384, 0xBDEA},{0xC385, 0x9BAE},{0xC386, 0x9BAF},
- {0xC387, 0x9BB0},{0xC388, 0xBDEB},{0xC389, 0x9BB1},{0xC38A, 0x9BB2},{0xC38B, 0x9BB3},{0xC38C, 0xBDEC},{0xC38D, 0x9BB4},{0xC38E, 0x9BB5},
- {0xC38F, 0x9BB6},{0xC390, 0x9BB7},{0xC391, 0x9BB8},{0xC392, 0x9BB9},{0xC393, 0x9BBA},{0xC394, 0x9BBB},{0xC395, 0x9BBC},{0xC396, 0x9BBD},
- {0xC397, 0x9BBE},{0xC398, 0x9BBF},{0xC399, 0x9BC0},{0xC39A, 0x9BC1},{0xC39B, 0x9BC2},{0xC39C, 0x9BC3},{0xC39D, 0x9BC4},{0xC39E, 0x9BC5},
- {0xC39F, 0x9BC6},{0xC3A0, 0x9BC7},{0xC3A1, 0x9BC8},{0xC3A2, 0x9BC9},{0xC3A3, 0x9BCA},{0xC3A4, 0x9BCB},{0xC3A5, 0x9BCC},{0xC3A6, 0x9BCD},
- {0xC3A7, 0x9BCE},{0xC3A8, 0x9BCF},{0xC3A9, 0x9BD0},{0xC3AA, 0x9BD1},{0xC3AB, 0x9BD2},{0xC3AC, 0x9BD3},{0xC3AD, 0x9BD4},{0xC3AE, 0x9BD5},
- {0xC3AF, 0x9BD6},{0xC3B0, 0x9BD7},{0xC3B1, 0x9BD8},{0xC3B2, 0x9BD9},{0xC3B3, 0x9BDA},{0xC3B4, 0x9BDB},{0xC3B5, 0x9BDC},{0xC3B6, 0x9BDD},
- {0xC3B7, 0x9BDE},{0xC3B8, 0x9BDF},{0xC3B9, 0x9BE0},{0xC3BA, 0x9BE1},{0xC3BB, 0x9BE2},{0xC3BC, 0x9BE3},{0xC3BD, 0x9BE4},{0xC3BE, 0x9BE5},
- {0xC3BF, 0x9BE6},{0xC3C0, 0xBDED},{0xC3C1, 0x9BE7},{0xC3C2, 0x9BE8},{0xC3C3, 0x9BE9},{0xC3C4, 0x9BEA},{0xC3C5, 0x9BEB},{0xC3C6, 0x9BEC},
- {0xC3C7, 0x9BED},{0xC3C8, 0x9BEE},{0xC3C9, 0x9BEF},{0xC3CA, 0x9BF0},{0xC3CB, 0x9BF1},{0xC3CC, 0x9BF2},{0xC3CD, 0x9BF3},{0xC3CE, 0x9BF4},
- {0xC3CF, 0x9BF5},{0xC3D0, 0x9BF6},{0xC3D1, 0x9BF7},{0xC3D2, 0x9BF8},{0xC3D3, 0x9BF9},{0xC3D4, 0x9BFA},{0xC3D5, 0x9BFB},{0xC3D6, 0x9BFC},
- {0xC3D7, 0x9BFD},{0xC3D8, 0xBDEE},{0xC3D9, 0xBDEF},{0xC3DA, 0x9BFE},{0xC3DB, 0x9C41},{0xC3DC, 0xBDF0},{0xC3DD, 0x9C42},{0xC3DE, 0x9C43},
- {0xC3DF, 0xBDF1},{0xC3E0, 0xBDF2},{0xC3E1, 0x9C44},{0xC3E2, 0xBDF3},{0xC3E3, 0x9C45},{0xC3E4, 0x9C46},{0xC3E5, 0x9C47},{0xC3E6, 0x9C48},
- {0xC3E7, 0x9C49},{0xC3E8, 0xBDF4},{0xC3E9, 0xBDF5},{0xC3EA, 0x9C4A},{0xC3EB, 0x9C4B},{0xC3EC, 0x9C4C},{0xC3ED, 0xBDF6},{0xC3EE, 0x9C4D},
- {0xC3EF, 0x9C4E},{0xC3F0, 0x9C4F},{0xC3F1, 0x9C50},{0xC3F2, 0x9C51},{0xC3F3, 0x9C52},{0xC3F4, 0xBDF7},{0xC3F5, 0xBDF8},{0xC3F6, 0x9C53},
- {0xC3F7, 0x9C54},{0xC3F8, 0xBDF9},{0xC3F9, 0x9C55},{0xC3FA, 0x9C56},{0xC3FB, 0x9C57},{0xC3FC, 0x9C58},{0xC3FD, 0x9C59},{0xC3FE, 0x9C5A},
- {0xC3FF, 0x9C61},{0xC400, 0x9C62},{0xC401, 0x9C63},{0xC402, 0x9C64},{0xC403, 0x9C65},{0xC404, 0x9C66},{0xC405, 0x9C67},{0xC406, 0x9C68},
- {0xC407, 0x9C69},{0xC408, 0xBDFA},{0xC409, 0x9C6A},{0xC40A, 0x9C6B},{0xC40B, 0x9C6C},{0xC40C, 0x9C6D},{0xC40D, 0x9C6E},{0xC40E, 0x9C6F},
- {0xC40F, 0x9C70},{0xC410, 0xBDFB},{0xC411, 0x9C71},{0xC412, 0x9C72},{0xC413, 0x9C73},{0xC414, 0x9C74},{0xC415, 0x9C75},{0xC416, 0x9C76},
- {0xC417, 0x9C77},{0xC418, 0x9C78},{0xC419, 0x9C79},{0xC41A, 0x9C7A},{0xC41B, 0x9C81},{0xC41C, 0x9C82},{0xC41D, 0x9C83},{0xC41E, 0x9C84},
- {0xC41F, 0x9C85},{0xC420, 0x9C86},{0xC421, 0x9C87},{0xC422, 0x9C88},{0xC423, 0x9C89},{0xC424, 0xBDFC},{0xC425, 0x9C8A},{0xC426, 0x9C8B},
- {0xC427, 0x9C8C},{0xC428, 0x9C8D},{0xC429, 0x9C8E},{0xC42A, 0x9C8F},{0xC42B, 0x9C90},{0xC42C, 0xBDFD},{0xC42D, 0x9C91},{0xC42E, 0x9C92},
- {0xC42F, 0x9C93},{0xC430, 0xBDFE},{0xC431, 0x9C94},{0xC432, 0x9C95},{0xC433, 0x9C96},{0xC434, 0xBEA1},{0xC435, 0x9C97},{0xC436, 0x9C98},
- {0xC437, 0x9C99},{0xC438, 0x9C9A},{0xC439, 0x9C9B},{0xC43A, 0x9C9C},{0xC43B, 0x9C9D},{0xC43C, 0xBEA2},{0xC43D, 0xBEA3},{0xC43E, 0x9C9E},
- {0xC43F, 0x9C9F},{0xC440, 0x9CA0},{0xC441, 0x9CA1},{0xC442, 0x9CA2},{0xC443, 0x9CA3},{0xC444, 0x9CA4},{0xC445, 0x9CA5},{0xC446, 0x9CA6},
- {0xC447, 0x9CA7},{0xC448, 0xBEA4},{0xC449, 0x9CA8},{0xC44A, 0x9CA9},{0xC44B, 0x9CAA},{0xC44C, 0x9CAB},{0xC44D, 0x9CAC},{0xC44E, 0x9CAD},
- {0xC44F, 0x9CAE},{0xC450, 0x9CAF},{0xC451, 0x9CB0},{0xC452, 0x9CB1},{0xC453, 0x9CB2},{0xC454, 0x9CB3},{0xC455, 0x9CB4},{0xC456, 0x9CB5},
- {0xC457, 0x9CB6},{0xC458, 0x9CB7},{0xC459, 0x9CB8},{0xC45A, 0x9CB9},{0xC45B, 0x9CBA},{0xC45C, 0x9CBB},{0xC45D, 0x9CBC},{0xC45E, 0x9CBD},
- {0xC45F, 0x9CBE},{0xC460, 0x9CBF},{0xC461, 0x9CC0},{0xC462, 0x9CC1},{0xC463, 0x9CC2},{0xC464, 0xBEA5},{0xC465, 0xBEA6},{0xC466, 0x9CC3},
- {0xC467, 0x9CC4},{0xC468, 0xBEA7},{0xC469, 0x9CC5},{0xC46A, 0x9CC6},{0xC46B, 0x9CC7},{0xC46C, 0xBEA8},{0xC46D, 0x9CC8},{0xC46E, 0x9CC9},
- {0xC46F, 0x9CCA},{0xC470, 0x9CCB},{0xC471, 0x9CCC},{0xC472, 0x9CCD},{0xC473, 0x9CCE},{0xC474, 0xBEA9},{0xC475, 0xBEAA},{0xC476, 0x9CCF},
- {0xC477, 0x9CD0},{0xC478, 0x9CD1},{0xC479, 0xBEAB},{0xC47A, 0x9CD2},{0xC47B, 0x9CD3},{0xC47C, 0x9CD4},{0xC47D, 0x9CD5},{0xC47E, 0x9CD6},
- {0xC47F, 0x9CD7},{0xC480, 0xBEAC},{0xC481, 0x9CD8},{0xC482, 0x9CD9},{0xC483, 0x9CDA},{0xC484, 0x9CDB},{0xC485, 0x9CDC},{0xC486, 0x9CDD},
- {0xC487, 0x9CDE},{0xC488, 0x9CDF},{0xC489, 0x9CE0},{0xC48A, 0x9CE1},{0xC48B, 0x9CE2},{0xC48C, 0x9CE3},{0xC48D, 0x9CE4},{0xC48E, 0x9CE5},
- {0xC48F, 0x9CE6},{0xC490, 0x9CE7},{0xC491, 0x9CE8},{0xC492, 0x9CE9},{0xC493, 0x9CEA},{0xC494, 0xBEAD},{0xC495, 0x9CEB},{0xC496, 0x9CEC},
- {0xC497, 0x9CED},{0xC498, 0x9CEE},{0xC499, 0x9CEF},{0xC49A, 0x9CF0},{0xC49B, 0x9CF1},{0xC49C, 0xBEAE},{0xC49D, 0x9CF2},{0xC49E, 0x9CF3},
- {0xC49F, 0x9CF4},{0xC4A0, 0x9CF5},{0xC4A1, 0x9CF6},{0xC4A2, 0x9CF7},{0xC4A3, 0x9CF8},{0xC4A4, 0x9CF9},{0xC4A5, 0x9CFA},{0xC4A6, 0x9CFB},
- {0xC4A7, 0x9CFC},{0xC4A8, 0x9CFD},{0xC4A9, 0x9CFE},{0xC4AA, 0x9D41},{0xC4AB, 0x9D42},{0xC4AC, 0x9D43},{0xC4AD, 0x9D44},{0xC4AE, 0x9D45},
- {0xC4AF, 0x9D46},{0xC4B0, 0x9D47},{0xC4B1, 0x9D48},{0xC4B2, 0x9D49},{0xC4B3, 0x9D4A},{0xC4B4, 0x9D4B},{0xC4B5, 0x9D4C},{0xC4B6, 0x9D4D},
- {0xC4B7, 0x9D4E},{0xC4B8, 0xBEAF},{0xC4B9, 0x9D4F},{0xC4BA, 0x9D50},{0xC4BB, 0x9D51},{0xC4BC, 0xBEB0},{0xC4BD, 0x9D52},{0xC4BE, 0x9D53},
- {0xC4BF, 0x9D54},{0xC4C0, 0x9D55},{0xC4C1, 0x9D56},{0xC4C2, 0x9D57},{0xC4C3, 0x9D58},{0xC4C4, 0x9D59},{0xC4C5, 0x9D5A},{0xC4C6, 0x9D61},
- {0xC4C7, 0x9D62},{0xC4C8, 0x9D63},{0xC4C9, 0x9D64},{0xC4CA, 0x9D65},{0xC4CB, 0x9D66},{0xC4CC, 0x9D67},{0xC4CD, 0x9D68},{0xC4CE, 0x9D69},
- {0xC4CF, 0x9D6A},{0xC4D0, 0x9D6B},{0xC4D1, 0x9D6C},{0xC4D2, 0x9D6D},{0xC4D3, 0x9D6E},{0xC4D4, 0x9D6F},{0xC4D5, 0x9D70},{0xC4D6, 0x9D71},
- {0xC4D7, 0x9D72},{0xC4D8, 0x9D73},{0xC4D9, 0x9D74},{0xC4DA, 0x9D75},{0xC4DB, 0x9D76},{0xC4DC, 0x9D77},{0xC4DD, 0x9D78},{0xC4DE, 0x9D79},
- {0xC4DF, 0x9D7A},{0xC4E0, 0x9D81},{0xC4E1, 0x9D82},{0xC4E2, 0x9D83},{0xC4E3, 0x9D84},{0xC4E4, 0x9D85},{0xC4E5, 0x9D86},{0xC4E6, 0x9D87},
- {0xC4E7, 0x9D88},{0xC4E8, 0x9D89},{0xC4E9, 0xBEB1},{0xC4EA, 0x9D8A},{0xC4EB, 0x9D8B},{0xC4EC, 0x9D8C},{0xC4ED, 0x9D8D},{0xC4EE, 0x9D8E},
- {0xC4EF, 0x9D8F},{0xC4F0, 0xBEB2},{0xC4F1, 0xBEB3},{0xC4F2, 0x9D90},{0xC4F3, 0x9D91},{0xC4F4, 0xBEB4},{0xC4F5, 0x9D92},{0xC4F6, 0x9D93},
- {0xC4F7, 0x9D94},{0xC4F8, 0xBEB5},{0xC4F9, 0x9D95},{0xC4FA, 0xBEB6},{0xC4FB, 0x9D96},{0xC4FC, 0x9D97},{0xC4FD, 0x9D98},{0xC4FE, 0x9D99},
- {0xC4FF, 0xBEB7},{0xC500, 0xBEB8},{0xC501, 0xBEB9},{0xC502, 0x9D9A},{0xC503, 0x9D9B},{0xC504, 0x9D9C},{0xC505, 0x9D9D},{0xC506, 0x9D9E},
- {0xC507, 0x9D9F},{0xC508, 0x9DA0},{0xC509, 0x9DA1},{0xC50A, 0x9DA2},{0xC50B, 0x9DA3},{0xC50C, 0xBEBA},{0xC50D, 0x9DA4},{0xC50E, 0x9DA5},
- {0xC50F, 0x9DA6},{0xC510, 0xBEBB},{0xC511, 0x9DA7},{0xC512, 0x9DA8},{0xC513, 0x9DA9},{0xC514, 0xBEBC},{0xC515, 0x9DAA},{0xC516, 0x9DAB},
- {0xC517, 0x9DAC},{0xC518, 0x9DAD},{0xC519, 0x9DAE},{0xC51A, 0x9DAF},{0xC51B, 0x9DB0},{0xC51C, 0xBEBD},{0xC51D, 0x9DB1},{0xC51E, 0x9DB2},
- {0xC51F, 0x9DB3},{0xC520, 0x9DB4},{0xC521, 0x9DB5},{0xC522, 0x9DB6},{0xC523, 0x9DB7},{0xC524, 0x9DB8},{0xC525, 0x9DB9},{0xC526, 0x9DBA},
- {0xC527, 0x9DBB},{0xC528, 0xBEBE},{0xC529, 0xBEBF},{0xC52A, 0x9DBC},{0xC52B, 0x9DBD},{0xC52C, 0xBEC0},{0xC52D, 0x9DBE},{0xC52E, 0x9DBF},
- {0xC52F, 0x9DC0},{0xC530, 0xBEC1},{0xC531, 0x9DC1},{0xC532, 0x9DC2},{0xC533, 0x9DC3},{0xC534, 0x9DC4},{0xC535, 0x9DC5},{0xC536, 0x9DC6},
- {0xC537, 0x9DC7},{0xC538, 0xBEC2},{0xC539, 0xBEC3},{0xC53A, 0x9DC8},{0xC53B, 0xBEC4},{0xC53C, 0x9DC9},{0xC53D, 0xBEC5},{0xC53E, 0x9DCA},
- {0xC53F, 0x9DCB},{0xC540, 0x9DCC},{0xC541, 0x9DCD},{0xC542, 0x9DCE},{0xC543, 0x9DCF},{0xC544, 0xBEC6},{0xC545, 0xBEC7},{0xC546, 0x9DD0},
- {0xC547, 0x9DD1},{0xC548, 0xBEC8},{0xC549, 0xBEC9},{0xC54A, 0xBECA},{0xC54B, 0x9DD2},{0xC54C, 0xBECB},{0xC54D, 0xBECC},{0xC54E, 0xBECD},
- {0xC54F, 0x9DD3},{0xC550, 0x9DD4},{0xC551, 0x9DD5},{0xC552, 0x9DD6},{0xC553, 0xBECE},{0xC554, 0xBECF},{0xC555, 0xBED0},{0xC556, 0x9DD7},
- {0xC557, 0xBED1},{0xC558, 0xBED2},{0xC559, 0xBED3},{0xC55A, 0x9DD8},{0xC55B, 0x9DD9},{0xC55C, 0x9DDA},{0xC55D, 0xBED4},{0xC55E, 0xBED5},
- {0xC55F, 0x9DDB},{0xC560, 0xBED6},{0xC561, 0xBED7},{0xC562, 0x9DDC},{0xC563, 0x9DDD},{0xC564, 0xBED8},{0xC565, 0x9DDE},{0xC566, 0x9DDF},
- {0xC567, 0x9DE0},{0xC568, 0xBED9},{0xC569, 0x9DE1},{0xC56A, 0x9DE2},{0xC56B, 0x9DE3},{0xC56C, 0x9DE4},{0xC56D, 0x9DE5},{0xC56E, 0x9DE6},
- {0xC56F, 0x9DE7},{0xC570, 0xBEDA},{0xC571, 0xBEDB},{0xC572, 0x9DE8},{0xC573, 0xBEDC},{0xC574, 0xBEDD},{0xC575, 0xBEDE},{0xC576, 0x9DE9},
- {0xC577, 0x9DEA},{0xC578, 0x9DEB},{0xC579, 0x9DEC},{0xC57A, 0x9DED},{0xC57B, 0x9DEE},{0xC57C, 0xBEDF},{0xC57D, 0xBEE0},{0xC57E, 0x9DEF},
- {0xC57F, 0x9DF0},{0xC580, 0xBEE1},{0xC581, 0x9DF1},{0xC582, 0x9DF2},{0xC583, 0x9DF3},{0xC584, 0xBEE2},{0xC585, 0x9DF4},{0xC586, 0x9DF5},
- {0xC587, 0xBEE3},{0xC588, 0x9DF6},{0xC589, 0x9DF7},{0xC58A, 0x9DF8},{0xC58B, 0x9DF9},{0xC58C, 0xBEE4},{0xC58D, 0xBEE5},{0xC58E, 0x9DFA},
- {0xC58F, 0xBEE6},{0xC590, 0x9DFB},{0xC591, 0xBEE7},{0xC592, 0x9DFC},{0xC593, 0x9DFD},{0xC594, 0x9DFE},{0xC595, 0xBEE8},{0xC596, 0x9E41},
- {0xC597, 0xBEE9},{0xC598, 0xBEEA},{0xC599, 0x9E42},{0xC59A, 0x9E43},{0xC59B, 0x9E44},{0xC59C, 0xBEEB},{0xC59D, 0x9E45},{0xC59E, 0x9E46},
- {0xC59F, 0x9E47},{0xC5A0, 0xBEEC},{0xC5A1, 0x9E48},{0xC5A2, 0x9E49},{0xC5A3, 0x9E4A},{0xC5A4, 0x9E4B},{0xC5A5, 0x9E4C},{0xC5A6, 0x9E4D},
- {0xC5A7, 0x9E4E},{0xC5A8, 0x9E4F},{0xC5A9, 0xBEED},{0xC5AA, 0x9E50},{0xC5AB, 0x9E51},{0xC5AC, 0x9E52},{0xC5AD, 0x9E53},{0xC5AE, 0x9E54},
- {0xC5AF, 0x9E55},{0xC5B0, 0x9E56},{0xC5B1, 0x9E57},{0xC5B2, 0x9E58},{0xC5B3, 0x9E59},{0xC5B4, 0xBEEE},{0xC5B5, 0xBEEF},{0xC5B6, 0x9E5A},
- {0xC5B7, 0x9E61},{0xC5B8, 0xBEF0},{0xC5B9, 0xBEF1},{0xC5BA, 0x9E62},{0xC5BB, 0xBEF2},{0xC5BC, 0xBEF3},{0xC5BD, 0xBEF4},{0xC5BE, 0xBEF5},
- {0xC5BF, 0x9E63},{0xC5C0, 0x9E64},{0xC5C1, 0x9E65},{0xC5C2, 0x9E66},{0xC5C3, 0x9E67},{0xC5C4, 0xBEF6},{0xC5C5, 0xBEF7},{0xC5C6, 0xBEF8},
- {0xC5C7, 0xBEF9},{0xC5C8, 0xBEFA},{0xC5C9, 0xBEFB},{0xC5CA, 0xBEFC},{0xC5CB, 0x9E68},{0xC5CC, 0xBEFD},{0xC5CD, 0x9E69},{0xC5CE, 0xBEFE},
- {0xC5CF, 0x9E6A},{0xC5D0, 0xBFA1},{0xC5D1, 0xBFA2},{0xC5D2, 0x9E6B},{0xC5D3, 0x9E6C},{0xC5D4, 0xBFA3},{0xC5D5, 0x9E6D},{0xC5D6, 0x9E6E},
- {0xC5D7, 0x9E6F},{0xC5D8, 0xBFA4},{0xC5D9, 0x9E70},{0xC5DA, 0x9E71},{0xC5DB, 0x9E72},{0xC5DC, 0x9E73},{0xC5DD, 0x9E74},{0xC5DE, 0x9E75},
- {0xC5DF, 0x9E76},{0xC5E0, 0xBFA5},{0xC5E1, 0xBFA6},{0xC5E2, 0x9E77},{0xC5E3, 0xBFA7},{0xC5E4, 0x9E78},{0xC5E5, 0xBFA8},{0xC5E6, 0x9E79},
- {0xC5E7, 0x9E7A},{0xC5E8, 0x9E81},{0xC5E9, 0x9E82},{0xC5EA, 0x9E83},{0xC5EB, 0x9E84},{0xC5EC, 0xBFA9},{0xC5ED, 0xBFAA},{0xC5EE, 0xBFAB},
- {0xC5EF, 0x9E85},{0xC5F0, 0xBFAC},{0xC5F1, 0x9E86},{0xC5F2, 0x9E87},{0xC5F3, 0x9E88},{0xC5F4, 0xBFAD},{0xC5F5, 0x9E89},{0xC5F6, 0xBFAE},
- {0xC5F7, 0xBFAF},{0xC5F8, 0x9E8A},{0xC5F9, 0x9E8B},{0xC5FA, 0x9E8C},{0xC5FB, 0x9E8D},{0xC5FC, 0xBFB0},{0xC5FD, 0xBFB1},{0xC5FE, 0xBFB2},
- {0xC5FF, 0xBFB3},{0xC600, 0xBFB4},{0xC601, 0xBFB5},{0xC602, 0x9E8E},{0xC603, 0x9E8F},{0xC604, 0x9E90},{0xC605, 0xBFB6},{0xC606, 0xBFB7},
- {0xC607, 0xBFB8},{0xC608, 0xBFB9},{0xC609, 0x9E91},{0xC60A, 0x9E92},{0xC60B, 0x9E93},{0xC60C, 0xBFBA},{0xC60D, 0x9E94},{0xC60E, 0x9E95},
- {0xC60F, 0x9E96},{0xC610, 0xBFBB},{0xC611, 0x9E97},{0xC612, 0x9E98},{0xC613, 0x9E99},{0xC614, 0x9E9A},{0xC615, 0x9E9B},{0xC616, 0x9E9C},
- {0xC617, 0x9E9D},{0xC618, 0xBFBC},{0xC619, 0xBFBD},{0xC61A, 0x9E9E},{0xC61B, 0xBFBE},{0xC61C, 0xBFBF},{0xC61D, 0x9E9F},{0xC61E, 0x9EA0},
- {0xC61F, 0x9EA1},{0xC620, 0x9EA2},{0xC621, 0x9EA3},{0xC622, 0x9EA4},{0xC623, 0x9EA5},{0xC624, 0xBFC0},{0xC625, 0xBFC1},{0xC626, 0x9EA6},
- {0xC627, 0x9EA7},{0xC628, 0xBFC2},{0xC629, 0x9EA8},{0xC62A, 0x9EA9},{0xC62B, 0x9EAA},{0xC62C, 0xBFC3},{0xC62D, 0xBFC4},{0xC62E, 0xBFC5},
- {0xC62F, 0x9EAB},{0xC630, 0xBFC6},{0xC631, 0x9EAC},{0xC632, 0x9EAD},{0xC633, 0xBFC7},{0xC634, 0xBFC8},{0xC635, 0xBFC9},{0xC636, 0x9EAE},
- {0xC637, 0xBFCA},{0xC638, 0x9EAF},{0xC639, 0xBFCB},{0xC63A, 0x9EB0},{0xC63B, 0xBFCC},{0xC63C, 0x9EB1},{0xC63D, 0x9EB2},{0xC63E, 0x9EB3},
- {0xC63F, 0x9EB4},{0xC640, 0xBFCD},{0xC641, 0xBFCE},{0xC642, 0x9EB5},{0xC643, 0x9EB6},{0xC644, 0xBFCF},{0xC645, 0x9EB7},{0xC646, 0x9EB8},
- {0xC647, 0x9EB9},{0xC648, 0xBFD0},{0xC649, 0x9EBA},{0xC64A, 0x9EBB},{0xC64B, 0x9EBC},{0xC64C, 0x9EBD},{0xC64D, 0x9EBE},{0xC64E, 0x9EBF},
- {0xC64F, 0x9EC0},{0xC650, 0xBFD1},{0xC651, 0xBFD2},{0xC652, 0x9EC1},{0xC653, 0xBFD3},{0xC654, 0xBFD4},{0xC655, 0xBFD5},{0xC656, 0x9EC2},
- {0xC657, 0x9EC3},{0xC658, 0x9EC4},{0xC659, 0x9EC5},{0xC65A, 0x9EC6},{0xC65B, 0x9EC7},{0xC65C, 0xBFD6},{0xC65D, 0xBFD7},{0xC65E, 0x9EC8},
- {0xC65F, 0x9EC9},{0xC660, 0xBFD8},{0xC661, 0x9ECA},{0xC662, 0x9ECB},{0xC663, 0x9ECC},{0xC664, 0x9ECD},{0xC665, 0x9ECE},{0xC666, 0x9ECF},
- {0xC667, 0x9ED0},{0xC668, 0x9ED1},{0xC669, 0x9ED2},{0xC66A, 0x9ED3},{0xC66B, 0x9ED4},{0xC66C, 0xBFD9},{0xC66D, 0x9ED5},{0xC66E, 0x9ED6},
- {0xC66F, 0xBFDA},{0xC670, 0x9ED7},{0xC671, 0xBFDB},{0xC672, 0x9ED8},{0xC673, 0x9ED9},{0xC674, 0x9EDA},{0xC675, 0x9EDB},{0xC676, 0x9EDC},
- {0xC677, 0x9EDD},{0xC678, 0xBFDC},{0xC679, 0xBFDD},{0xC67A, 0x9EDE},{0xC67B, 0x9EDF},{0xC67C, 0xBFDE},{0xC67D, 0x9EE0},{0xC67E, 0x9EE1},
- {0xC67F, 0x9EE2},{0xC680, 0xBFDF},{0xC681, 0x9EE3},{0xC682, 0x9EE4},{0xC683, 0x9EE5},{0xC684, 0x9EE6},{0xC685, 0x9EE7},{0xC686, 0x9EE8},
- {0xC687, 0x9EE9},{0xC688, 0xBFE0},{0xC689, 0xBFE1},{0xC68A, 0x9EEA},{0xC68B, 0xBFE2},{0xC68C, 0x9EEB},{0xC68D, 0xBFE3},{0xC68E, 0x9EEC},
- {0xC68F, 0x9EED},{0xC690, 0x9EEE},{0xC691, 0x9EEF},{0xC692, 0x9EF0},{0xC693, 0x9EF1},{0xC694, 0xBFE4},{0xC695, 0xBFE5},{0xC696, 0x9EF2},
- {0xC697, 0x9EF3},{0xC698, 0xBFE6},{0xC699, 0x9EF4},{0xC69A, 0x9EF5},{0xC69B, 0x9EF6},{0xC69C, 0xBFE7},{0xC69D, 0x9EF7},{0xC69E, 0x9EF8},
- {0xC69F, 0x9EF9},{0xC6A0, 0x9EFA},{0xC6A1, 0x9EFB},{0xC6A2, 0x9EFC},{0xC6A3, 0x9EFD},{0xC6A4, 0xBFE8},{0xC6A5, 0xBFE9},{0xC6A6, 0x9EFE},
- {0xC6A7, 0xBFEA},{0xC6A8, 0x9F41},{0xC6A9, 0xBFEB},{0xC6AA, 0x9F42},{0xC6AB, 0x9F43},{0xC6AC, 0x9F44},{0xC6AD, 0x9F45},{0xC6AE, 0x9F46},
- {0xC6AF, 0x9F47},{0xC6B0, 0xBFEC},{0xC6B1, 0xBFED},{0xC6B2, 0x9F48},{0xC6B3, 0x9F49},{0xC6B4, 0xBFEE},{0xC6B5, 0x9F4A},{0xC6B6, 0x9F4B},
- {0xC6B7, 0x9F4C},{0xC6B8, 0xBFEF},{0xC6B9, 0xBFF0},{0xC6BA, 0xBFF1},{0xC6BB, 0x9F4D},{0xC6BC, 0x9F4E},{0xC6BD, 0x9F4F},{0xC6BE, 0x9F50},
- {0xC6BF, 0x9F51},{0xC6C0, 0xBFF2},{0xC6C1, 0xBFF3},{0xC6C2, 0x9F52},{0xC6C3, 0xBFF4},{0xC6C4, 0x9F53},{0xC6C5, 0xBFF5},{0xC6C6, 0x9F54},
- {0xC6C7, 0x9F55},{0xC6C8, 0x9F56},{0xC6C9, 0x9F57},{0xC6CA, 0x9F58},{0xC6CB, 0x9F59},{0xC6CC, 0xBFF6},{0xC6CD, 0xBFF7},{0xC6CE, 0x9F5A},
- {0xC6CF, 0x9F61},{0xC6D0, 0xBFF8},{0xC6D1, 0x9F62},{0xC6D2, 0x9F63},{0xC6D3, 0x9F64},{0xC6D4, 0xBFF9},{0xC6D5, 0x9F65},{0xC6D6, 0x9F66},
- {0xC6D7, 0x9F67},{0xC6D8, 0x9F68},{0xC6D9, 0x9F69},{0xC6DA, 0x9F6A},{0xC6DB, 0x9F6B},{0xC6DC, 0xBFFA},{0xC6DD, 0xBFFB},{0xC6DE, 0x9F6C},
- {0xC6DF, 0x9F6D},{0xC6E0, 0xBFFC},{0xC6E1, 0xBFFD},{0xC6E2, 0x9F6E},{0xC6E3, 0x9F6F},{0xC6E4, 0x9F70},{0xC6E5, 0x9F71},{0xC6E6, 0x9F72},
- {0xC6E7, 0x9F73},{0xC6E8, 0xBFFE},{0xC6E9, 0xC0A1},{0xC6EA, 0x9F74},{0xC6EB, 0x9F75},{0xC6EC, 0xC0A2},{0xC6ED, 0x9F76},{0xC6EE, 0x9F77},
- {0xC6EF, 0x9F78},{0xC6F0, 0xC0A3},{0xC6F1, 0x9F79},{0xC6F2, 0x9F7A},{0xC6F3, 0x9F81},{0xC6F4, 0x9F82},{0xC6F5, 0x9F83},{0xC6F6, 0x9F84},
- {0xC6F7, 0x9F85},{0xC6F8, 0xC0A4},{0xC6F9, 0xC0A5},{0xC6FA, 0x9F86},{0xC6FB, 0x9F87},{0xC6FC, 0x9F88},{0xC6FD, 0xC0A6},{0xC6FE, 0x9F89},
- {0xC6FF, 0x9F8A},{0xC700, 0x9F8B},{0xC701, 0x9F8C},{0xC702, 0x9F8D},{0xC703, 0x9F8E},{0xC704, 0xC0A7},{0xC705, 0xC0A8},{0xC706, 0x9F8F},
- {0xC707, 0x9F90},{0xC708, 0xC0A9},{0xC709, 0x9F91},{0xC70A, 0x9F92},{0xC70B, 0x9F93},{0xC70C, 0xC0AA},{0xC70D, 0x9F94},{0xC70E, 0x9F95},
- {0xC70F, 0x9F96},{0xC710, 0x9F97},{0xC711, 0x9F98},{0xC712, 0x9F99},{0xC713, 0x9F9A},{0xC714, 0xC0AB},{0xC715, 0xC0AC},{0xC716, 0x9F9B},
- {0xC717, 0xC0AD},{0xC718, 0x9F9C},{0xC719, 0xC0AE},{0xC71A, 0x9F9D},{0xC71B, 0x9F9E},{0xC71C, 0x9F9F},{0xC71D, 0x9FA0},{0xC71E, 0x9FA1},
- {0xC71F, 0x9FA2},{0xC720, 0xC0AF},{0xC721, 0xC0B0},{0xC722, 0x9FA3},{0xC723, 0x9FA4},{0xC724, 0xC0B1},{0xC725, 0x9FA5},{0xC726, 0x9FA6},
- {0xC727, 0x9FA7},{0xC728, 0xC0B2},{0xC729, 0x9FA8},{0xC72A, 0x9FA9},{0xC72B, 0x9FAA},{0xC72C, 0x9FAB},{0xC72D, 0x9FAC},{0xC72E, 0x9FAD},
- {0xC72F, 0x9FAE},{0xC730, 0xC0B3},{0xC731, 0xC0B4},{0xC732, 0x9FAF},{0xC733, 0xC0B5},{0xC734, 0x9FB0},{0xC735, 0xC0B6},{0xC736, 0x9FB1},
- {0xC737, 0xC0B7},{0xC738, 0x9FB2},{0xC739, 0x9FB3},{0xC73A, 0x9FB4},{0xC73B, 0x9FB5},{0xC73C, 0xC0B8},{0xC73D, 0xC0B9},{0xC73E, 0x9FB6},
- {0xC73F, 0x9FB7},{0xC740, 0xC0BA},{0xC741, 0x9FB8},{0xC742, 0x9FB9},{0xC743, 0x9FBA},{0xC744, 0xC0BB},{0xC745, 0x9FBB},{0xC746, 0x9FBC},
- {0xC747, 0x9FBD},{0xC748, 0x9FBE},{0xC749, 0x9FBF},{0xC74A, 0xC0BC},{0xC74B, 0x9FC0},{0xC74C, 0xC0BD},{0xC74D, 0xC0BE},{0xC74E, 0x9FC1},
- {0xC74F, 0xC0BF},{0xC750, 0x9FC2},{0xC751, 0xC0C0},{0xC752, 0xC0C1},{0xC753, 0xC0C2},{0xC754, 0xC0C3},{0xC755, 0xC0C4},{0xC756, 0xC0C5},
- {0xC757, 0xC0C6},{0xC758, 0xC0C7},{0xC759, 0x9FC3},{0xC75A, 0x9FC4},{0xC75B, 0x9FC5},{0xC75C, 0xC0C8},{0xC75D, 0x9FC6},{0xC75E, 0x9FC7},
- {0xC75F, 0x9FC8},{0xC760, 0xC0C9},{0xC761, 0x9FC9},{0xC762, 0x9FCA},{0xC763, 0x9FCB},{0xC764, 0x9FCC},{0xC765, 0x9FCD},{0xC766, 0x9FCE},
- {0xC767, 0x9FCF},{0xC768, 0xC0CA},{0xC769, 0x9FD0},{0xC76A, 0x9FD1},{0xC76B, 0xC0CB},{0xC76C, 0x9FD2},{0xC76D, 0x9FD3},{0xC76E, 0x9FD4},
- {0xC76F, 0x9FD5},{0xC770, 0x9FD6},{0xC771, 0x9FD7},{0xC772, 0x9FD8},{0xC773, 0x9FD9},{0xC774, 0xC0CC},{0xC775, 0xC0CD},{0xC776, 0x9FDA},
- {0xC777, 0x9FDB},{0xC778, 0xC0CE},{0xC779, 0x9FDC},{0xC77A, 0x9FDD},{0xC77B, 0x9FDE},{0xC77C, 0xC0CF},{0xC77D, 0xC0D0},{0xC77E, 0xC0D1},
- {0xC77F, 0x9FDF},{0xC780, 0x9FE0},{0xC781, 0x9FE1},{0xC782, 0x9FE2},{0xC783, 0xC0D2},{0xC784, 0xC0D3},{0xC785, 0xC0D4},{0xC786, 0x9FE3},
- {0xC787, 0xC0D5},{0xC788, 0xC0D6},{0xC789, 0xC0D7},{0xC78A, 0xC0D8},{0xC78B, 0x9FE4},{0xC78C, 0x9FE5},{0xC78D, 0x9FE6},{0xC78E, 0xC0D9},
- {0xC78F, 0x9FE7},{0xC790, 0xC0DA},{0xC791, 0xC0DB},{0xC792, 0x9FE8},{0xC793, 0x9FE9},{0xC794, 0xC0DC},{0xC795, 0x9FEA},{0xC796, 0xC0DD},
- {0xC797, 0xC0DE},{0xC798, 0xC0DF},{0xC799, 0x9FEB},{0xC79A, 0xC0E0},{0xC79B, 0x9FEC},{0xC79C, 0x9FED},{0xC79D, 0x9FEE},{0xC79E, 0x9FEF},
- {0xC79F, 0x9FF0},{0xC7A0, 0xC0E1},{0xC7A1, 0xC0E2},{0xC7A2, 0x9FF1},{0xC7A3, 0xC0E3},{0xC7A4, 0xC0E4},{0xC7A5, 0xC0E5},{0xC7A6, 0xC0E6},
- {0xC7A7, 0x9FF2},{0xC7A8, 0x9FF3},{0xC7A9, 0x9FF4},{0xC7AA, 0x9FF5},{0xC7AB, 0x9FF6},{0xC7AC, 0xC0E7},{0xC7AD, 0xC0E8},{0xC7AE, 0x9FF7},
- {0xC7AF, 0x9FF8},{0xC7B0, 0xC0E9},{0xC7B1, 0x9FF9},{0xC7B2, 0x9FFA},{0xC7B3, 0x9FFB},{0xC7B4, 0xC0EA},{0xC7B5, 0x9FFC},{0xC7B6, 0x9FFD},
- {0xC7B7, 0x9FFE},{0xC7B8, 0xA041},{0xC7B9, 0xA042},{0xC7BA, 0xA043},{0xC7BB, 0xA044},{0xC7BC, 0xC0EB},{0xC7BD, 0xC0EC},{0xC7BE, 0xA045},
- {0xC7BF, 0xC0ED},{0xC7C0, 0xC0EE},{0xC7C1, 0xC0EF},{0xC7C2, 0xA046},{0xC7C3, 0xA047},{0xC7C4, 0xA048},{0xC7C5, 0xA049},{0xC7C6, 0xA04A},
- {0xC7C7, 0xA04B},{0xC7C8, 0xC0F0},{0xC7C9, 0xC0F1},{0xC7CA, 0xA04C},{0xC7CB, 0xA04D},{0xC7CC, 0xC0F2},{0xC7CD, 0xA04E},{0xC7CE, 0xC0F3},
- {0xC7CF, 0xA04F},{0xC7D0, 0xC0F4},{0xC7D1, 0xA050},{0xC7D2, 0xA051},{0xC7D3, 0xA052},{0xC7D4, 0xA053},{0xC7D5, 0xA054},{0xC7D6, 0xA055},
- {0xC7D7, 0xA056},{0xC7D8, 0xC0F5},{0xC7D9, 0xA057},{0xC7DA, 0xA058},{0xC7DB, 0xA059},{0xC7DC, 0xA05A},{0xC7DD, 0xC0F6},{0xC7DE, 0xA061},
- {0xC7DF, 0xA062},{0xC7E0, 0xA063},{0xC7E1, 0xA064},{0xC7E2, 0xA065},{0xC7E3, 0xA066},{0xC7E4, 0xC0F7},{0xC7E5, 0xA067},{0xC7E6, 0xA068},
- {0xC7E7, 0xA069},{0xC7E8, 0xC0F8},{0xC7E9, 0xA06A},{0xC7EA, 0xA06B},{0xC7EB, 0xA06C},{0xC7EC, 0xC0F9},{0xC7ED, 0xA06D},{0xC7EE, 0xA06E},
- {0xC7EF, 0xA06F},{0xC7F0, 0xA070},{0xC7F1, 0xA071},{0xC7F2, 0xA072},{0xC7F3, 0xA073},{0xC7F4, 0xA074},{0xC7F5, 0xA075},{0xC7F6, 0xA076},
- {0xC7F7, 0xA077},{0xC7F8, 0xA078},{0xC7F9, 0xA079},{0xC7FA, 0xA07A},{0xC7FB, 0xA081},{0xC7FC, 0xA082},{0xC7FD, 0xA083},{0xC7FE, 0xA084},
- {0xC7FF, 0xA085},{0xC800, 0xC0FA},{0xC801, 0xC0FB},{0xC802, 0xA086},{0xC803, 0xA087},{0xC804, 0xC0FC},{0xC805, 0xA088},{0xC806, 0xA089},
- {0xC807, 0xA08A},{0xC808, 0xC0FD},{0xC809, 0xA08B},{0xC80A, 0xC0FE},{0xC80B, 0xA08C},{0xC80C, 0xA08D},{0xC80D, 0xA08E},{0xC80E, 0xA08F},
- {0xC80F, 0xA090},{0xC810, 0xC1A1},{0xC811, 0xC1A2},{0xC812, 0xA091},{0xC813, 0xC1A3},{0xC814, 0xA092},{0xC815, 0xC1A4},{0xC816, 0xC1A5},
- {0xC817, 0xA093},{0xC818, 0xA094},{0xC819, 0xA095},{0xC81A, 0xA096},{0xC81B, 0xA097},{0xC81C, 0xC1A6},{0xC81D, 0xC1A7},{0xC81E, 0xA098},
- {0xC81F, 0xA099},{0xC820, 0xC1A8},{0xC821, 0xA09A},{0xC822, 0xA09B},{0xC823, 0xA09C},{0xC824, 0xC1A9},{0xC825, 0xA09D},{0xC826, 0xA09E},
- {0xC827, 0xA09F},{0xC828, 0xA0A0},{0xC829, 0xA0A1},{0xC82A, 0xA0A2},{0xC82B, 0xA0A3},{0xC82C, 0xC1AA},{0xC82D, 0xC1AB},{0xC82E, 0xA0A4},
- {0xC82F, 0xC1AC},{0xC830, 0xA0A5},{0xC831, 0xC1AD},{0xC832, 0xA0A6},{0xC833, 0xA0A7},{0xC834, 0xA0A8},{0xC835, 0xA0A9},{0xC836, 0xA0AA},
- {0xC837, 0xA0AB},{0xC838, 0xC1AE},{0xC839, 0xA0AC},{0xC83A, 0xA0AD},{0xC83B, 0xA0AE},{0xC83C, 0xC1AF},{0xC83D, 0xA0AF},{0xC83E, 0xA0B0},
- {0xC83F, 0xA0B1},{0xC840, 0xC1B0},{0xC841, 0xA0B2},{0xC842, 0xA0B3},{0xC843, 0xA0B4},{0xC844, 0xA0B5},{0xC845, 0xA0B6},{0xC846, 0xA0B7},
- {0xC847, 0xA0B8},{0xC848, 0xC1B1},{0xC849, 0xC1B2},{0xC84A, 0xA0B9},{0xC84B, 0xA0BA},{0xC84C, 0xC1B3},{0xC84D, 0xC1B4},{0xC84E, 0xA0BB},
- {0xC84F, 0xA0BC},{0xC850, 0xA0BD},{0xC851, 0xA0BE},{0xC852, 0xA0BF},{0xC853, 0xA0C0},{0xC854, 0xC1B5},{0xC855, 0xA0C1},{0xC856, 0xA0C2},
- {0xC857, 0xA0C3},{0xC858, 0xA0C4},{0xC859, 0xA0C5},{0xC85A, 0xA0C6},{0xC85B, 0xA0C7},{0xC85C, 0xA0C8},{0xC85D, 0xA0C9},{0xC85E, 0xA0CA},
- {0xC85F, 0xA0CB},{0xC860, 0xA0CC},{0xC861, 0xA0CD},{0xC862, 0xA0CE},{0xC863, 0xA0CF},{0xC864, 0xA0D0},{0xC865, 0xA0D1},{0xC866, 0xA0D2},
- {0xC867, 0xA0D3},{0xC868, 0xA0D4},{0xC869, 0xA0D5},{0xC86A, 0xA0D6},{0xC86B, 0xA0D7},{0xC86C, 0xA0D8},{0xC86D, 0xA0D9},{0xC86E, 0xA0DA},
- {0xC86F, 0xA0DB},{0xC870, 0xC1B6},{0xC871, 0xC1B7},{0xC872, 0xA0DC},{0xC873, 0xA0DD},{0xC874, 0xC1B8},{0xC875, 0xA0DE},{0xC876, 0xA0DF},
- {0xC877, 0xA0E0},{0xC878, 0xC1B9},{0xC879, 0xA0E1},{0xC87A, 0xC1BA},{0xC87B, 0xA0E2},{0xC87C, 0xA0E3},{0xC87D, 0xA0E4},{0xC87E, 0xA0E5},
- {0xC87F, 0xA0E6},{0xC880, 0xC1BB},{0xC881, 0xC1BC},{0xC882, 0xA0E7},{0xC883, 0xC1BD},{0xC884, 0xA0E8},{0xC885, 0xC1BE},{0xC886, 0xC1BF},
- {0xC887, 0xC1C0},{0xC888, 0xA0E9},{0xC889, 0xA0EA},{0xC88A, 0xA0EB},{0xC88B, 0xC1C1},{0xC88C, 0xC1C2},{0xC88D, 0xC1C3},{0xC88E, 0xA0EC},
- {0xC88F, 0xA0ED},{0xC890, 0xA0EE},{0xC891, 0xA0EF},{0xC892, 0xA0F0},{0xC893, 0xA0F1},{0xC894, 0xC1C4},{0xC895, 0xA0F2},{0xC896, 0xA0F3},
- {0xC897, 0xA0F4},{0xC898, 0xA0F5},{0xC899, 0xA0F6},{0xC89A, 0xA0F7},{0xC89B, 0xA0F8},{0xC89C, 0xA0F9},{0xC89D, 0xC1C5},{0xC89E, 0xA0FA},
- {0xC89F, 0xC1C6},{0xC8A0, 0xA0FB},{0xC8A1, 0xC1C7},{0xC8A2, 0xA0FC},{0xC8A3, 0xA0FD},{0xC8A4, 0xA0FE},{0xC8A5, 0xA141},{0xC8A6, 0xA142},
- {0xC8A7, 0xA143},{0xC8A8, 0xC1C8},{0xC8A9, 0xA144},{0xC8AA, 0xA145},{0xC8AB, 0xA146},{0xC8AC, 0xA147},{0xC8AD, 0xA148},{0xC8AE, 0xA149},
- {0xC8AF, 0xA14A},{0xC8B0, 0xA14B},{0xC8B1, 0xA14C},{0xC8B2, 0xA14D},{0xC8B3, 0xA14E},{0xC8B4, 0xA14F},{0xC8B5, 0xA150},{0xC8B6, 0xA151},
- {0xC8B7, 0xA152},{0xC8B8, 0xA153},{0xC8B9, 0xA154},{0xC8BA, 0xA155},{0xC8BB, 0xA156},{0xC8BC, 0xC1C9},{0xC8BD, 0xC1CA},{0xC8BE, 0xA157},
- {0xC8BF, 0xA158},{0xC8C0, 0xA159},{0xC8C1, 0xA15A},{0xC8C2, 0xA161},{0xC8C3, 0xA162},{0xC8C4, 0xC1CB},{0xC8C5, 0xA163},{0xC8C6, 0xA164},
- {0xC8C7, 0xA165},{0xC8C8, 0xC1CC},{0xC8C9, 0xA166},{0xC8CA, 0xA167},{0xC8CB, 0xA168},{0xC8CC, 0xC1CD},{0xC8CD, 0xA169},{0xC8CE, 0xA16A},
- {0xC8CF, 0xA16B},{0xC8D0, 0xA16C},{0xC8D1, 0xA16D},{0xC8D2, 0xA16E},{0xC8D3, 0xA16F},{0xC8D4, 0xC1CE},{0xC8D5, 0xC1CF},{0xC8D6, 0xA170},
- {0xC8D7, 0xC1D0},{0xC8D8, 0xA171},{0xC8D9, 0xC1D1},{0xC8DA, 0xA172},{0xC8DB, 0xA173},{0xC8DC, 0xA174},{0xC8DD, 0xA175},{0xC8DE, 0xA176},
- {0xC8DF, 0xA177},{0xC8E0, 0xC1D2},{0xC8E1, 0xC1D3},{0xC8E2, 0xA178},{0xC8E3, 0xA179},{0xC8E4, 0xC1D4},{0xC8E5, 0xA17A},{0xC8E6, 0xA181},
- {0xC8E7, 0xA182},{0xC8E8, 0xA183},{0xC8E9, 0xA184},{0xC8EA, 0xA185},{0xC8EB, 0xA186},{0xC8EC, 0xA187},{0xC8ED, 0xA188},{0xC8EE, 0xA189},
- {0xC8EF, 0xA18A},{0xC8F0, 0xA18B},{0xC8F1, 0xA18C},{0xC8F2, 0xA18D},{0xC8F3, 0xA18E},{0xC8F4, 0xA18F},{0xC8F5, 0xC1D5},{0xC8F6, 0xA190},
- {0xC8F7, 0xA191},{0xC8F8, 0xA192},{0xC8F9, 0xA193},{0xC8FA, 0xA194},{0xC8FB, 0xA195},{0xC8FC, 0xC1D6},{0xC8FD, 0xC1D7},{0xC8FE, 0xA196},
- {0xC8FF, 0xA197},{0xC900, 0xC1D8},{0xC901, 0xA198},{0xC902, 0xA199},{0xC903, 0xA19A},{0xC904, 0xC1D9},{0xC905, 0xC1DA},{0xC906, 0xC1DB},
- {0xC907, 0xA19B},{0xC908, 0xA19C},{0xC909, 0xA19D},{0xC90A, 0xA19E},{0xC90B, 0xA19F},{0xC90C, 0xC1DC},{0xC90D, 0xC1DD},{0xC90E, 0xA1A0},
- {0xC90F, 0xC1DE},{0xC910, 0xA241},{0xC911, 0xC1DF},{0xC912, 0xA242},{0xC913, 0xA243},{0xC914, 0xA244},{0xC915, 0xA245},{0xC916, 0xA246},
- {0xC917, 0xA247},{0xC918, 0xC1E0},{0xC919, 0xA248},{0xC91A, 0xA249},{0xC91B, 0xA24A},{0xC91C, 0xA24B},{0xC91D, 0xA24C},{0xC91E, 0xA24D},
- {0xC91F, 0xA24E},{0xC920, 0xA24F},{0xC921, 0xA250},{0xC922, 0xA251},{0xC923, 0xA252},{0xC924, 0xA253},{0xC925, 0xA254},{0xC926, 0xA255},
- {0xC927, 0xA256},{0xC928, 0xA257},{0xC929, 0xA258},{0xC92A, 0xA259},{0xC92B, 0xA25A},{0xC92C, 0xC1E1},{0xC92D, 0xA261},{0xC92E, 0xA262},
- {0xC92F, 0xA263},{0xC930, 0xA264},{0xC931, 0xA265},{0xC932, 0xA266},{0xC933, 0xA267},{0xC934, 0xC1E2},{0xC935, 0xA268},{0xC936, 0xA269},
- {0xC937, 0xA26A},{0xC938, 0xA26B},{0xC939, 0xA26C},{0xC93A, 0xA26D},{0xC93B, 0xA26E},{0xC93C, 0xA26F},{0xC93D, 0xA270},{0xC93E, 0xA271},
- {0xC93F, 0xA272},{0xC940, 0xA273},{0xC941, 0xA274},{0xC942, 0xA275},{0xC943, 0xA276},{0xC944, 0xA277},{0xC945, 0xA278},{0xC946, 0xA279},
- {0xC947, 0xA27A},{0xC948, 0xA281},{0xC949, 0xA282},{0xC94A, 0xA283},{0xC94B, 0xA284},{0xC94C, 0xA285},{0xC94D, 0xA286},{0xC94E, 0xA287},
- {0xC94F, 0xA288},{0xC950, 0xC1E3},{0xC951, 0xC1E4},{0xC952, 0xA289},{0xC953, 0xA28A},{0xC954, 0xC1E5},{0xC955, 0xA28B},{0xC956, 0xA28C},
- {0xC957, 0xA28D},{0xC958, 0xC1E6},{0xC959, 0xA28E},{0xC95A, 0xA28F},{0xC95B, 0xA290},{0xC95C, 0xA291},{0xC95D, 0xA292},{0xC95E, 0xA293},
- {0xC95F, 0xA294},{0xC960, 0xC1E7},{0xC961, 0xC1E8},{0xC962, 0xA295},{0xC963, 0xC1E9},{0xC964, 0xA296},{0xC965, 0xA297},{0xC966, 0xA298},
- {0xC967, 0xA299},{0xC968, 0xA29A},{0xC969, 0xA29B},{0xC96A, 0xA29C},{0xC96B, 0xA29D},{0xC96C, 0xC1EA},{0xC96D, 0xA29E},{0xC96E, 0xA29F},
- {0xC96F, 0xA2A0},{0xC970, 0xC1EB},{0xC971, 0xA341},{0xC972, 0xA342},{0xC973, 0xA343},{0xC974, 0xC1EC},{0xC975, 0xA344},{0xC976, 0xA345},
- {0xC977, 0xA346},{0xC978, 0xA347},{0xC979, 0xA348},{0xC97A, 0xA349},{0xC97B, 0xA34A},{0xC97C, 0xC1ED},{0xC97D, 0xA34B},{0xC97E, 0xA34C},
- {0xC97F, 0xA34D},{0xC980, 0xA34E},{0xC981, 0xA34F},{0xC982, 0xA350},{0xC983, 0xA351},{0xC984, 0xA352},{0xC985, 0xA353},{0xC986, 0xA354},
- {0xC987, 0xA355},{0xC988, 0xC1EE},{0xC989, 0xC1EF},{0xC98A, 0xA356},{0xC98B, 0xA357},{0xC98C, 0xC1F0},{0xC98D, 0xA358},{0xC98E, 0xA359},
- {0xC98F, 0xA35A},{0xC990, 0xC1F1},{0xC991, 0xA361},{0xC992, 0xA362},{0xC993, 0xA363},{0xC994, 0xA364},{0xC995, 0xA365},{0xC996, 0xA366},
- {0xC997, 0xA367},{0xC998, 0xC1F2},{0xC999, 0xC1F3},{0xC99A, 0xA368},{0xC99B, 0xC1F4},{0xC99C, 0xA369},{0xC99D, 0xC1F5},{0xC99E, 0xA36A},
- {0xC99F, 0xA36B},{0xC9A0, 0xA36C},{0xC9A1, 0xA36D},{0xC9A2, 0xA36E},{0xC9A3, 0xA36F},{0xC9A4, 0xA370},{0xC9A5, 0xA371},{0xC9A6, 0xA372},
- {0xC9A7, 0xA373},{0xC9A8, 0xA374},{0xC9A9, 0xA375},{0xC9AA, 0xA376},{0xC9AB, 0xA377},{0xC9AC, 0xA378},{0xC9AD, 0xA379},{0xC9AE, 0xA37A},
- {0xC9AF, 0xA381},{0xC9B0, 0xA382},{0xC9B1, 0xA383},{0xC9B2, 0xA384},{0xC9B3, 0xA385},{0xC9B4, 0xA386},{0xC9B5, 0xA387},{0xC9B6, 0xA388},
- {0xC9B7, 0xA389},{0xC9B8, 0xA38A},{0xC9B9, 0xA38B},{0xC9BA, 0xA38C},{0xC9BB, 0xA38D},{0xC9BC, 0xA38E},{0xC9BD, 0xA38F},{0xC9BE, 0xA390},
- {0xC9BF, 0xA391},{0xC9C0, 0xC1F6},{0xC9C1, 0xC1F7},{0xC9C2, 0xA392},{0xC9C3, 0xA393},{0xC9C4, 0xC1F8},{0xC9C5, 0xA394},{0xC9C6, 0xA395},
- {0xC9C7, 0xC1F9},{0xC9C8, 0xC1FA},{0xC9C9, 0xA396},{0xC9CA, 0xC1FB},{0xC9CB, 0xA397},{0xC9CC, 0xA398},{0xC9CD, 0xA399},{0xC9CE, 0xA39A},
- {0xC9CF, 0xA39B},{0xC9D0, 0xC1FC},{0xC9D1, 0xC1FD},{0xC9D2, 0xA39C},{0xC9D3, 0xC1FE},{0xC9D4, 0xA39D},{0xC9D5, 0xC2A1},{0xC9D6, 0xC2A2},
- {0xC9D7, 0xA39E},{0xC9D8, 0xA39F},{0xC9D9, 0xC2A3},{0xC9DA, 0xC2A4},{0xC9DB, 0xA3A0},{0xC9DC, 0xC2A5},{0xC9DD, 0xC2A6},{0xC9DE, 0xA441},
- {0xC9DF, 0xA442},{0xC9E0, 0xC2A7},{0xC9E1, 0xA443},{0xC9E2, 0xC2A8},{0xC9E3, 0xA444},{0xC9E4, 0xC2A9},{0xC9E5, 0xA445},{0xC9E6, 0xA446},
- {0xC9E7, 0xC2AA},{0xC9E8, 0xA447},{0xC9E9, 0xA448},{0xC9EA, 0xA449},{0xC9EB, 0xA44A},{0xC9EC, 0xC2AB},{0xC9ED, 0xC2AC},{0xC9EE, 0xA44B},
- {0xC9EF, 0xC2AD},{0xC9F0, 0xC2AE},{0xC9F1, 0xC2AF},{0xC9F2, 0xA44C},{0xC9F3, 0xA44D},{0xC9F4, 0xA44E},{0xC9F5, 0xA44F},{0xC9F6, 0xA450},
- {0xC9F7, 0xA451},{0xC9F8, 0xC2B0},{0xC9F9, 0xC2B1},{0xC9FA, 0xA452},{0xC9FB, 0xA453},{0xC9FC, 0xC2B2},{0xC9FD, 0xA454},{0xC9FE, 0xA455},
- {0xC9FF, 0xA456},{0xCA00, 0xC2B3},{0xCA01, 0xA457},{0xCA02, 0xA458},{0xCA03, 0xA459},{0xCA04, 0xA45A},{0xCA05, 0xA461},{0xCA06, 0xA462},
- {0xCA07, 0xA463},{0xCA08, 0xC2B4},{0xCA09, 0xC2B5},{0xCA0A, 0xA464},{0xCA0B, 0xC2B6},{0xCA0C, 0xC2B7},{0xCA0D, 0xC2B8},{0xCA0E, 0xA465},
- {0xCA0F, 0xA466},{0xCA10, 0xA467},{0xCA11, 0xA468},{0xCA12, 0xA469},{0xCA13, 0xA46A},{0xCA14, 0xC2B9},{0xCA15, 0xA46B},{0xCA16, 0xA46C},
- {0xCA17, 0xA46D},{0xCA18, 0xC2BA},{0xCA19, 0xA46E},{0xCA1A, 0xA46F},{0xCA1B, 0xA470},{0xCA1C, 0xA471},{0xCA1D, 0xA472},{0xCA1E, 0xA473},
- {0xCA1F, 0xA474},{0xCA20, 0xA475},{0xCA21, 0xA476},{0xCA22, 0xA477},{0xCA23, 0xA478},{0xCA24, 0xA479},{0xCA25, 0xA47A},{0xCA26, 0xA481},
- {0xCA27, 0xA482},{0xCA28, 0xA483},{0xCA29, 0xC2BB},{0xCA2A, 0xA484},{0xCA2B, 0xA485},{0xCA2C, 0xA486},{0xCA2D, 0xA487},{0xCA2E, 0xA488},
- {0xCA2F, 0xA489},{0xCA30, 0xA48A},{0xCA31, 0xA48B},{0xCA32, 0xA48C},{0xCA33, 0xA48D},{0xCA34, 0xA48E},{0xCA35, 0xA48F},{0xCA36, 0xA490},
- {0xCA37, 0xA491},{0xCA38, 0xA492},{0xCA39, 0xA493},{0xCA3A, 0xA494},{0xCA3B, 0xA495},{0xCA3C, 0xA496},{0xCA3D, 0xA497},{0xCA3E, 0xA498},
- {0xCA3F, 0xA499},{0xCA40, 0xA49A},{0xCA41, 0xA49B},{0xCA42, 0xA49C},{0xCA43, 0xA49D},{0xCA44, 0xA49E},{0xCA45, 0xA49F},{0xCA46, 0xA4A0},
- {0xCA47, 0xA541},{0xCA48, 0xA542},{0xCA49, 0xA543},{0xCA4A, 0xA544},{0xCA4B, 0xA545},{0xCA4C, 0xC2BC},{0xCA4D, 0xC2BD},{0xCA4E, 0xA546},
- {0xCA4F, 0xA547},{0xCA50, 0xC2BE},{0xCA51, 0xA548},{0xCA52, 0xA549},{0xCA53, 0xA54A},{0xCA54, 0xC2BF},{0xCA55, 0xA54B},{0xCA56, 0xA54C},
- {0xCA57, 0xA54D},{0xCA58, 0xA54E},{0xCA59, 0xA54F},{0xCA5A, 0xA550},{0xCA5B, 0xA551},{0xCA5C, 0xC2C0},{0xCA5D, 0xC2C1},{0xCA5E, 0xA552},
- {0xCA5F, 0xC2C2},{0xCA60, 0xC2C3},{0xCA61, 0xC2C4},{0xCA62, 0xA553},{0xCA63, 0xA554},{0xCA64, 0xA555},{0xCA65, 0xA556},{0xCA66, 0xA557},
- {0xCA67, 0xA558},{0xCA68, 0xC2C5},{0xCA69, 0xA559},{0xCA6A, 0xA55A},{0xCA6B, 0xA561},{0xCA6C, 0xA562},{0xCA6D, 0xA563},{0xCA6E, 0xA564},
- {0xCA6F, 0xA565},{0xCA70, 0xA566},{0xCA71, 0xA567},{0xCA72, 0xA568},{0xCA73, 0xA569},{0xCA74, 0xA56A},{0xCA75, 0xA56B},{0xCA76, 0xA56C},
- {0xCA77, 0xA56D},{0xCA78, 0xA56E},{0xCA79, 0xA56F},{0xCA7A, 0xA570},{0xCA7B, 0xA571},{0xCA7C, 0xA572},{0xCA7D, 0xC2C6},{0xCA7E, 0xA573},
- {0xCA7F, 0xA574},{0xCA80, 0xA575},{0xCA81, 0xA576},{0xCA82, 0xA577},{0xCA83, 0xA578},{0xCA84, 0xC2C7},{0xCA85, 0xA579},{0xCA86, 0xA57A},
- {0xCA87, 0xA581},{0xCA88, 0xA582},{0xCA89, 0xA583},{0xCA8A, 0xA584},{0xCA8B, 0xA585},{0xCA8C, 0xA586},{0xCA8D, 0xA587},{0xCA8E, 0xA588},
- {0xCA8F, 0xA589},{0xCA90, 0xA58A},{0xCA91, 0xA58B},{0xCA92, 0xA58C},{0xCA93, 0xA58D},{0xCA94, 0xA58E},{0xCA95, 0xA58F},{0xCA96, 0xA590},
- {0xCA97, 0xA591},{0xCA98, 0xC2C8},{0xCA99, 0xA592},{0xCA9A, 0xA593},{0xCA9B, 0xA594},{0xCA9C, 0xA595},{0xCA9D, 0xA596},{0xCA9E, 0xA597},
- {0xCA9F, 0xA598},{0xCAA0, 0xA599},{0xCAA1, 0xA59A},{0xCAA2, 0xA59B},{0xCAA3, 0xA59C},{0xCAA4, 0xA59D},{0xCAA5, 0xA59E},{0xCAA6, 0xA59F},
- {0xCAA7, 0xA5A0},{0xCAA8, 0xA641},{0xCAA9, 0xA642},{0xCAAA, 0xA643},{0xCAAB, 0xA644},{0xCAAC, 0xA645},{0xCAAD, 0xA646},{0xCAAE, 0xA647},
- {0xCAAF, 0xA648},{0xCAB0, 0xA649},{0xCAB1, 0xA64A},{0xCAB2, 0xA64B},{0xCAB3, 0xA64C},{0xCAB4, 0xA64D},{0xCAB5, 0xA64E},{0xCAB6, 0xA64F},
- {0xCAB7, 0xA650},{0xCAB8, 0xA651},{0xCAB9, 0xA652},{0xCABA, 0xA653},{0xCABB, 0xA654},{0xCABC, 0xC2C9},{0xCABD, 0xC2CA},{0xCABE, 0xA655},
- {0xCABF, 0xA656},{0xCAC0, 0xC2CB},{0xCAC1, 0xA657},{0xCAC2, 0xA658},{0xCAC3, 0xA659},{0xCAC4, 0xC2CC},{0xCAC5, 0xA65A},{0xCAC6, 0xA661},
- {0xCAC7, 0xA662},{0xCAC8, 0xA663},{0xCAC9, 0xA664},{0xCACA, 0xA665},{0xCACB, 0xA666},{0xCACC, 0xC2CD},{0xCACD, 0xC2CE},{0xCACE, 0xA667},
- {0xCACF, 0xC2CF},{0xCAD0, 0xA668},{0xCAD1, 0xC2D0},{0xCAD2, 0xA669},{0xCAD3, 0xC2D1},{0xCAD4, 0xA66A},{0xCAD5, 0xA66B},{0xCAD6, 0xA66C},
- {0xCAD7, 0xA66D},{0xCAD8, 0xC2D2},{0xCAD9, 0xC2D3},{0xCADA, 0xA66E},{0xCADB, 0xA66F},{0xCADC, 0xA670},{0xCADD, 0xA671},{0xCADE, 0xA672},
- {0xCADF, 0xA673},{0xCAE0, 0xC2D4},{0xCAE1, 0xA674},{0xCAE2, 0xA675},{0xCAE3, 0xA676},{0xCAE4, 0xA677},{0xCAE5, 0xA678},{0xCAE6, 0xA679},
- {0xCAE7, 0xA67A},{0xCAE8, 0xA681},{0xCAE9, 0xA682},{0xCAEA, 0xA683},{0xCAEB, 0xA684},{0xCAEC, 0xC2D5},{0xCAED, 0xA685},{0xCAEE, 0xA686},
- {0xCAEF, 0xA687},{0xCAF0, 0xA688},{0xCAF1, 0xA689},{0xCAF2, 0xA68A},{0xCAF3, 0xA68B},{0xCAF4, 0xC2D6},{0xCAF5, 0xA68C},{0xCAF6, 0xA68D},
- {0xCAF7, 0xA68E},{0xCAF8, 0xA68F},{0xCAF9, 0xA690},{0xCAFA, 0xA691},{0xCAFB, 0xA692},{0xCAFC, 0xA693},{0xCAFD, 0xA694},{0xCAFE, 0xA695},
- {0xCAFF, 0xA696},{0xCB00, 0xA697},{0xCB01, 0xA698},{0xCB02, 0xA699},{0xCB03, 0xA69A},{0xCB04, 0xA69B},{0xCB05, 0xA69C},{0xCB06, 0xA69D},
- {0xCB07, 0xA69E},{0xCB08, 0xC2D7},{0xCB09, 0xA69F},{0xCB0A, 0xA6A0},{0xCB0B, 0xA741},{0xCB0C, 0xA742},{0xCB0D, 0xA743},{0xCB0E, 0xA744},
- {0xCB0F, 0xA745},{0xCB10, 0xC2D8},{0xCB11, 0xA746},{0xCB12, 0xA747},{0xCB13, 0xA748},{0xCB14, 0xC2D9},{0xCB15, 0xA749},{0xCB16, 0xA74A},
- {0xCB17, 0xA74B},{0xCB18, 0xC2DA},{0xCB19, 0xA74C},{0xCB1A, 0xA74D},{0xCB1B, 0xA74E},{0xCB1C, 0xA74F},{0xCB1D, 0xA750},{0xCB1E, 0xA751},
- {0xCB1F, 0xA752},{0xCB20, 0xC2DB},{0xCB21, 0xC2DC},{0xCB22, 0xA753},{0xCB23, 0xA754},{0xCB24, 0xA755},{0xCB25, 0xA756},{0xCB26, 0xA757},
- {0xCB27, 0xA758},{0xCB28, 0xA759},{0xCB29, 0xA75A},{0xCB2A, 0xA761},{0xCB2B, 0xA762},{0xCB2C, 0xA763},{0xCB2D, 0xA764},{0xCB2E, 0xA765},
- {0xCB2F, 0xA766},{0xCB30, 0xA767},{0xCB31, 0xA768},{0xCB32, 0xA769},{0xCB33, 0xA76A},{0xCB34, 0xA76B},{0xCB35, 0xA76C},{0xCB36, 0xA76D},
- {0xCB37, 0xA76E},{0xCB38, 0xA76F},{0xCB39, 0xA770},{0xCB3A, 0xA771},{0xCB3B, 0xA772},{0xCB3C, 0xA773},{0xCB3D, 0xA774},{0xCB3E, 0xA775},
- {0xCB3F, 0xA776},{0xCB40, 0xA777},{0xCB41, 0xC2DD},{0xCB42, 0xA778},{0xCB43, 0xA779},{0xCB44, 0xA77A},{0xCB45, 0xA781},{0xCB46, 0xA782},
- {0xCB47, 0xA783},{0xCB48, 0xC2DE},{0xCB49, 0xC2DF},{0xCB4A, 0xA784},{0xCB4B, 0xA785},{0xCB4C, 0xC2E0},{0xCB4D, 0xA786},{0xCB4E, 0xA787},
- {0xCB4F, 0xA788},{0xCB50, 0xC2E1},{0xCB51, 0xA789},{0xCB52, 0xA78A},{0xCB53, 0xA78B},{0xCB54, 0xA78C},{0xCB55, 0xA78D},{0xCB56, 0xA78E},
- {0xCB57, 0xA78F},{0xCB58, 0xC2E2},{0xCB59, 0xC2E3},{0xCB5A, 0xA790},{0xCB5B, 0xA791},{0xCB5C, 0xA792},{0xCB5D, 0xC2E4},{0xCB5E, 0xA793},
- {0xCB5F, 0xA794},{0xCB60, 0xA795},{0xCB61, 0xA796},{0xCB62, 0xA797},{0xCB63, 0xA798},{0xCB64, 0xC2E5},{0xCB65, 0xA799},{0xCB66, 0xA79A},
- {0xCB67, 0xA79B},{0xCB68, 0xA79C},{0xCB69, 0xA79D},{0xCB6A, 0xA79E},{0xCB6B, 0xA79F},{0xCB6C, 0xA7A0},{0xCB6D, 0xA841},{0xCB6E, 0xA842},
- {0xCB6F, 0xA843},{0xCB70, 0xA844},{0xCB71, 0xA845},{0xCB72, 0xA846},{0xCB73, 0xA847},{0xCB74, 0xA848},{0xCB75, 0xA849},{0xCB76, 0xA84A},
- {0xCB77, 0xA84B},{0xCB78, 0xC2E6},{0xCB79, 0xC2E7},{0xCB7A, 0xA84C},{0xCB7B, 0xA84D},{0xCB7C, 0xA84E},{0xCB7D, 0xA84F},{0xCB7E, 0xA850},
- {0xCB7F, 0xA851},{0xCB80, 0xA852},{0xCB81, 0xA853},{0xCB82, 0xA854},{0xCB83, 0xA855},{0xCB84, 0xA856},{0xCB85, 0xA857},{0xCB86, 0xA858},
- {0xCB87, 0xA859},{0xCB88, 0xA85A},{0xCB89, 0xA861},{0xCB8A, 0xA862},{0xCB8B, 0xA863},{0xCB8C, 0xA864},{0xCB8D, 0xA865},{0xCB8E, 0xA866},
- {0xCB8F, 0xA867},{0xCB90, 0xA868},{0xCB91, 0xA869},{0xCB92, 0xA86A},{0xCB93, 0xA86B},{0xCB94, 0xA86C},{0xCB95, 0xA86D},{0xCB96, 0xA86E},
- {0xCB97, 0xA86F},{0xCB98, 0xA870},{0xCB99, 0xA871},{0xCB9A, 0xA872},{0xCB9B, 0xA873},{0xCB9C, 0xC2E8},{0xCB9D, 0xA874},{0xCB9E, 0xA875},
- {0xCB9F, 0xA876},{0xCBA0, 0xA877},{0xCBA1, 0xA878},{0xCBA2, 0xA879},{0xCBA3, 0xA87A},{0xCBA4, 0xA881},{0xCBA5, 0xA882},{0xCBA6, 0xA883},
- {0xCBA7, 0xA884},{0xCBA8, 0xA885},{0xCBA9, 0xA886},{0xCBAA, 0xA887},{0xCBAB, 0xA888},{0xCBAC, 0xA889},{0xCBAD, 0xA88A},{0xCBAE, 0xA88B},
- {0xCBAF, 0xA88C},{0xCBB0, 0xA88D},{0xCBB1, 0xA88E},{0xCBB2, 0xA88F},{0xCBB3, 0xA890},{0xCBB4, 0xA891},{0xCBB5, 0xA892},{0xCBB6, 0xA893},
- {0xCBB7, 0xA894},{0xCBB8, 0xC2E9},{0xCBB9, 0xA895},{0xCBBA, 0xA896},{0xCBBB, 0xA897},{0xCBBC, 0xA898},{0xCBBD, 0xA899},{0xCBBE, 0xA89A},
- {0xCBBF, 0xA89B},{0xCBC0, 0xA89C},{0xCBC1, 0xA89D},{0xCBC2, 0xA89E},{0xCBC3, 0xA89F},{0xCBC4, 0xA8A0},{0xCBC5, 0xA941},{0xCBC6, 0xA942},
- {0xCBC7, 0xA943},{0xCBC8, 0xA944},{0xCBC9, 0xA945},{0xCBCA, 0xA946},{0xCBCB, 0xA947},{0xCBCC, 0xA948},{0xCBCD, 0xA949},{0xCBCE, 0xA94A},
- {0xCBCF, 0xA94B},{0xCBD0, 0xA94C},{0xCBD1, 0xA94D},{0xCBD2, 0xA94E},{0xCBD3, 0xA94F},{0xCBD4, 0xC2EA},{0xCBD5, 0xA950},{0xCBD6, 0xA951},
- {0xCBD7, 0xA952},{0xCBD8, 0xA953},{0xCBD9, 0xA954},{0xCBDA, 0xA955},{0xCBDB, 0xA956},{0xCBDC, 0xA957},{0xCBDD, 0xA958},{0xCBDE, 0xA959},
- {0xCBDF, 0xA95A},{0xCBE0, 0xA961},{0xCBE1, 0xA962},{0xCBE2, 0xA963},{0xCBE3, 0xA964},{0xCBE4, 0xC2EB},{0xCBE5, 0xA965},{0xCBE6, 0xA966},
- {0xCBE7, 0xC2EC},{0xCBE8, 0xA967},{0xCBE9, 0xC2ED},{0xCBEA, 0xA968},{0xCBEB, 0xA969},{0xCBEC, 0xA96A},{0xCBED, 0xA96B},{0xCBEE, 0xA96C},
- {0xCBEF, 0xA96D},{0xCBF0, 0xA96E},{0xCBF1, 0xA96F},{0xCBF2, 0xA970},{0xCBF3, 0xA971},{0xCBF4, 0xA972},{0xCBF5, 0xA973},{0xCBF6, 0xA974},
- {0xCBF7, 0xA975},{0xCBF8, 0xA976},{0xCBF9, 0xA977},{0xCBFA, 0xA978},{0xCBFB, 0xA979},{0xCBFC, 0xA97A},{0xCBFD, 0xA981},{0xCBFE, 0xA982},
- {0xCBFF, 0xA983},{0xCC00, 0xA984},{0xCC01, 0xA985},{0xCC02, 0xA986},{0xCC03, 0xA987},{0xCC04, 0xA988},{0xCC05, 0xA989},{0xCC06, 0xA98A},
- {0xCC07, 0xA98B},{0xCC08, 0xA98C},{0xCC09, 0xA98D},{0xCC0A, 0xA98E},{0xCC0B, 0xA98F},{0xCC0C, 0xC2EE},{0xCC0D, 0xC2EF},{0xCC0E, 0xA990},
- {0xCC0F, 0xA991},{0xCC10, 0xC2F0},{0xCC11, 0xA992},{0xCC12, 0xA993},{0xCC13, 0xA994},{0xCC14, 0xC2F1},{0xCC15, 0xA995},{0xCC16, 0xA996},
- {0xCC17, 0xA997},{0xCC18, 0xA998},{0xCC19, 0xA999},{0xCC1A, 0xA99A},{0xCC1B, 0xA99B},{0xCC1C, 0xC2F2},{0xCC1D, 0xC2F3},{0xCC1E, 0xA99C},
- {0xCC1F, 0xA99D},{0xCC20, 0xA99E},{0xCC21, 0xC2F4},{0xCC22, 0xC2F5},{0xCC23, 0xA99F},{0xCC24, 0xA9A0},{0xCC25, 0xAA41},{0xCC26, 0xAA42},
- {0xCC27, 0xC2F6},{0xCC28, 0xC2F7},{0xCC29, 0xC2F8},{0xCC2A, 0xAA43},{0xCC2B, 0xAA44},{0xCC2C, 0xC2F9},{0xCC2D, 0xAA45},{0xCC2E, 0xC2FA},
- {0xCC2F, 0xAA46},{0xCC30, 0xC2FB},{0xCC31, 0xAA47},{0xCC32, 0xAA48},{0xCC33, 0xAA49},{0xCC34, 0xAA4A},{0xCC35, 0xAA4B},{0xCC36, 0xAA4C},
- {0xCC37, 0xAA4D},{0xCC38, 0xC2FC},{0xCC39, 0xC2FD},{0xCC3A, 0xAA4E},{0xCC3B, 0xC2FE},{0xCC3C, 0xC3A1},{0xCC3D, 0xC3A2},{0xCC3E, 0xC3A3},
- {0xCC3F, 0xAA4F},{0xCC40, 0xAA50},{0xCC41, 0xAA51},{0xCC42, 0xAA52},{0xCC43, 0xAA53},{0xCC44, 0xC3A4},{0xCC45, 0xC3A5},{0xCC46, 0xAA54},
- {0xCC47, 0xAA55},{0xCC48, 0xC3A6},{0xCC49, 0xAA56},{0xCC4A, 0xAA57},{0xCC4B, 0xAA58},{0xCC4C, 0xC3A7},{0xCC4D, 0xAA59},{0xCC4E, 0xAA5A},
- {0xCC4F, 0xAA61},{0xCC50, 0xAA62},{0xCC51, 0xAA63},{0xCC52, 0xAA64},{0xCC53, 0xAA65},{0xCC54, 0xC3A8},{0xCC55, 0xC3A9},{0xCC56, 0xAA66},
- {0xCC57, 0xC3AA},{0xCC58, 0xC3AB},{0xCC59, 0xC3AC},{0xCC5A, 0xAA67},{0xCC5B, 0xAA68},{0xCC5C, 0xAA69},{0xCC5D, 0xAA6A},{0xCC5E, 0xAA6B},
- {0xCC5F, 0xAA6C},{0xCC60, 0xC3AD},{0xCC61, 0xAA6D},{0xCC62, 0xAA6E},{0xCC63, 0xAA6F},{0xCC64, 0xC3AE},{0xCC65, 0xAA70},{0xCC66, 0xC3AF},
- {0xCC67, 0xAA71},{0xCC68, 0xC3B0},{0xCC69, 0xAA72},{0xCC6A, 0xAA73},{0xCC6B, 0xAA74},{0xCC6C, 0xAA75},{0xCC6D, 0xAA76},{0xCC6E, 0xAA77},
- {0xCC6F, 0xAA78},{0xCC70, 0xC3B1},{0xCC71, 0xAA79},{0xCC72, 0xAA7A},{0xCC73, 0xAA81},{0xCC74, 0xAA82},{0xCC75, 0xC3B2},{0xCC76, 0xAA83},
- {0xCC77, 0xAA84},{0xCC78, 0xAA85},{0xCC79, 0xAA86},{0xCC7A, 0xAA87},{0xCC7B, 0xAA88},{0xCC7C, 0xAA89},{0xCC7D, 0xAA8A},{0xCC7E, 0xAA8B},
- {0xCC7F, 0xAA8C},{0xCC80, 0xAA8D},{0xCC81, 0xAA8E},{0xCC82, 0xAA8F},{0xCC83, 0xAA90},{0xCC84, 0xAA91},{0xCC85, 0xAA92},{0xCC86, 0xAA93},
- {0xCC87, 0xAA94},{0xCC88, 0xAA95},{0xCC89, 0xAA96},{0xCC8A, 0xAA97},{0xCC8B, 0xAA98},{0xCC8C, 0xAA99},{0xCC8D, 0xAA9A},{0xCC8E, 0xAA9B},
- {0xCC8F, 0xAA9C},{0xCC90, 0xAA9D},{0xCC91, 0xAA9E},{0xCC92, 0xAA9F},{0xCC93, 0xAAA0},{0xCC94, 0xAB41},{0xCC95, 0xAB42},{0xCC96, 0xAB43},
- {0xCC97, 0xAB44},{0xCC98, 0xC3B3},{0xCC99, 0xC3B4},{0xCC9A, 0xAB45},{0xCC9B, 0xAB46},{0xCC9C, 0xC3B5},{0xCC9D, 0xAB47},{0xCC9E, 0xAB48},
- {0xCC9F, 0xAB49},{0xCCA0, 0xC3B6},{0xCCA1, 0xAB4A},{0xCCA2, 0xAB4B},{0xCCA3, 0xAB4C},{0xCCA4, 0xAB4D},{0xCCA5, 0xAB4E},{0xCCA6, 0xAB4F},
- {0xCCA7, 0xAB50},{0xCCA8, 0xC3B7},{0xCCA9, 0xC3B8},{0xCCAA, 0xAB51},{0xCCAB, 0xC3B9},{0xCCAC, 0xC3BA},{0xCCAD, 0xC3BB},{0xCCAE, 0xAB52},
- {0xCCAF, 0xAB53},{0xCCB0, 0xAB54},{0xCCB1, 0xAB55},{0xCCB2, 0xAB56},{0xCCB3, 0xAB57},{0xCCB4, 0xC3BC},{0xCCB5, 0xC3BD},{0xCCB6, 0xAB58},
- {0xCCB7, 0xAB59},{0xCCB8, 0xC3BE},{0xCCB9, 0xAB5A},{0xCCBA, 0xAB61},{0xCCBB, 0xAB62},{0xCCBC, 0xC3BF},{0xCCBD, 0xAB63},{0xCCBE, 0xAB64},
- {0xCCBF, 0xAB65},{0xCCC0, 0xAB66},{0xCCC1, 0xAB67},{0xCCC2, 0xAB68},{0xCCC3, 0xAB69},{0xCCC4, 0xC3C0},{0xCCC5, 0xC3C1},{0xCCC6, 0xAB6A},
- {0xCCC7, 0xC3C2},{0xCCC8, 0xAB6B},{0xCCC9, 0xC3C3},{0xCCCA, 0xAB6C},{0xCCCB, 0xAB6D},{0xCCCC, 0xAB6E},{0xCCCD, 0xAB6F},{0xCCCE, 0xAB70},
- {0xCCCF, 0xAB71},{0xCCD0, 0xC3C4},{0xCCD1, 0xAB72},{0xCCD2, 0xAB73},{0xCCD3, 0xAB74},{0xCCD4, 0xC3C5},{0xCCD5, 0xAB75},{0xCCD6, 0xAB76},
- {0xCCD7, 0xAB77},{0xCCD8, 0xAB78},{0xCCD9, 0xAB79},{0xCCDA, 0xAB7A},{0xCCDB, 0xAB81},{0xCCDC, 0xAB82},{0xCCDD, 0xAB83},{0xCCDE, 0xAB84},
- {0xCCDF, 0xAB85},{0xCCE0, 0xAB86},{0xCCE1, 0xAB87},{0xCCE2, 0xAB88},{0xCCE3, 0xAB89},{0xCCE4, 0xC3C6},{0xCCE5, 0xAB8A},{0xCCE6, 0xAB8B},
- {0xCCE7, 0xAB8C},{0xCCE8, 0xAB8D},{0xCCE9, 0xAB8E},{0xCCEA, 0xAB8F},{0xCCEB, 0xAB90},{0xCCEC, 0xC3C7},{0xCCED, 0xAB91},{0xCCEE, 0xAB92},
- {0xCCEF, 0xAB93},{0xCCF0, 0xC3C8},{0xCCF1, 0xAB94},{0xCCF2, 0xAB95},{0xCCF3, 0xAB96},{0xCCF4, 0xAB97},{0xCCF5, 0xAB98},{0xCCF6, 0xAB99},
- {0xCCF7, 0xAB9A},{0xCCF8, 0xAB9B},{0xCCF9, 0xAB9C},{0xCCFA, 0xAB9D},{0xCCFB, 0xAB9E},{0xCCFC, 0xAB9F},{0xCCFD, 0xABA0},{0xCCFE, 0xAC41},
- {0xCCFF, 0xAC42},{0xCD00, 0xAC43},{0xCD01, 0xC3C9},{0xCD02, 0xAC44},{0xCD03, 0xAC45},{0xCD04, 0xAC46},{0xCD05, 0xAC47},{0xCD06, 0xAC48},
- {0xCD07, 0xAC49},{0xCD08, 0xC3CA},{0xCD09, 0xC3CB},{0xCD0A, 0xAC4A},{0xCD0B, 0xAC4B},{0xCD0C, 0xC3CC},{0xCD0D, 0xAC4C},{0xCD0E, 0xAC4D},
- {0xCD0F, 0xAC4E},{0xCD10, 0xC3CD},{0xCD11, 0xAC4F},{0xCD12, 0xAC50},{0xCD13, 0xAC51},{0xCD14, 0xAC52},{0xCD15, 0xAC53},{0xCD16, 0xAC54},
- {0xCD17, 0xAC55},{0xCD18, 0xC3CE},{0xCD19, 0xC3CF},{0xCD1A, 0xAC56},{0xCD1B, 0xC3D0},{0xCD1C, 0xAC57},{0xCD1D, 0xC3D1},{0xCD1E, 0xAC58},
- {0xCD1F, 0xAC59},{0xCD20, 0xAC5A},{0xCD21, 0xAC61},{0xCD22, 0xAC62},{0xCD23, 0xAC63},{0xCD24, 0xC3D2},{0xCD25, 0xAC64},{0xCD26, 0xAC65},
- {0xCD27, 0xAC66},{0xCD28, 0xC3D3},{0xCD29, 0xAC67},{0xCD2A, 0xAC68},{0xCD2B, 0xAC69},{0xCD2C, 0xC3D4},{0xCD2D, 0xAC6A},{0xCD2E, 0xAC6B},
- {0xCD2F, 0xAC6C},{0xCD30, 0xAC6D},{0xCD31, 0xAC6E},{0xCD32, 0xAC6F},{0xCD33, 0xAC70},{0xCD34, 0xAC71},{0xCD35, 0xAC72},{0xCD36, 0xAC73},
- {0xCD37, 0xAC74},{0xCD38, 0xAC75},{0xCD39, 0xC3D5},{0xCD3A, 0xAC76},{0xCD3B, 0xAC77},{0xCD3C, 0xAC78},{0xCD3D, 0xAC79},{0xCD3E, 0xAC7A},
- {0xCD3F, 0xAC81},{0xCD40, 0xAC82},{0xCD41, 0xAC83},{0xCD42, 0xAC84},{0xCD43, 0xAC85},{0xCD44, 0xAC86},{0xCD45, 0xAC87},{0xCD46, 0xAC88},
- {0xCD47, 0xAC89},{0xCD48, 0xAC8A},{0xCD49, 0xAC8B},{0xCD4A, 0xAC8C},{0xCD4B, 0xAC8D},{0xCD4C, 0xAC8E},{0xCD4D, 0xAC8F},{0xCD4E, 0xAC90},
- {0xCD4F, 0xAC91},{0xCD50, 0xAC92},{0xCD51, 0xAC93},{0xCD52, 0xAC94},{0xCD53, 0xAC95},{0xCD54, 0xAC96},{0xCD55, 0xAC97},{0xCD56, 0xAC98},
- {0xCD57, 0xAC99},{0xCD58, 0xAC9A},{0xCD59, 0xAC9B},{0xCD5A, 0xAC9C},{0xCD5B, 0xAC9D},{0xCD5C, 0xC3D6},{0xCD5D, 0xAC9E},{0xCD5E, 0xAC9F},
- {0xCD5F, 0xACA0},{0xCD60, 0xC3D7},{0xCD61, 0xAD41},{0xCD62, 0xAD42},{0xCD63, 0xAD43},{0xCD64, 0xC3D8},{0xCD65, 0xAD44},{0xCD66, 0xAD45},
- {0xCD67, 0xAD46},{0xCD68, 0xAD47},{0xCD69, 0xAD48},{0xCD6A, 0xAD49},{0xCD6B, 0xAD4A},{0xCD6C, 0xC3D9},{0xCD6D, 0xC3DA},{0xCD6E, 0xAD4B},
- {0xCD6F, 0xC3DB},{0xCD70, 0xAD4C},{0xCD71, 0xC3DC},{0xCD72, 0xAD4D},{0xCD73, 0xAD4E},{0xCD74, 0xAD4F},{0xCD75, 0xAD50},{0xCD76, 0xAD51},
- {0xCD77, 0xAD52},{0xCD78, 0xC3DD},{0xCD79, 0xAD53},{0xCD7A, 0xAD54},{0xCD7B, 0xAD55},{0xCD7C, 0xAD56},{0xCD7D, 0xAD57},{0xCD7E, 0xAD58},
- {0xCD7F, 0xAD59},{0xCD80, 0xAD5A},{0xCD81, 0xAD61},{0xCD82, 0xAD62},{0xCD83, 0xAD63},{0xCD84, 0xAD64},{0xCD85, 0xAD65},{0xCD86, 0xAD66},
- {0xCD87, 0xAD67},{0xCD88, 0xC3DE},{0xCD89, 0xAD68},{0xCD8A, 0xAD69},{0xCD8B, 0xAD6A},{0xCD8C, 0xAD6B},{0xCD8D, 0xAD6C},{0xCD8E, 0xAD6D},
- {0xCD8F, 0xAD6E},{0xCD90, 0xAD6F},{0xCD91, 0xAD70},{0xCD92, 0xAD71},{0xCD93, 0xAD72},{0xCD94, 0xC3DF},{0xCD95, 0xC3E0},{0xCD96, 0xAD73},
- {0xCD97, 0xAD74},{0xCD98, 0xC3E1},{0xCD99, 0xAD75},{0xCD9A, 0xAD76},{0xCD9B, 0xAD77},{0xCD9C, 0xC3E2},{0xCD9D, 0xAD78},{0xCD9E, 0xAD79},
- {0xCD9F, 0xAD7A},{0xCDA0, 0xAD81},{0xCDA1, 0xAD82},{0xCDA2, 0xAD83},{0xCDA3, 0xAD84},{0xCDA4, 0xC3E3},{0xCDA5, 0xC3E4},{0xCDA6, 0xAD85},
- {0xCDA7, 0xC3E5},{0xCDA8, 0xAD86},{0xCDA9, 0xC3E6},{0xCDAA, 0xAD87},{0xCDAB, 0xAD88},{0xCDAC, 0xAD89},{0xCDAD, 0xAD8A},{0xCDAE, 0xAD8B},
- {0xCDAF, 0xAD8C},{0xCDB0, 0xC3E7},{0xCDB1, 0xAD8D},{0xCDB2, 0xAD8E},{0xCDB3, 0xAD8F},{0xCDB4, 0xAD90},{0xCDB5, 0xAD91},{0xCDB6, 0xAD92},
- {0xCDB7, 0xAD93},{0xCDB8, 0xAD94},{0xCDB9, 0xAD95},{0xCDBA, 0xAD96},{0xCDBB, 0xAD97},{0xCDBC, 0xAD98},{0xCDBD, 0xAD99},{0xCDBE, 0xAD9A},
- {0xCDBF, 0xAD9B},{0xCDC0, 0xAD9C},{0xCDC1, 0xAD9D},{0xCDC2, 0xAD9E},{0xCDC3, 0xAD9F},{0xCDC4, 0xC3E8},{0xCDC5, 0xADA0},{0xCDC6, 0xAE41},
- {0xCDC7, 0xAE42},{0xCDC8, 0xAE43},{0xCDC9, 0xAE44},{0xCDCA, 0xAE45},{0xCDCB, 0xAE46},{0xCDCC, 0xC3E9},{0xCDCD, 0xAE47},{0xCDCE, 0xAE48},
- {0xCDCF, 0xAE49},{0xCDD0, 0xC3EA},{0xCDD1, 0xAE4A},{0xCDD2, 0xAE4B},{0xCDD3, 0xAE4C},{0xCDD4, 0xAE4D},{0xCDD5, 0xAE4E},{0xCDD6, 0xAE4F},
- {0xCDD7, 0xAE50},{0xCDD8, 0xAE51},{0xCDD9, 0xAE52},{0xCDDA, 0xAE53},{0xCDDB, 0xAE54},{0xCDDC, 0xAE55},{0xCDDD, 0xAE56},{0xCDDE, 0xAE57},
- {0xCDDF, 0xAE58},{0xCDE0, 0xAE59},{0xCDE1, 0xAE5A},{0xCDE2, 0xAE61},{0xCDE3, 0xAE62},{0xCDE4, 0xAE63},{0xCDE5, 0xAE64},{0xCDE6, 0xAE65},
- {0xCDE7, 0xAE66},{0xCDE8, 0xC3EB},{0xCDE9, 0xAE67},{0xCDEA, 0xAE68},{0xCDEB, 0xAE69},{0xCDEC, 0xC3EC},{0xCDED, 0xAE6A},{0xCDEE, 0xAE6B},
- {0xCDEF, 0xAE6C},{0xCDF0, 0xC3ED},{0xCDF1, 0xAE6D},{0xCDF2, 0xAE6E},{0xCDF3, 0xAE6F},{0xCDF4, 0xAE70},{0xCDF5, 0xAE71},{0xCDF6, 0xAE72},
- {0xCDF7, 0xAE73},{0xCDF8, 0xC3EE},{0xCDF9, 0xC3EF},{0xCDFA, 0xAE74},{0xCDFB, 0xC3F0},{0xCDFC, 0xAE75},{0xCDFD, 0xC3F1},{0xCDFE, 0xAE76},
- {0xCDFF, 0xAE77},{0xCE00, 0xAE78},{0xCE01, 0xAE79},{0xCE02, 0xAE7A},{0xCE03, 0xAE81},{0xCE04, 0xC3F2},{0xCE05, 0xAE82},{0xCE06, 0xAE83},
- {0xCE07, 0xAE84},{0xCE08, 0xC3F3},{0xCE09, 0xAE85},{0xCE0A, 0xAE86},{0xCE0B, 0xAE87},{0xCE0C, 0xC3F4},{0xCE0D, 0xAE88},{0xCE0E, 0xAE89},
- {0xCE0F, 0xAE8A},{0xCE10, 0xAE8B},{0xCE11, 0xAE8C},{0xCE12, 0xAE8D},{0xCE13, 0xAE8E},{0xCE14, 0xC3F5},{0xCE15, 0xAE8F},{0xCE16, 0xAE90},
- {0xCE17, 0xAE91},{0xCE18, 0xAE92},{0xCE19, 0xC3F6},{0xCE1A, 0xAE93},{0xCE1B, 0xAE94},{0xCE1C, 0xAE95},{0xCE1D, 0xAE96},{0xCE1E, 0xAE97},
- {0xCE1F, 0xAE98},{0xCE20, 0xC3F7},{0xCE21, 0xC3F8},{0xCE22, 0xAE99},{0xCE23, 0xAE9A},{0xCE24, 0xC3F9},{0xCE25, 0xAE9B},{0xCE26, 0xAE9C},
- {0xCE27, 0xAE9D},{0xCE28, 0xC3FA},{0xCE29, 0xAE9E},{0xCE2A, 0xAE9F},{0xCE2B, 0xAEA0},{0xCE2C, 0xAF41},{0xCE2D, 0xAF42},{0xCE2E, 0xAF43},
- {0xCE2F, 0xAF44},{0xCE30, 0xC3FB},{0xCE31, 0xC3FC},{0xCE32, 0xAF45},{0xCE33, 0xC3FD},{0xCE34, 0xAF46},{0xCE35, 0xC3FE},{0xCE36, 0xAF47},
- {0xCE37, 0xAF48},{0xCE38, 0xAF49},{0xCE39, 0xAF4A},{0xCE3A, 0xAF4B},{0xCE3B, 0xAF4C},{0xCE3C, 0xAF4D},{0xCE3D, 0xAF4E},{0xCE3E, 0xAF4F},
- {0xCE3F, 0xAF50},{0xCE40, 0xAF51},{0xCE41, 0xAF52},{0xCE42, 0xAF53},{0xCE43, 0xAF54},{0xCE44, 0xAF55},{0xCE45, 0xAF56},{0xCE46, 0xAF57},
- {0xCE47, 0xAF58},{0xCE48, 0xAF59},{0xCE49, 0xAF5A},{0xCE4A, 0xAF61},{0xCE4B, 0xAF62},{0xCE4C, 0xAF63},{0xCE4D, 0xAF64},{0xCE4E, 0xAF65},
- {0xCE4F, 0xAF66},{0xCE50, 0xAF67},{0xCE51, 0xAF68},{0xCE52, 0xAF69},{0xCE53, 0xAF6A},{0xCE54, 0xAF6B},{0xCE55, 0xAF6C},{0xCE56, 0xAF6D},
- {0xCE57, 0xAF6E},{0xCE58, 0xC4A1},{0xCE59, 0xC4A2},{0xCE5A, 0xAF6F},{0xCE5B, 0xAF70},{0xCE5C, 0xC4A3},{0xCE5D, 0xAF71},{0xCE5E, 0xAF72},
- {0xCE5F, 0xC4A4},{0xCE60, 0xC4A5},{0xCE61, 0xC4A6},{0xCE62, 0xAF73},{0xCE63, 0xAF74},{0xCE64, 0xAF75},{0xCE65, 0xAF76},{0xCE66, 0xAF77},
- {0xCE67, 0xAF78},{0xCE68, 0xC4A7},{0xCE69, 0xC4A8},{0xCE6A, 0xAF79},{0xCE6B, 0xC4A9},{0xCE6C, 0xAF7A},{0xCE6D, 0xC4AA},{0xCE6E, 0xAF81},
- {0xCE6F, 0xAF82},{0xCE70, 0xAF83},{0xCE71, 0xAF84},{0xCE72, 0xAF85},{0xCE73, 0xAF86},{0xCE74, 0xC4AB},{0xCE75, 0xC4AC},{0xCE76, 0xAF87},
- {0xCE77, 0xAF88},{0xCE78, 0xC4AD},{0xCE79, 0xAF89},{0xCE7A, 0xAF8A},{0xCE7B, 0xAF8B},{0xCE7C, 0xC4AE},{0xCE7D, 0xAF8C},{0xCE7E, 0xAF8D},
- {0xCE7F, 0xAF8E},{0xCE80, 0xAF8F},{0xCE81, 0xAF90},{0xCE82, 0xAF91},{0xCE83, 0xAF92},{0xCE84, 0xC4AF},{0xCE85, 0xC4B0},{0xCE86, 0xAF93},
- {0xCE87, 0xC4B1},{0xCE88, 0xAF94},{0xCE89, 0xC4B2},{0xCE8A, 0xAF95},{0xCE8B, 0xAF96},{0xCE8C, 0xAF97},{0xCE8D, 0xAF98},{0xCE8E, 0xAF99},
- {0xCE8F, 0xAF9A},{0xCE90, 0xC4B3},{0xCE91, 0xC4B4},{0xCE92, 0xAF9B},{0xCE93, 0xAF9C},{0xCE94, 0xC4B5},{0xCE95, 0xAF9D},{0xCE96, 0xAF9E},
- {0xCE97, 0xAF9F},{0xCE98, 0xC4B6},{0xCE99, 0xAFA0},{0xCE9A, 0xB041},{0xCE9B, 0xB042},{0xCE9C, 0xB043},{0xCE9D, 0xB044},{0xCE9E, 0xB045},
- {0xCE9F, 0xB046},{0xCEA0, 0xC4B7},{0xCEA1, 0xC4B8},{0xCEA2, 0xB047},{0xCEA3, 0xC4B9},{0xCEA4, 0xC4BA},{0xCEA5, 0xC4BB},{0xCEA6, 0xB048},
- {0xCEA7, 0xB049},{0xCEA8, 0xB04A},{0xCEA9, 0xB04B},{0xCEAA, 0xB04C},{0xCEAB, 0xB04D},{0xCEAC, 0xC4BC},{0xCEAD, 0xC4BD},{0xCEAE, 0xB04E},
- {0xCEAF, 0xB04F},{0xCEB0, 0xB050},{0xCEB1, 0xB051},{0xCEB2, 0xB052},{0xCEB3, 0xB053},{0xCEB4, 0xB054},{0xCEB5, 0xB055},{0xCEB6, 0xB056},
- {0xCEB7, 0xB057},{0xCEB8, 0xB058},{0xCEB9, 0xB059},{0xCEBA, 0xB05A},{0xCEBB, 0xB061},{0xCEBC, 0xB062},{0xCEBD, 0xB063},{0xCEBE, 0xB064},
- {0xCEBF, 0xB065},{0xCEC0, 0xB066},{0xCEC1, 0xC4BE},{0xCEC2, 0xB067},{0xCEC3, 0xB068},{0xCEC4, 0xB069},{0xCEC5, 0xB06A},{0xCEC6, 0xB06B},
- {0xCEC7, 0xB06C},{0xCEC8, 0xB06D},{0xCEC9, 0xB06E},{0xCECA, 0xB06F},{0xCECB, 0xB070},{0xCECC, 0xB071},{0xCECD, 0xB072},{0xCECE, 0xB073},
- {0xCECF, 0xB074},{0xCED0, 0xB075},{0xCED1, 0xB076},{0xCED2, 0xB077},{0xCED3, 0xB078},{0xCED4, 0xB079},{0xCED5, 0xB07A},{0xCED6, 0xB081},
- {0xCED7, 0xB082},{0xCED8, 0xB083},{0xCED9, 0xB084},{0xCEDA, 0xB085},{0xCEDB, 0xB086},{0xCEDC, 0xB087},{0xCEDD, 0xB088},{0xCEDE, 0xB089},
- {0xCEDF, 0xB08A},{0xCEE0, 0xB08B},{0xCEE1, 0xB08C},{0xCEE2, 0xB08D},{0xCEE3, 0xB08E},{0xCEE4, 0xC4BF},{0xCEE5, 0xC4C0},{0xCEE6, 0xB08F},
- {0xCEE7, 0xB090},{0xCEE8, 0xC4C1},{0xCEE9, 0xB091},{0xCEEA, 0xB092},{0xCEEB, 0xC4C2},{0xCEEC, 0xC4C3},{0xCEED, 0xB093},{0xCEEE, 0xB094},
- {0xCEEF, 0xB095},{0xCEF0, 0xB096},{0xCEF1, 0xB097},{0xCEF2, 0xB098},{0xCEF3, 0xB099},{0xCEF4, 0xC4C4},{0xCEF5, 0xC4C5},{0xCEF6, 0xB09A},
- {0xCEF7, 0xC4C6},{0xCEF8, 0xC4C7},{0xCEF9, 0xC4C8},{0xCEFA, 0xB09B},{0xCEFB, 0xB09C},{0xCEFC, 0xB09D},{0xCEFD, 0xB09E},{0xCEFE, 0xB09F},
- {0xCEFF, 0xB0A0},{0xCF00, 0xC4C9},{0xCF01, 0xC4CA},{0xCF02, 0xB141},{0xCF03, 0xB142},{0xCF04, 0xC4CB},{0xCF05, 0xB143},{0xCF06, 0xB144},
- {0xCF07, 0xB145},{0xCF08, 0xC4CC},{0xCF09, 0xB146},{0xCF0A, 0xB147},{0xCF0B, 0xB148},{0xCF0C, 0xB149},{0xCF0D, 0xB14A},{0xCF0E, 0xB14B},
- {0xCF0F, 0xB14C},{0xCF10, 0xC4CD},{0xCF11, 0xC4CE},{0xCF12, 0xB14D},{0xCF13, 0xC4CF},{0xCF14, 0xB14E},{0xCF15, 0xC4D0},{0xCF16, 0xB14F},
- {0xCF17, 0xB150},{0xCF18, 0xB151},{0xCF19, 0xB152},{0xCF1A, 0xB153},{0xCF1B, 0xB154},{0xCF1C, 0xC4D1},{0xCF1D, 0xB155},{0xCF1E, 0xB156},
- {0xCF1F, 0xB157},{0xCF20, 0xC4D2},{0xCF21, 0xB158},{0xCF22, 0xB159},{0xCF23, 0xB15A},{0xCF24, 0xC4D3},{0xCF25, 0xB161},{0xCF26, 0xB162},
- {0xCF27, 0xB163},{0xCF28, 0xB164},{0xCF29, 0xB165},{0xCF2A, 0xB166},{0xCF2B, 0xB167},{0xCF2C, 0xC4D4},{0xCF2D, 0xC4D5},{0xCF2E, 0xB168},
- {0xCF2F, 0xC4D6},{0xCF30, 0xC4D7},{0xCF31, 0xC4D8},{0xCF32, 0xB169},{0xCF33, 0xB16A},{0xCF34, 0xB16B},{0xCF35, 0xB16C},{0xCF36, 0xB16D},
- {0xCF37, 0xB16E},{0xCF38, 0xC4D9},{0xCF39, 0xB16F},{0xCF3A, 0xB170},{0xCF3B, 0xB171},{0xCF3C, 0xB172},{0xCF3D, 0xB173},{0xCF3E, 0xB174},
- {0xCF3F, 0xB175},{0xCF40, 0xB176},{0xCF41, 0xB177},{0xCF42, 0xB178},{0xCF43, 0xB179},{0xCF44, 0xB17A},{0xCF45, 0xB181},{0xCF46, 0xB182},
- {0xCF47, 0xB183},{0xCF48, 0xB184},{0xCF49, 0xB185},{0xCF4A, 0xB186},{0xCF4B, 0xB187},{0xCF4C, 0xB188},{0xCF4D, 0xB189},{0xCF4E, 0xB18A},
- {0xCF4F, 0xB18B},{0xCF50, 0xB18C},{0xCF51, 0xB18D},{0xCF52, 0xB18E},{0xCF53, 0xB18F},{0xCF54, 0xC4DA},{0xCF55, 0xC4DB},{0xCF56, 0xB190},
- {0xCF57, 0xB191},{0xCF58, 0xC4DC},{0xCF59, 0xB192},{0xCF5A, 0xB193},{0xCF5B, 0xB194},{0xCF5C, 0xC4DD},{0xCF5D, 0xB195},{0xCF5E, 0xB196},
- {0xCF5F, 0xB197},{0xCF60, 0xB198},{0xCF61, 0xB199},{0xCF62, 0xB19A},{0xCF63, 0xB19B},{0xCF64, 0xC4DE},{0xCF65, 0xC4DF},{0xCF66, 0xB19C},
- {0xCF67, 0xC4E0},{0xCF68, 0xB19D},{0xCF69, 0xC4E1},{0xCF6A, 0xB19E},{0xCF6B, 0xB19F},{0xCF6C, 0xB1A0},{0xCF6D, 0xB241},{0xCF6E, 0xB242},
- {0xCF6F, 0xB243},{0xCF70, 0xC4E2},{0xCF71, 0xC4E3},{0xCF72, 0xB244},{0xCF73, 0xB245},{0xCF74, 0xC4E4},{0xCF75, 0xB246},{0xCF76, 0xB247},
- {0xCF77, 0xB248},{0xCF78, 0xC4E5},{0xCF79, 0xB249},{0xCF7A, 0xB24A},{0xCF7B, 0xB24B},{0xCF7C, 0xB24C},{0xCF7D, 0xB24D},{0xCF7E, 0xB24E},
- {0xCF7F, 0xB24F},{0xCF80, 0xC4E6},{0xCF81, 0xB250},{0xCF82, 0xB251},{0xCF83, 0xB252},{0xCF84, 0xB253},{0xCF85, 0xC4E7},{0xCF86, 0xB254},
- {0xCF87, 0xB255},{0xCF88, 0xB256},{0xCF89, 0xB257},{0xCF8A, 0xB258},{0xCF8B, 0xB259},{0xCF8C, 0xC4E8},{0xCF8D, 0xB25A},{0xCF8E, 0xB261},
- {0xCF8F, 0xB262},{0xCF90, 0xB263},{0xCF91, 0xB264},{0xCF92, 0xB265},{0xCF93, 0xB266},{0xCF94, 0xB267},{0xCF95, 0xB268},{0xCF96, 0xB269},
- {0xCF97, 0xB26A},{0xCF98, 0xB26B},{0xCF99, 0xB26C},{0xCF9A, 0xB26D},{0xCF9B, 0xB26E},{0xCF9C, 0xB26F},{0xCF9D, 0xB270},{0xCF9E, 0xB271},
- {0xCF9F, 0xB272},{0xCFA0, 0xB273},{0xCFA1, 0xC4E9},{0xCFA2, 0xB274},{0xCFA3, 0xB275},{0xCFA4, 0xB276},{0xCFA5, 0xB277},{0xCFA6, 0xB278},
- {0xCFA7, 0xB279},{0xCFA8, 0xC4EA},{0xCFA9, 0xB27A},{0xCFAA, 0xB281},{0xCFAB, 0xB282},{0xCFAC, 0xB283},{0xCFAD, 0xB284},{0xCFAE, 0xB285},
- {0xCFAF, 0xB286},{0xCFB0, 0xC4EB},{0xCFB1, 0xB287},{0xCFB2, 0xB288},{0xCFB3, 0xB289},{0xCFB4, 0xB28A},{0xCFB5, 0xB28B},{0xCFB6, 0xB28C},
- {0xCFB7, 0xB28D},{0xCFB8, 0xB28E},{0xCFB9, 0xB28F},{0xCFBA, 0xB290},{0xCFBB, 0xB291},{0xCFBC, 0xB292},{0xCFBD, 0xB293},{0xCFBE, 0xB294},
- {0xCFBF, 0xB295},{0xCFC0, 0xB296},{0xCFC1, 0xB297},{0xCFC2, 0xB298},{0xCFC3, 0xB299},{0xCFC4, 0xC4EC},{0xCFC5, 0xB29A},{0xCFC6, 0xB29B},
- {0xCFC7, 0xB29C},{0xCFC8, 0xB29D},{0xCFC9, 0xB29E},{0xCFCA, 0xB29F},{0xCFCB, 0xB2A0},{0xCFCC, 0xB341},{0xCFCD, 0xB342},{0xCFCE, 0xB343},
- {0xCFCF, 0xB344},{0xCFD0, 0xB345},{0xCFD1, 0xB346},{0xCFD2, 0xB347},{0xCFD3, 0xB348},{0xCFD4, 0xB349},{0xCFD5, 0xB34A},{0xCFD6, 0xB34B},
- {0xCFD7, 0xB34C},{0xCFD8, 0xB34D},{0xCFD9, 0xB34E},{0xCFDA, 0xB34F},{0xCFDB, 0xB350},{0xCFDC, 0xB351},{0xCFDD, 0xB352},{0xCFDE, 0xB353},
- {0xCFDF, 0xB354},{0xCFE0, 0xC4ED},{0xCFE1, 0xC4EE},{0xCFE2, 0xB355},{0xCFE3, 0xB356},{0xCFE4, 0xC4EF},{0xCFE5, 0xB357},{0xCFE6, 0xB358},
- {0xCFE7, 0xB359},{0xCFE8, 0xC4F0},{0xCFE9, 0xB35A},{0xCFEA, 0xB361},{0xCFEB, 0xB362},{0xCFEC, 0xB363},{0xCFED, 0xB364},{0xCFEE, 0xB365},
- {0xCFEF, 0xB366},{0xCFF0, 0xC4F1},{0xCFF1, 0xC4F2},{0xCFF2, 0xB367},{0xCFF3, 0xC4F3},{0xCFF4, 0xB368},{0xCFF5, 0xC4F4},{0xCFF6, 0xB369},
- {0xCFF7, 0xB36A},{0xCFF8, 0xB36B},{0xCFF9, 0xB36C},{0xCFFA, 0xB36D},{0xCFFB, 0xB36E},{0xCFFC, 0xC4F5},{0xCFFD, 0xB36F},{0xCFFE, 0xB370},
- {0xCFFF, 0xB371},{0xD000, 0xC4F6},{0xD001, 0xB372},{0xD002, 0xB373},{0xD003, 0xB374},{0xD004, 0xC4F7},{0xD005, 0xB375},{0xD006, 0xB376},
- {0xD007, 0xB377},{0xD008, 0xB378},{0xD009, 0xB379},{0xD00A, 0xB37A},{0xD00B, 0xB381},{0xD00C, 0xB382},{0xD00D, 0xB383},{0xD00E, 0xB384},
- {0xD00F, 0xB385},{0xD010, 0xB386},{0xD011, 0xC4F8},{0xD012, 0xB387},{0xD013, 0xB388},{0xD014, 0xB389},{0xD015, 0xB38A},{0xD016, 0xB38B},
- {0xD017, 0xB38C},{0xD018, 0xC4F9},{0xD019, 0xB38D},{0xD01A, 0xB38E},{0xD01B, 0xB38F},{0xD01C, 0xB390},{0xD01D, 0xB391},{0xD01E, 0xB392},
- {0xD01F, 0xB393},{0xD020, 0xB394},{0xD021, 0xB395},{0xD022, 0xB396},{0xD023, 0xB397},{0xD024, 0xB398},{0xD025, 0xB399},{0xD026, 0xB39A},
- {0xD027, 0xB39B},{0xD028, 0xB39C},{0xD029, 0xB39D},{0xD02A, 0xB39E},{0xD02B, 0xB39F},{0xD02C, 0xB3A0},{0xD02D, 0xC4FA},{0xD02E, 0xB441},
- {0xD02F, 0xB442},{0xD030, 0xB443},{0xD031, 0xB444},{0xD032, 0xB445},{0xD033, 0xB446},{0xD034, 0xC4FB},{0xD035, 0xC4FC},{0xD036, 0xB447},
- {0xD037, 0xB448},{0xD038, 0xC4FD},{0xD039, 0xB449},{0xD03A, 0xB44A},{0xD03B, 0xB44B},{0xD03C, 0xC4FE},{0xD03D, 0xB44C},{0xD03E, 0xB44D},
- {0xD03F, 0xB44E},{0xD040, 0xB44F},{0xD041, 0xB450},{0xD042, 0xB451},{0xD043, 0xB452},{0xD044, 0xC5A1},{0xD045, 0xC5A2},{0xD046, 0xB453},
- {0xD047, 0xC5A3},{0xD048, 0xB454},{0xD049, 0xC5A4},{0xD04A, 0xB455},{0xD04B, 0xB456},{0xD04C, 0xB457},{0xD04D, 0xB458},{0xD04E, 0xB459},
- {0xD04F, 0xB45A},{0xD050, 0xC5A5},{0xD051, 0xB461},{0xD052, 0xB462},{0xD053, 0xB463},{0xD054, 0xC5A6},{0xD055, 0xB464},{0xD056, 0xB465},
- {0xD057, 0xB466},{0xD058, 0xC5A7},{0xD059, 0xB467},{0xD05A, 0xB468},{0xD05B, 0xB469},{0xD05C, 0xB46A},{0xD05D, 0xB46B},{0xD05E, 0xB46C},
- {0xD05F, 0xB46D},{0xD060, 0xC5A8},{0xD061, 0xB46E},{0xD062, 0xB46F},{0xD063, 0xB470},{0xD064, 0xB471},{0xD065, 0xB472},{0xD066, 0xB473},
- {0xD067, 0xB474},{0xD068, 0xB475},{0xD069, 0xB476},{0xD06A, 0xB477},{0xD06B, 0xB478},{0xD06C, 0xC5A9},{0xD06D, 0xC5AA},{0xD06E, 0xB479},
- {0xD06F, 0xB47A},{0xD070, 0xC5AB},{0xD071, 0xB481},{0xD072, 0xB482},{0xD073, 0xB483},{0xD074, 0xC5AC},{0xD075, 0xB484},{0xD076, 0xB485},
- {0xD077, 0xB486},{0xD078, 0xB487},{0xD079, 0xB488},{0xD07A, 0xB489},{0xD07B, 0xB48A},{0xD07C, 0xC5AD},{0xD07D, 0xC5AE},{0xD07E, 0xB48B},
- {0xD07F, 0xB48C},{0xD080, 0xB48D},{0xD081, 0xC5AF},{0xD082, 0xB48E},{0xD083, 0xB48F},{0xD084, 0xB490},{0xD085, 0xB491},{0xD086, 0xB492},
- {0xD087, 0xB493},{0xD088, 0xB494},{0xD089, 0xB495},{0xD08A, 0xB496},{0xD08B, 0xB497},{0xD08C, 0xB498},{0xD08D, 0xB499},{0xD08E, 0xB49A},
- {0xD08F, 0xB49B},{0xD090, 0xB49C},{0xD091, 0xB49D},{0xD092, 0xB49E},{0xD093, 0xB49F},{0xD094, 0xB4A0},{0xD095, 0xB541},{0xD096, 0xB542},
- {0xD097, 0xB543},{0xD098, 0xB544},{0xD099, 0xB545},{0xD09A, 0xB546},{0xD09B, 0xB547},{0xD09C, 0xB548},{0xD09D, 0xB549},{0xD09E, 0xB54A},
- {0xD09F, 0xB54B},{0xD0A0, 0xB54C},{0xD0A1, 0xB54D},{0xD0A2, 0xB54E},{0xD0A3, 0xB54F},{0xD0A4, 0xC5B0},{0xD0A5, 0xC5B1},{0xD0A6, 0xB550},
- {0xD0A7, 0xB551},{0xD0A8, 0xC5B2},{0xD0A9, 0xB552},{0xD0AA, 0xB553},{0xD0AB, 0xB554},{0xD0AC, 0xC5B3},{0xD0AD, 0xB555},{0xD0AE, 0xB556},
- {0xD0AF, 0xB557},{0xD0B0, 0xB558},{0xD0B1, 0xB559},{0xD0B2, 0xB55A},{0xD0B3, 0xB561},{0xD0B4, 0xC5B4},{0xD0B5, 0xC5B5},{0xD0B6, 0xB562},
- {0xD0B7, 0xC5B6},{0xD0B8, 0xB563},{0xD0B9, 0xC5B7},{0xD0BA, 0xB564},{0xD0BB, 0xB565},{0xD0BC, 0xB566},{0xD0BD, 0xB567},{0xD0BE, 0xB568},
- {0xD0BF, 0xB569},{0xD0C0, 0xC5B8},{0xD0C1, 0xC5B9},{0xD0C2, 0xB56A},{0xD0C3, 0xB56B},{0xD0C4, 0xC5BA},{0xD0C5, 0xB56C},{0xD0C6, 0xB56D},
- {0xD0C7, 0xB56E},{0xD0C8, 0xC5BB},{0xD0C9, 0xC5BC},{0xD0CA, 0xB56F},{0xD0CB, 0xB570},{0xD0CC, 0xB571},{0xD0CD, 0xB572},{0xD0CE, 0xB573},
- {0xD0CF, 0xB574},{0xD0D0, 0xC5BD},{0xD0D1, 0xC5BE},{0xD0D2, 0xB575},{0xD0D3, 0xC5BF},{0xD0D4, 0xC5C0},{0xD0D5, 0xC5C1},{0xD0D6, 0xB576},
- {0xD0D7, 0xB577},{0xD0D8, 0xB578},{0xD0D9, 0xB579},{0xD0DA, 0xB57A},{0xD0DB, 0xB581},{0xD0DC, 0xC5C2},{0xD0DD, 0xC5C3},{0xD0DE, 0xB582},
- {0xD0DF, 0xB583},{0xD0E0, 0xC5C4},{0xD0E1, 0xB584},{0xD0E2, 0xB585},{0xD0E3, 0xB586},{0xD0E4, 0xC5C5},{0xD0E5, 0xB587},{0xD0E6, 0xB588},
- {0xD0E7, 0xB589},{0xD0E8, 0xB58A},{0xD0E9, 0xB58B},{0xD0EA, 0xB58C},{0xD0EB, 0xB58D},{0xD0EC, 0xC5C6},{0xD0ED, 0xC5C7},{0xD0EE, 0xB58E},
- {0xD0EF, 0xC5C8},{0xD0F0, 0xC5C9},{0xD0F1, 0xC5CA},{0xD0F2, 0xB58F},{0xD0F3, 0xB590},{0xD0F4, 0xB591},{0xD0F5, 0xB592},{0xD0F6, 0xB593},
- {0xD0F7, 0xB594},{0xD0F8, 0xC5CB},{0xD0F9, 0xB595},{0xD0FA, 0xB596},{0xD0FB, 0xB597},{0xD0FC, 0xB598},{0xD0FD, 0xB599},{0xD0FE, 0xB59A},
- {0xD0FF, 0xB59B},{0xD100, 0xB59C},{0xD101, 0xB59D},{0xD102, 0xB59E},{0xD103, 0xB59F},{0xD104, 0xB5A0},{0xD105, 0xB641},{0xD106, 0xB642},
- {0xD107, 0xB643},{0xD108, 0xB644},{0xD109, 0xB645},{0xD10A, 0xB646},{0xD10B, 0xB647},{0xD10C, 0xB648},{0xD10D, 0xC5CC},{0xD10E, 0xB649},
- {0xD10F, 0xB64A},{0xD110, 0xB64B},{0xD111, 0xB64C},{0xD112, 0xB64D},{0xD113, 0xB64E},{0xD114, 0xB64F},{0xD115, 0xB650},{0xD116, 0xB651},
- {0xD117, 0xB652},{0xD118, 0xB653},{0xD119, 0xB654},{0xD11A, 0xB655},{0xD11B, 0xB656},{0xD11C, 0xB657},{0xD11D, 0xB658},{0xD11E, 0xB659},
- {0xD11F, 0xB65A},{0xD120, 0xB661},{0xD121, 0xB662},{0xD122, 0xB663},{0xD123, 0xB664},{0xD124, 0xB665},{0xD125, 0xB666},{0xD126, 0xB667},
- {0xD127, 0xB668},{0xD128, 0xB669},{0xD129, 0xB66A},{0xD12A, 0xB66B},{0xD12B, 0xB66C},{0xD12C, 0xB66D},{0xD12D, 0xB66E},{0xD12E, 0xB66F},
- {0xD12F, 0xB670},{0xD130, 0xC5CD},{0xD131, 0xC5CE},{0xD132, 0xB671},{0xD133, 0xB672},{0xD134, 0xC5CF},{0xD135, 0xB673},{0xD136, 0xB674},
- {0xD137, 0xB675},{0xD138, 0xC5D0},{0xD139, 0xB676},{0xD13A, 0xC5D1},{0xD13B, 0xB677},{0xD13C, 0xB678},{0xD13D, 0xB679},{0xD13E, 0xB67A},
- {0xD13F, 0xB681},{0xD140, 0xC5D2},{0xD141, 0xC5D3},{0xD142, 0xB682},{0xD143, 0xC5D4},{0xD144, 0xC5D5},{0xD145, 0xC5D6},{0xD146, 0xB683},
- {0xD147, 0xB684},{0xD148, 0xB685},{0xD149, 0xB686},{0xD14A, 0xB687},{0xD14B, 0xB688},{0xD14C, 0xC5D7},{0xD14D, 0xC5D8},{0xD14E, 0xB689},
- {0xD14F, 0xB68A},{0xD150, 0xC5D9},{0xD151, 0xB68B},{0xD152, 0xB68C},{0xD153, 0xB68D},{0xD154, 0xC5DA},{0xD155, 0xB68E},{0xD156, 0xB68F},
- {0xD157, 0xB690},{0xD158, 0xB691},{0xD159, 0xB692},{0xD15A, 0xB693},{0xD15B, 0xB694},{0xD15C, 0xC5DB},{0xD15D, 0xC5DC},{0xD15E, 0xB695},
- {0xD15F, 0xC5DD},{0xD160, 0xB696},{0xD161, 0xC5DE},{0xD162, 0xB697},{0xD163, 0xB698},{0xD164, 0xB699},{0xD165, 0xB69A},{0xD166, 0xB69B},
- {0xD167, 0xB69C},{0xD168, 0xC5DF},{0xD169, 0xB69D},{0xD16A, 0xB69E},{0xD16B, 0xB69F},{0xD16C, 0xC5E0},{0xD16D, 0xB6A0},{0xD16E, 0xB741},
- {0xD16F, 0xB742},{0xD170, 0xB743},{0xD171, 0xB744},{0xD172, 0xB745},{0xD173, 0xB746},{0xD174, 0xB747},{0xD175, 0xB748},{0xD176, 0xB749},
- {0xD177, 0xB74A},{0xD178, 0xB74B},{0xD179, 0xB74C},{0xD17A, 0xB74D},{0xD17B, 0xB74E},{0xD17C, 0xC5E1},{0xD17D, 0xB74F},{0xD17E, 0xB750},
- {0xD17F, 0xB751},{0xD180, 0xB752},{0xD181, 0xB753},{0xD182, 0xB754},{0xD183, 0xB755},{0xD184, 0xC5E2},{0xD185, 0xB756},{0xD186, 0xB757},
- {0xD187, 0xB758},{0xD188, 0xC5E3},{0xD189, 0xB759},{0xD18A, 0xB75A},{0xD18B, 0xB761},{0xD18C, 0xB762},{0xD18D, 0xB763},{0xD18E, 0xB764},
- {0xD18F, 0xB765},{0xD190, 0xB766},{0xD191, 0xB767},{0xD192, 0xB768},{0xD193, 0xB769},{0xD194, 0xB76A},{0xD195, 0xB76B},{0xD196, 0xB76C},
- {0xD197, 0xB76D},{0xD198, 0xB76E},{0xD199, 0xB76F},{0xD19A, 0xB770},{0xD19B, 0xB771},{0xD19C, 0xB772},{0xD19D, 0xB773},{0xD19E, 0xB774},
- {0xD19F, 0xB775},{0xD1A0, 0xC5E4},{0xD1A1, 0xC5E5},{0xD1A2, 0xB776},{0xD1A3, 0xB777},{0xD1A4, 0xC5E6},{0xD1A5, 0xB778},{0xD1A6, 0xB779},
- {0xD1A7, 0xB77A},{0xD1A8, 0xC5E7},{0xD1A9, 0xB781},{0xD1AA, 0xB782},{0xD1AB, 0xB783},{0xD1AC, 0xB784},{0xD1AD, 0xB785},{0xD1AE, 0xB786},
- {0xD1AF, 0xB787},{0xD1B0, 0xC5E8},{0xD1B1, 0xC5E9},{0xD1B2, 0xB788},{0xD1B3, 0xC5EA},{0xD1B4, 0xB789},{0xD1B5, 0xC5EB},{0xD1B6, 0xB78A},
- {0xD1B7, 0xB78B},{0xD1B8, 0xB78C},{0xD1B9, 0xB78D},{0xD1BA, 0xC5EC},{0xD1BB, 0xB78E},{0xD1BC, 0xC5ED},{0xD1BD, 0xB78F},{0xD1BE, 0xB790},
- {0xD1BF, 0xB791},{0xD1C0, 0xC5EE},{0xD1C1, 0xB792},{0xD1C2, 0xB793},{0xD1C3, 0xB794},{0xD1C4, 0xB795},{0xD1C5, 0xB796},{0xD1C6, 0xB797},
- {0xD1C7, 0xB798},{0xD1C8, 0xB799},{0xD1C9, 0xB79A},{0xD1CA, 0xB79B},{0xD1CB, 0xB79C},{0xD1CC, 0xB79D},{0xD1CD, 0xB79E},{0xD1CE, 0xB79F},
- {0xD1CF, 0xB7A0},{0xD1D0, 0xB841},{0xD1D1, 0xB842},{0xD1D2, 0xB843},{0xD1D3, 0xB844},{0xD1D4, 0xB845},{0xD1D5, 0xB846},{0xD1D6, 0xB847},
- {0xD1D7, 0xB848},{0xD1D8, 0xC5EF},{0xD1D9, 0xB849},{0xD1DA, 0xB84A},{0xD1DB, 0xB84B},{0xD1DC, 0xB84C},{0xD1DD, 0xB84D},{0xD1DE, 0xB84E},
- {0xD1DF, 0xB84F},{0xD1E0, 0xB850},{0xD1E1, 0xB851},{0xD1E2, 0xB852},{0xD1E3, 0xB853},{0xD1E4, 0xB854},{0xD1E5, 0xB855},{0xD1E6, 0xB856},
- {0xD1E7, 0xB857},{0xD1E8, 0xB858},{0xD1E9, 0xB859},{0xD1EA, 0xB85A},{0xD1EB, 0xB861},{0xD1EC, 0xB862},{0xD1ED, 0xB863},{0xD1EE, 0xB864},
- {0xD1EF, 0xB865},{0xD1F0, 0xB866},{0xD1F1, 0xB867},{0xD1F2, 0xB868},{0xD1F3, 0xB869},{0xD1F4, 0xC5F0},{0xD1F5, 0xB86A},{0xD1F6, 0xB86B},
- {0xD1F7, 0xB86C},{0xD1F8, 0xC5F1},{0xD1F9, 0xB86D},{0xD1FA, 0xB86E},{0xD1FB, 0xB86F},{0xD1FC, 0xB870},{0xD1FD, 0xB871},{0xD1FE, 0xB872},
- {0xD1FF, 0xB873},{0xD200, 0xB874},{0xD201, 0xB875},{0xD202, 0xB876},{0xD203, 0xB877},{0xD204, 0xB878},{0xD205, 0xB879},{0xD206, 0xB87A},
- {0xD207, 0xC5F2},{0xD208, 0xB881},{0xD209, 0xC5F3},{0xD20A, 0xB882},{0xD20B, 0xB883},{0xD20C, 0xB884},{0xD20D, 0xB885},{0xD20E, 0xB886},
- {0xD20F, 0xB887},{0xD210, 0xC5F4},{0xD211, 0xB888},{0xD212, 0xB889},{0xD213, 0xB88A},{0xD214, 0xB88B},{0xD215, 0xB88C},{0xD216, 0xB88D},
- {0xD217, 0xB88E},{0xD218, 0xB88F},{0xD219, 0xB890},{0xD21A, 0xB891},{0xD21B, 0xB892},{0xD21C, 0xB893},{0xD21D, 0xB894},{0xD21E, 0xB895},
- {0xD21F, 0xB896},{0xD220, 0xB897},{0xD221, 0xB898},{0xD222, 0xB899},{0xD223, 0xB89A},{0xD224, 0xB89B},{0xD225, 0xB89C},{0xD226, 0xB89D},
- {0xD227, 0xB89E},{0xD228, 0xB89F},{0xD229, 0xB8A0},{0xD22A, 0xB941},{0xD22B, 0xB942},{0xD22C, 0xC5F5},{0xD22D, 0xC5F6},{0xD22E, 0xB943},
- {0xD22F, 0xB944},{0xD230, 0xC5F7},{0xD231, 0xB945},{0xD232, 0xB946},{0xD233, 0xB947},{0xD234, 0xC5F8},{0xD235, 0xB948},{0xD236, 0xB949},
- {0xD237, 0xB94A},{0xD238, 0xB94B},{0xD239, 0xB94C},{0xD23A, 0xB94D},{0xD23B, 0xB94E},{0xD23C, 0xC5F9},{0xD23D, 0xC5FA},{0xD23E, 0xB94F},
- {0xD23F, 0xC5FB},{0xD240, 0xB950},{0xD241, 0xC5FC},{0xD242, 0xB951},{0xD243, 0xB952},{0xD244, 0xB953},{0xD245, 0xB954},{0xD246, 0xB955},
- {0xD247, 0xB956},{0xD248, 0xC5FD},{0xD249, 0xB957},{0xD24A, 0xB958},{0xD24B, 0xB959},{0xD24C, 0xB95A},{0xD24D, 0xB961},{0xD24E, 0xB962},
- {0xD24F, 0xB963},{0xD250, 0xB964},{0xD251, 0xB965},{0xD252, 0xB966},{0xD253, 0xB967},{0xD254, 0xB968},{0xD255, 0xB969},{0xD256, 0xB96A},
- {0xD257, 0xB96B},{0xD258, 0xB96C},{0xD259, 0xB96D},{0xD25A, 0xB96E},{0xD25B, 0xB96F},{0xD25C, 0xC5FE},{0xD25D, 0xB970},{0xD25E, 0xB971},
- {0xD25F, 0xB972},{0xD260, 0xB973},{0xD261, 0xB974},{0xD262, 0xB975},{0xD263, 0xB976},{0xD264, 0xC6A1},{0xD265, 0xB977},{0xD266, 0xB978},
- {0xD267, 0xB979},{0xD268, 0xB97A},{0xD269, 0xB981},{0xD26A, 0xB982},{0xD26B, 0xB983},{0xD26C, 0xB984},{0xD26D, 0xB985},{0xD26E, 0xB986},
- {0xD26F, 0xB987},{0xD270, 0xB988},{0xD271, 0xB989},{0xD272, 0xB98A},{0xD273, 0xB98B},{0xD274, 0xB98C},{0xD275, 0xB98D},{0xD276, 0xB98E},
- {0xD277, 0xB98F},{0xD278, 0xB990},{0xD279, 0xB991},{0xD27A, 0xB992},{0xD27B, 0xB993},{0xD27C, 0xB994},{0xD27D, 0xB995},{0xD27E, 0xB996},
- {0xD27F, 0xB997},{0xD280, 0xC6A2},{0xD281, 0xC6A3},{0xD282, 0xB998},{0xD283, 0xB999},{0xD284, 0xC6A4},{0xD285, 0xB99A},{0xD286, 0xB99B},
- {0xD287, 0xB99C},{0xD288, 0xC6A5},{0xD289, 0xB99D},{0xD28A, 0xB99E},{0xD28B, 0xB99F},{0xD28C, 0xB9A0},{0xD28D, 0xBA41},{0xD28E, 0xBA42},
- {0xD28F, 0xBA43},{0xD290, 0xC6A6},{0xD291, 0xC6A7},{0xD292, 0xBA44},{0xD293, 0xBA45},{0xD294, 0xBA46},{0xD295, 0xC6A8},{0xD296, 0xBA47},
- {0xD297, 0xBA48},{0xD298, 0xBA49},{0xD299, 0xBA4A},{0xD29A, 0xBA4B},{0xD29B, 0xBA4C},{0xD29C, 0xC6A9},{0xD29D, 0xBA4D},{0xD29E, 0xBA4E},
- {0xD29F, 0xBA4F},{0xD2A0, 0xC6AA},{0xD2A1, 0xBA50},{0xD2A2, 0xBA51},{0xD2A3, 0xBA52},{0xD2A4, 0xC6AB},{0xD2A5, 0xBA53},{0xD2A6, 0xBA54},
- {0xD2A7, 0xBA55},{0xD2A8, 0xBA56},{0xD2A9, 0xBA57},{0xD2AA, 0xBA58},{0xD2AB, 0xBA59},{0xD2AC, 0xC6AC},{0xD2AD, 0xBA5A},{0xD2AE, 0xBA61},
- {0xD2AF, 0xBA62},{0xD2B0, 0xBA63},{0xD2B1, 0xC6AD},{0xD2B2, 0xBA64},{0xD2B3, 0xBA65},{0xD2B4, 0xBA66},{0xD2B5, 0xBA67},{0xD2B6, 0xBA68},
- {0xD2B7, 0xBA69},{0xD2B8, 0xC6AE},{0xD2B9, 0xC6AF},{0xD2BA, 0xBA6A},{0xD2BB, 0xBA6B},{0xD2BC, 0xC6B0},{0xD2BD, 0xBA6C},{0xD2BE, 0xBA6D},
- {0xD2BF, 0xC6B1},{0xD2C0, 0xC6B2},{0xD2C1, 0xBA6E},{0xD2C2, 0xC6B3},{0xD2C3, 0xBA6F},{0xD2C4, 0xBA70},{0xD2C5, 0xBA71},{0xD2C6, 0xBA72},
- {0xD2C7, 0xBA73},{0xD2C8, 0xC6B4},{0xD2C9, 0xC6B5},{0xD2CA, 0xBA74},{0xD2CB, 0xC6B6},{0xD2CC, 0xBA75},{0xD2CD, 0xBA76},{0xD2CE, 0xBA77},
- {0xD2CF, 0xBA78},{0xD2D0, 0xBA79},{0xD2D1, 0xBA7A},{0xD2D2, 0xBA81},{0xD2D3, 0xBA82},{0xD2D4, 0xC6B7},{0xD2D5, 0xBA83},{0xD2D6, 0xBA84},
- {0xD2D7, 0xBA85},{0xD2D8, 0xC6B8},{0xD2D9, 0xBA86},{0xD2DA, 0xBA87},{0xD2DB, 0xBA88},{0xD2DC, 0xC6B9},{0xD2DD, 0xBA89},{0xD2DE, 0xBA8A},
- {0xD2DF, 0xBA8B},{0xD2E0, 0xBA8C},{0xD2E1, 0xBA8D},{0xD2E2, 0xBA8E},{0xD2E3, 0xBA8F},{0xD2E4, 0xC6BA},{0xD2E5, 0xC6BB},{0xD2E6, 0xBA90},
- {0xD2E7, 0xBA91},{0xD2E8, 0xBA92},{0xD2E9, 0xBA93},{0xD2EA, 0xBA94},{0xD2EB, 0xBA95},{0xD2EC, 0xBA96},{0xD2ED, 0xBA97},{0xD2EE, 0xBA98},
- {0xD2EF, 0xBA99},{0xD2F0, 0xC6BC},{0xD2F1, 0xC6BD},{0xD2F2, 0xBA9A},{0xD2F3, 0xBA9B},{0xD2F4, 0xC6BE},{0xD2F5, 0xBA9C},{0xD2F6, 0xBA9D},
- {0xD2F7, 0xBA9E},{0xD2F8, 0xC6BF},{0xD2F9, 0xBA9F},{0xD2FA, 0xBAA0},{0xD2FB, 0xBB41},{0xD2FC, 0xBB42},{0xD2FD, 0xBB43},{0xD2FE, 0xBB44},
- {0xD2FF, 0xBB45},{0xD300, 0xC6C0},{0xD301, 0xC6C1},{0xD302, 0xBB46},{0xD303, 0xC6C2},{0xD304, 0xBB47},{0xD305, 0xC6C3},{0xD306, 0xBB48},
- {0xD307, 0xBB49},{0xD308, 0xBB4A},{0xD309, 0xBB4B},{0xD30A, 0xBB4C},{0xD30B, 0xBB4D},{0xD30C, 0xC6C4},{0xD30D, 0xC6C5},{0xD30E, 0xC6C6},
- {0xD30F, 0xBB4E},{0xD310, 0xC6C7},{0xD311, 0xBB4F},{0xD312, 0xBB50},{0xD313, 0xBB51},{0xD314, 0xC6C8},{0xD315, 0xBB52},{0xD316, 0xC6C9},
- {0xD317, 0xBB53},{0xD318, 0xBB54},{0xD319, 0xBB55},{0xD31A, 0xBB56},{0xD31B, 0xBB57},{0xD31C, 0xC6CA},{0xD31D, 0xC6CB},{0xD31E, 0xBB58},
- {0xD31F, 0xC6CC},{0xD320, 0xC6CD},{0xD321, 0xC6CE},{0xD322, 0xBB59},{0xD323, 0xBB5A},{0xD324, 0xBB61},{0xD325, 0xC6CF},{0xD326, 0xBB62},
- {0xD327, 0xBB63},{0xD328, 0xC6D0},{0xD329, 0xC6D1},{0xD32A, 0xBB64},{0xD32B, 0xBB65},{0xD32C, 0xC6D2},{0xD32D, 0xBB66},{0xD32E, 0xBB67},
- {0xD32F, 0xBB68},{0xD330, 0xC6D3},{0xD331, 0xBB69},{0xD332, 0xBB6A},{0xD333, 0xBB6B},{0xD334, 0xBB6C},{0xD335, 0xBB6D},{0xD336, 0xBB6E},
- {0xD337, 0xBB6F},{0xD338, 0xC6D4},{0xD339, 0xC6D5},{0xD33A, 0xBB70},{0xD33B, 0xC6D6},{0xD33C, 0xC6D7},{0xD33D, 0xC6D8},{0xD33E, 0xBB71},
- {0xD33F, 0xBB72},{0xD340, 0xBB73},{0xD341, 0xBB74},{0xD342, 0xBB75},{0xD343, 0xBB76},{0xD344, 0xC6D9},{0xD345, 0xC6DA},{0xD346, 0xBB77},
- {0xD347, 0xBB78},{0xD348, 0xBB79},{0xD349, 0xBB7A},{0xD34A, 0xBB81},{0xD34B, 0xBB82},{0xD34C, 0xBB83},{0xD34D, 0xBB84},{0xD34E, 0xBB85},
- {0xD34F, 0xBB86},{0xD350, 0xBB87},{0xD351, 0xBB88},{0xD352, 0xBB89},{0xD353, 0xBB8A},{0xD354, 0xBB8B},{0xD355, 0xBB8C},{0xD356, 0xBB8D},
- {0xD357, 0xBB8E},{0xD358, 0xBB8F},{0xD359, 0xBB90},{0xD35A, 0xBB91},{0xD35B, 0xBB92},{0xD35C, 0xBB93},{0xD35D, 0xBB94},{0xD35E, 0xBB95},
- {0xD35F, 0xBB96},{0xD360, 0xBB97},{0xD361, 0xBB98},{0xD362, 0xBB99},{0xD363, 0xBB9A},{0xD364, 0xBB9B},{0xD365, 0xBB9C},{0xD366, 0xBB9D},
- {0xD367, 0xBB9E},{0xD368, 0xBB9F},{0xD369, 0xBBA0},{0xD36A, 0xBC41},{0xD36B, 0xBC42},{0xD36C, 0xBC43},{0xD36D, 0xBC44},{0xD36E, 0xBC45},
- {0xD36F, 0xBC46},{0xD370, 0xBC47},{0xD371, 0xBC48},{0xD372, 0xBC49},{0xD373, 0xBC4A},{0xD374, 0xBC4B},{0xD375, 0xBC4C},{0xD376, 0xBC4D},
- {0xD377, 0xBC4E},{0xD378, 0xBC4F},{0xD379, 0xBC50},{0xD37A, 0xBC51},{0xD37B, 0xBC52},{0xD37C, 0xC6DB},{0xD37D, 0xC6DC},{0xD37E, 0xBC53},
- {0xD37F, 0xBC54},{0xD380, 0xC6DD},{0xD381, 0xBC55},{0xD382, 0xBC56},{0xD383, 0xBC57},{0xD384, 0xC6DE},{0xD385, 0xBC58},{0xD386, 0xBC59},
- {0xD387, 0xBC5A},{0xD388, 0xBC61},{0xD389, 0xBC62},{0xD38A, 0xBC63},{0xD38B, 0xBC64},{0xD38C, 0xC6DF},{0xD38D, 0xC6E0},{0xD38E, 0xBC65},
- {0xD38F, 0xC6E1},{0xD390, 0xC6E2},{0xD391, 0xC6E3},{0xD392, 0xBC66},{0xD393, 0xBC67},{0xD394, 0xBC68},{0xD395, 0xBC69},{0xD396, 0xBC6A},
- {0xD397, 0xBC6B},{0xD398, 0xC6E4},{0xD399, 0xC6E5},{0xD39A, 0xBC6C},{0xD39B, 0xBC6D},{0xD39C, 0xC6E6},{0xD39D, 0xBC6E},{0xD39E, 0xBC6F},
- {0xD39F, 0xBC70},{0xD3A0, 0xC6E7},{0xD3A1, 0xBC71},{0xD3A2, 0xBC72},{0xD3A3, 0xBC73},{0xD3A4, 0xBC74},{0xD3A5, 0xBC75},{0xD3A6, 0xBC76},
- {0xD3A7, 0xBC77},{0xD3A8, 0xC6E8},{0xD3A9, 0xC6E9},{0xD3AA, 0xBC78},{0xD3AB, 0xC6EA},{0xD3AC, 0xBC79},{0xD3AD, 0xC6EB},{0xD3AE, 0xBC7A},
- {0xD3AF, 0xBC81},{0xD3B0, 0xBC82},{0xD3B1, 0xBC83},{0xD3B2, 0xBC84},{0xD3B3, 0xBC85},{0xD3B4, 0xC6EC},{0xD3B5, 0xBC86},{0xD3B6, 0xBC87},
- {0xD3B7, 0xBC88},{0xD3B8, 0xC6ED},{0xD3B9, 0xBC89},{0xD3BA, 0xBC8A},{0xD3BB, 0xBC8B},{0xD3BC, 0xC6EE},{0xD3BD, 0xBC8C},{0xD3BE, 0xBC8D},
- {0xD3BF, 0xBC8E},{0xD3C0, 0xBC8F},{0xD3C1, 0xBC90},{0xD3C2, 0xBC91},{0xD3C3, 0xBC92},{0xD3C4, 0xC6EF},{0xD3C5, 0xC6F0},{0xD3C6, 0xBC93},
- {0xD3C7, 0xBC94},{0xD3C8, 0xC6F1},{0xD3C9, 0xC6F2},{0xD3CA, 0xBC95},{0xD3CB, 0xBC96},{0xD3CC, 0xBC97},{0xD3CD, 0xBC98},{0xD3CE, 0xBC99},
- {0xD3CF, 0xBC9A},{0xD3D0, 0xC6F3},{0xD3D1, 0xBC9B},{0xD3D2, 0xBC9C},{0xD3D3, 0xBC9D},{0xD3D4, 0xBC9E},{0xD3D5, 0xBC9F},{0xD3D6, 0xBCA0},
- {0xD3D7, 0xBD41},{0xD3D8, 0xC6F4},{0xD3D9, 0xBD42},{0xD3DA, 0xBD43},{0xD3DB, 0xBD44},{0xD3DC, 0xBD45},{0xD3DD, 0xBD46},{0xD3DE, 0xBD47},
- {0xD3DF, 0xBD48},{0xD3E0, 0xBD49},{0xD3E1, 0xC6F5},{0xD3E2, 0xBD4A},{0xD3E3, 0xC6F6},{0xD3E4, 0xBD4B},{0xD3E5, 0xBD4C},{0xD3E6, 0xBD4D},
- {0xD3E7, 0xBD4E},{0xD3E8, 0xBD4F},{0xD3E9, 0xBD50},{0xD3EA, 0xBD51},{0xD3EB, 0xBD52},{0xD3EC, 0xC6F7},{0xD3ED, 0xC6F8},{0xD3EE, 0xBD53},
- {0xD3EF, 0xBD54},{0xD3F0, 0xC6F9},{0xD3F1, 0xBD55},{0xD3F2, 0xBD56},{0xD3F3, 0xBD57},{0xD3F4, 0xC6FA},{0xD3F5, 0xBD58},{0xD3F6, 0xBD59},
- {0xD3F7, 0xBD5A},{0xD3F8, 0xBD61},{0xD3F9, 0xBD62},{0xD3FA, 0xBD63},{0xD3FB, 0xBD64},{0xD3FC, 0xC6FB},{0xD3FD, 0xC6FC},{0xD3FE, 0xBD65},
- {0xD3FF, 0xC6FD},{0xD400, 0xBD66},{0xD401, 0xC6FE},{0xD402, 0xBD67},{0xD403, 0xBD68},{0xD404, 0xBD69},{0xD405, 0xBD6A},{0xD406, 0xBD6B},
- {0xD407, 0xBD6C},{0xD408, 0xC7A1},{0xD409, 0xBD6D},{0xD40A, 0xBD6E},{0xD40B, 0xBD6F},{0xD40C, 0xBD70},{0xD40D, 0xBD71},{0xD40E, 0xBD72},
- {0xD40F, 0xBD73},{0xD410, 0xBD74},{0xD411, 0xBD75},{0xD412, 0xBD76},{0xD413, 0xBD77},{0xD414, 0xBD78},{0xD415, 0xBD79},{0xD416, 0xBD7A},
- {0xD417, 0xBD81},{0xD418, 0xBD82},{0xD419, 0xBD83},{0xD41A, 0xBD84},{0xD41B, 0xBD85},{0xD41C, 0xBD86},{0xD41D, 0xC7A2},{0xD41E, 0xBD87},
- {0xD41F, 0xBD88},{0xD420, 0xBD89},{0xD421, 0xBD8A},{0xD422, 0xBD8B},{0xD423, 0xBD8C},{0xD424, 0xBD8D},{0xD425, 0xBD8E},{0xD426, 0xBD8F},
- {0xD427, 0xBD90},{0xD428, 0xBD91},{0xD429, 0xBD92},{0xD42A, 0xBD93},{0xD42B, 0xBD94},{0xD42C, 0xBD95},{0xD42D, 0xBD96},{0xD42E, 0xBD97},
- {0xD42F, 0xBD98},{0xD430, 0xBD99},{0xD431, 0xBD9A},{0xD432, 0xBD9B},{0xD433, 0xBD9C},{0xD434, 0xBD9D},{0xD435, 0xBD9E},{0xD436, 0xBD9F},
- {0xD437, 0xBDA0},{0xD438, 0xBE41},{0xD439, 0xBE42},{0xD43A, 0xBE43},{0xD43B, 0xBE44},{0xD43C, 0xBE45},{0xD43D, 0xBE46},{0xD43E, 0xBE47},
- {0xD43F, 0xBE48},{0xD440, 0xC7A3},{0xD441, 0xBE49},{0xD442, 0xBE4A},{0xD443, 0xBE4B},{0xD444, 0xC7A4},{0xD445, 0xBE4C},{0xD446, 0xBE4D},
- {0xD447, 0xBE4E},{0xD448, 0xBE4F},{0xD449, 0xBE50},{0xD44A, 0xBE51},{0xD44B, 0xBE52},{0xD44C, 0xBE53},{0xD44D, 0xBE54},{0xD44E, 0xBE55},
- {0xD44F, 0xBE56},{0xD450, 0xBE57},{0xD451, 0xBE58},{0xD452, 0xBE59},{0xD453, 0xBE5A},{0xD454, 0xBE61},{0xD455, 0xBE62},{0xD456, 0xBE63},
- {0xD457, 0xBE64},{0xD458, 0xBE65},{0xD459, 0xBE66},{0xD45A, 0xBE67},{0xD45B, 0xBE68},{0xD45C, 0xC7A5},{0xD45D, 0xBE69},{0xD45E, 0xBE6A},
- {0xD45F, 0xBE6B},{0xD460, 0xC7A6},{0xD461, 0xBE6C},{0xD462, 0xBE6D},{0xD463, 0xBE6E},{0xD464, 0xC7A7},{0xD465, 0xBE6F},{0xD466, 0xBE70},
- {0xD467, 0xBE71},{0xD468, 0xBE72},{0xD469, 0xBE73},{0xD46A, 0xBE74},{0xD46B, 0xBE75},{0xD46C, 0xBE76},{0xD46D, 0xC7A8},{0xD46E, 0xBE77},
- {0xD46F, 0xC7A9},{0xD470, 0xBE78},{0xD471, 0xBE79},{0xD472, 0xBE7A},{0xD473, 0xBE81},{0xD474, 0xBE82},{0xD475, 0xBE83},{0xD476, 0xBE84},
- {0xD477, 0xBE85},{0xD478, 0xC7AA},{0xD479, 0xC7AB},{0xD47A, 0xBE86},{0xD47B, 0xBE87},{0xD47C, 0xC7AC},{0xD47D, 0xBE88},{0xD47E, 0xBE89},
- {0xD47F, 0xC7AD},{0xD480, 0xC7AE},{0xD481, 0xBE8A},{0xD482, 0xC7AF},{0xD483, 0xBE8B},{0xD484, 0xBE8C},{0xD485, 0xBE8D},{0xD486, 0xBE8E},
- {0xD487, 0xBE8F},{0xD488, 0xC7B0},{0xD489, 0xC7B1},{0xD48A, 0xBE90},{0xD48B, 0xC7B2},{0xD48C, 0xBE91},{0xD48D, 0xC7B3},{0xD48E, 0xBE92},
- {0xD48F, 0xBE93},{0xD490, 0xBE94},{0xD491, 0xBE95},{0xD492, 0xBE96},{0xD493, 0xBE97},{0xD494, 0xC7B4},{0xD495, 0xBE98},{0xD496, 0xBE99},
- {0xD497, 0xBE9A},{0xD498, 0xBE9B},{0xD499, 0xBE9C},{0xD49A, 0xBE9D},{0xD49B, 0xBE9E},{0xD49C, 0xBE9F},{0xD49D, 0xBEA0},{0xD49E, 0xBF41},
- {0xD49F, 0xBF42},{0xD4A0, 0xBF43},{0xD4A1, 0xBF44},{0xD4A2, 0xBF45},{0xD4A3, 0xBF46},{0xD4A4, 0xBF47},{0xD4A5, 0xBF48},{0xD4A6, 0xBF49},
- {0xD4A7, 0xBF4A},{0xD4A8, 0xBF4B},{0xD4A9, 0xC7B5},{0xD4AA, 0xBF4C},{0xD4AB, 0xBF4D},{0xD4AC, 0xBF4E},{0xD4AD, 0xBF4F},{0xD4AE, 0xBF50},
- {0xD4AF, 0xBF51},{0xD4B0, 0xBF52},{0xD4B1, 0xBF53},{0xD4B2, 0xBF54},{0xD4B3, 0xBF55},{0xD4B4, 0xBF56},{0xD4B5, 0xBF57},{0xD4B6, 0xBF58},
- {0xD4B7, 0xBF59},{0xD4B8, 0xBF5A},{0xD4B9, 0xBF61},{0xD4BA, 0xBF62},{0xD4BB, 0xBF63},{0xD4BC, 0xBF64},{0xD4BD, 0xBF65},{0xD4BE, 0xBF66},
- {0xD4BF, 0xBF67},{0xD4C0, 0xBF68},{0xD4C1, 0xBF69},{0xD4C2, 0xBF6A},{0xD4C3, 0xBF6B},{0xD4C4, 0xBF6C},{0xD4C5, 0xBF6D},{0xD4C6, 0xBF6E},
- {0xD4C7, 0xBF6F},{0xD4C8, 0xBF70},{0xD4C9, 0xBF71},{0xD4CA, 0xBF72},{0xD4CB, 0xBF73},{0xD4CC, 0xC7B6},{0xD4CD, 0xBF74},{0xD4CE, 0xBF75},
- {0xD4CF, 0xBF76},{0xD4D0, 0xC7B7},{0xD4D1, 0xBF77},{0xD4D2, 0xBF78},{0xD4D3, 0xBF79},{0xD4D4, 0xC7B8},{0xD4D5, 0xBF7A},{0xD4D6, 0xBF81},
- {0xD4D7, 0xBF82},{0xD4D8, 0xBF83},{0xD4D9, 0xBF84},{0xD4DA, 0xBF85},{0xD4DB, 0xBF86},{0xD4DC, 0xC7B9},{0xD4DD, 0xBF87},{0xD4DE, 0xBF88},
- {0xD4DF, 0xC7BA},{0xD4E0, 0xBF89},{0xD4E1, 0xBF8A},{0xD4E2, 0xBF8B},{0xD4E3, 0xBF8C},{0xD4E4, 0xBF8D},{0xD4E5, 0xBF8E},{0xD4E6, 0xBF8F},
- {0xD4E7, 0xBF90},{0xD4E8, 0xC7BB},{0xD4E9, 0xBF91},{0xD4EA, 0xBF92},{0xD4EB, 0xBF93},{0xD4EC, 0xC7BC},{0xD4ED, 0xBF94},{0xD4EE, 0xBF95},
- {0xD4EF, 0xBF96},{0xD4F0, 0xC7BD},{0xD4F1, 0xBF97},{0xD4F2, 0xBF98},{0xD4F3, 0xBF99},{0xD4F4, 0xBF9A},{0xD4F5, 0xBF9B},{0xD4F6, 0xBF9C},
- {0xD4F7, 0xBF9D},{0xD4F8, 0xC7BE},{0xD4F9, 0xBF9E},{0xD4FA, 0xBF9F},{0xD4FB, 0xC7BF},{0xD4FC, 0xBFA0},{0xD4FD, 0xC7C0},{0xD4FE, 0xC041},
- {0xD4FF, 0xC042},{0xD500, 0xC043},{0xD501, 0xC044},{0xD502, 0xC045},{0xD503, 0xC046},{0xD504, 0xC7C1},{0xD505, 0xC047},{0xD506, 0xC048},
- {0xD507, 0xC049},{0xD508, 0xC7C2},{0xD509, 0xC04A},{0xD50A, 0xC04B},{0xD50B, 0xC04C},{0xD50C, 0xC7C3},{0xD50D, 0xC04D},{0xD50E, 0xC04E},
- {0xD50F, 0xC04F},{0xD510, 0xC050},{0xD511, 0xC051},{0xD512, 0xC052},{0xD513, 0xC053},{0xD514, 0xC7C4},{0xD515, 0xC7C5},{0xD516, 0xC054},
- {0xD517, 0xC7C6},{0xD518, 0xC055},{0xD519, 0xC056},{0xD51A, 0xC057},{0xD51B, 0xC058},{0xD51C, 0xC059},{0xD51D, 0xC05A},{0xD51E, 0xC061},
- {0xD51F, 0xC062},{0xD520, 0xC063},{0xD521, 0xC064},{0xD522, 0xC065},{0xD523, 0xC066},{0xD524, 0xC067},{0xD525, 0xC068},{0xD526, 0xC069},
- {0xD527, 0xC06A},{0xD528, 0xC06B},{0xD529, 0xC06C},{0xD52A, 0xC06D},{0xD52B, 0xC06E},{0xD52C, 0xC06F},{0xD52D, 0xC070},{0xD52E, 0xC071},
- {0xD52F, 0xC072},{0xD530, 0xC073},{0xD531, 0xC074},{0xD532, 0xC075},{0xD533, 0xC076},{0xD534, 0xC077},{0xD535, 0xC078},{0xD536, 0xC079},
- {0xD537, 0xC07A},{0xD538, 0xC081},{0xD539, 0xC082},{0xD53A, 0xC083},{0xD53B, 0xC084},{0xD53C, 0xC7C7},{0xD53D, 0xC7C8},{0xD53E, 0xC085},
- {0xD53F, 0xC086},{0xD540, 0xC7C9},{0xD541, 0xC087},{0xD542, 0xC088},{0xD543, 0xC089},{0xD544, 0xC7CA},{0xD545, 0xC08A},{0xD546, 0xC08B},
- {0xD547, 0xC08C},{0xD548, 0xC08D},{0xD549, 0xC08E},{0xD54A, 0xC08F},{0xD54B, 0xC090},{0xD54C, 0xC7CB},{0xD54D, 0xC7CC},{0xD54E, 0xC091},
- {0xD54F, 0xC7CD},{0xD550, 0xC092},{0xD551, 0xC7CE},{0xD552, 0xC093},{0xD553, 0xC094},{0xD554, 0xC095},{0xD555, 0xC096},{0xD556, 0xC097},
- {0xD557, 0xC098},{0xD558, 0xC7CF},{0xD559, 0xC7D0},{0xD55A, 0xC099},{0xD55B, 0xC09A},{0xD55C, 0xC7D1},{0xD55D, 0xC09B},{0xD55E, 0xC09C},
- {0xD55F, 0xC09D},{0xD560, 0xC7D2},{0xD561, 0xC09E},{0xD562, 0xC09F},{0xD563, 0xC0A0},{0xD564, 0xC141},{0xD565, 0xC7D3},{0xD566, 0xC142},
- {0xD567, 0xC143},{0xD568, 0xC7D4},{0xD569, 0xC7D5},{0xD56A, 0xC144},{0xD56B, 0xC7D6},{0xD56C, 0xC145},{0xD56D, 0xC7D7},{0xD56E, 0xC146},
- {0xD56F, 0xC147},{0xD570, 0xC148},{0xD571, 0xC149},{0xD572, 0xC14A},{0xD573, 0xC14B},{0xD574, 0xC7D8},{0xD575, 0xC7D9},{0xD576, 0xC14C},
- {0xD577, 0xC14D},{0xD578, 0xC7DA},{0xD579, 0xC14E},{0xD57A, 0xC14F},{0xD57B, 0xC150},{0xD57C, 0xC7DB},{0xD57D, 0xC151},{0xD57E, 0xC152},
- {0xD57F, 0xC153},{0xD580, 0xC154},{0xD581, 0xC155},{0xD582, 0xC156},{0xD583, 0xC157},{0xD584, 0xC7DC},{0xD585, 0xC7DD},{0xD586, 0xC158},
- {0xD587, 0xC7DE},{0xD588, 0xC7DF},{0xD589, 0xC7E0},{0xD58A, 0xC159},{0xD58B, 0xC15A},{0xD58C, 0xC161},{0xD58D, 0xC162},{0xD58E, 0xC163},
- {0xD58F, 0xC164},{0xD590, 0xC7E1},{0xD591, 0xC165},{0xD592, 0xC166},{0xD593, 0xC167},{0xD594, 0xC168},{0xD595, 0xC169},{0xD596, 0xC16A},
- {0xD597, 0xC16B},{0xD598, 0xC16C},{0xD599, 0xC16D},{0xD59A, 0xC16E},{0xD59B, 0xC16F},{0xD59C, 0xC170},{0xD59D, 0xC171},{0xD59E, 0xC172},
- {0xD59F, 0xC173},{0xD5A0, 0xC174},{0xD5A1, 0xC175},{0xD5A2, 0xC176},{0xD5A3, 0xC177},{0xD5A4, 0xC178},{0xD5A5, 0xC7E2},{0xD5A6, 0xC179},
- {0xD5A7, 0xC17A},{0xD5A8, 0xC181},{0xD5A9, 0xC182},{0xD5AA, 0xC183},{0xD5AB, 0xC184},{0xD5AC, 0xC185},{0xD5AD, 0xC186},{0xD5AE, 0xC187},
- {0xD5AF, 0xC188},{0xD5B0, 0xC189},{0xD5B1, 0xC18A},{0xD5B2, 0xC18B},{0xD5B3, 0xC18C},{0xD5B4, 0xC18D},{0xD5B5, 0xC18E},{0xD5B6, 0xC18F},
- {0xD5B7, 0xC190},{0xD5B8, 0xC191},{0xD5B9, 0xC192},{0xD5BA, 0xC193},{0xD5BB, 0xC194},{0xD5BC, 0xC195},{0xD5BD, 0xC196},{0xD5BE, 0xC197},
- {0xD5BF, 0xC198},{0xD5C0, 0xC199},{0xD5C1, 0xC19A},{0xD5C2, 0xC19B},{0xD5C3, 0xC19C},{0xD5C4, 0xC19D},{0xD5C5, 0xC19E},{0xD5C6, 0xC19F},
- {0xD5C7, 0xC1A0},{0xD5C8, 0xC7E3},{0xD5C9, 0xC7E4},{0xD5CA, 0xC241},{0xD5CB, 0xC242},{0xD5CC, 0xC7E5},{0xD5CD, 0xC243},{0xD5CE, 0xC244},
- {0xD5CF, 0xC245},{0xD5D0, 0xC7E6},{0xD5D1, 0xC246},{0xD5D2, 0xC7E7},{0xD5D3, 0xC247},{0xD5D4, 0xC248},{0xD5D5, 0xC249},{0xD5D6, 0xC24A},
- {0xD5D7, 0xC24B},{0xD5D8, 0xC7E8},{0xD5D9, 0xC7E9},{0xD5DA, 0xC24C},{0xD5DB, 0xC7EA},{0xD5DC, 0xC24D},{0xD5DD, 0xC7EB},{0xD5DE, 0xC24E},
- {0xD5DF, 0xC24F},{0xD5E0, 0xC250},{0xD5E1, 0xC251},{0xD5E2, 0xC252},{0xD5E3, 0xC253},{0xD5E4, 0xC7EC},{0xD5E5, 0xC7ED},{0xD5E6, 0xC254},
- {0xD5E7, 0xC255},{0xD5E8, 0xC7EE},{0xD5E9, 0xC256},{0xD5EA, 0xC257},{0xD5EB, 0xC258},{0xD5EC, 0xC7EF},{0xD5ED, 0xC259},{0xD5EE, 0xC25A},
- {0xD5EF, 0xC261},{0xD5F0, 0xC262},{0xD5F1, 0xC263},{0xD5F2, 0xC264},{0xD5F3, 0xC265},{0xD5F4, 0xC7F0},{0xD5F5, 0xC7F1},{0xD5F6, 0xC266},
- {0xD5F7, 0xC7F2},{0xD5F8, 0xC267},{0xD5F9, 0xC7F3},{0xD5FA, 0xC268},{0xD5FB, 0xC269},{0xD5FC, 0xC26A},{0xD5FD, 0xC26B},{0xD5FE, 0xC26C},
- {0xD5FF, 0xC26D},{0xD600, 0xC7F4},{0xD601, 0xC7F5},{0xD602, 0xC26E},{0xD603, 0xC26F},{0xD604, 0xC7F6},{0xD605, 0xC270},{0xD606, 0xC271},
- {0xD607, 0xC272},{0xD608, 0xC7F7},{0xD609, 0xC273},{0xD60A, 0xC274},{0xD60B, 0xC275},{0xD60C, 0xC276},{0xD60D, 0xC277},{0xD60E, 0xC278},
- {0xD60F, 0xC279},{0xD610, 0xC7F8},{0xD611, 0xC7F9},{0xD612, 0xC27A},{0xD613, 0xC7FA},{0xD614, 0xC7FB},{0xD615, 0xC7FC},{0xD616, 0xC281},
- {0xD617, 0xC282},{0xD618, 0xC283},{0xD619, 0xC284},{0xD61A, 0xC285},{0xD61B, 0xC286},{0xD61C, 0xC7FD},{0xD61D, 0xC287},{0xD61E, 0xC288},
- {0xD61F, 0xC289},{0xD620, 0xC7FE},{0xD621, 0xC28A},{0xD622, 0xC28B},{0xD623, 0xC28C},{0xD624, 0xC8A1},{0xD625, 0xC28D},{0xD626, 0xC28E},
- {0xD627, 0xC28F},{0xD628, 0xC290},{0xD629, 0xC291},{0xD62A, 0xC292},{0xD62B, 0xC293},{0xD62C, 0xC294},{0xD62D, 0xC8A2},{0xD62E, 0xC295},
- {0xD62F, 0xC296},{0xD630, 0xC297},{0xD631, 0xC298},{0xD632, 0xC299},{0xD633, 0xC29A},{0xD634, 0xC29B},{0xD635, 0xC29C},{0xD636, 0xC29D},
- {0xD637, 0xC29E},{0xD638, 0xC8A3},{0xD639, 0xC8A4},{0xD63A, 0xC29F},{0xD63B, 0xC2A0},{0xD63C, 0xC8A5},{0xD63D, 0xC341},{0xD63E, 0xC342},
- {0xD63F, 0xC343},{0xD640, 0xC8A6},{0xD641, 0xC344},{0xD642, 0xC345},{0xD643, 0xC346},{0xD644, 0xC347},{0xD645, 0xC8A7},{0xD646, 0xC348},
- {0xD647, 0xC349},{0xD648, 0xC8A8},{0xD649, 0xC8A9},{0xD64A, 0xC34A},{0xD64B, 0xC8AA},{0xD64C, 0xC34B},{0xD64D, 0xC8AB},{0xD64E, 0xC34C},
- {0xD64F, 0xC34D},{0xD650, 0xC34E},{0xD651, 0xC8AC},{0xD652, 0xC34F},{0xD653, 0xC350},{0xD654, 0xC8AD},{0xD655, 0xC8AE},{0xD656, 0xC351},
- {0xD657, 0xC352},{0xD658, 0xC8AF},{0xD659, 0xC353},{0xD65A, 0xC354},{0xD65B, 0xC355},{0xD65C, 0xC8B0},{0xD65D, 0xC356},{0xD65E, 0xC357},
- {0xD65F, 0xC358},{0xD660, 0xC359},{0xD661, 0xC35A},{0xD662, 0xC361},{0xD663, 0xC362},{0xD664, 0xC363},{0xD665, 0xC364},{0xD666, 0xC365},
- {0xD667, 0xC8B1},{0xD668, 0xC366},{0xD669, 0xC8B2},{0xD66A, 0xC367},{0xD66B, 0xC368},{0xD66C, 0xC369},{0xD66D, 0xC36A},{0xD66E, 0xC36B},
- {0xD66F, 0xC36C},{0xD670, 0xC8B3},{0xD671, 0xC8B4},{0xD672, 0xC36D},{0xD673, 0xC36E},{0xD674, 0xC8B5},{0xD675, 0xC36F},{0xD676, 0xC370},
- {0xD677, 0xC371},{0xD678, 0xC372},{0xD679, 0xC373},{0xD67A, 0xC374},{0xD67B, 0xC375},{0xD67C, 0xC376},{0xD67D, 0xC377},{0xD67E, 0xC378},
- {0xD67F, 0xC379},{0xD680, 0xC37A},{0xD681, 0xC381},{0xD682, 0xC382},{0xD683, 0xC8B6},{0xD684, 0xC383},{0xD685, 0xC8B7},{0xD686, 0xC384},
- {0xD687, 0xC385},{0xD688, 0xC386},{0xD689, 0xC387},{0xD68A, 0xC388},{0xD68B, 0xC389},{0xD68C, 0xC8B8},{0xD68D, 0xC8B9},{0xD68E, 0xC38A},
- {0xD68F, 0xC38B},{0xD690, 0xC8BA},{0xD691, 0xC38C},{0xD692, 0xC38D},{0xD693, 0xC38E},{0xD694, 0xC8BB},{0xD695, 0xC38F},{0xD696, 0xC390},
- {0xD697, 0xC391},{0xD698, 0xC392},{0xD699, 0xC393},{0xD69A, 0xC394},{0xD69B, 0xC395},{0xD69C, 0xC396},{0xD69D, 0xC8BC},{0xD69E, 0xC397},
- {0xD69F, 0xC8BD},{0xD6A0, 0xC398},{0xD6A1, 0xC8BE},{0xD6A2, 0xC399},{0xD6A3, 0xC39A},{0xD6A4, 0xC39B},{0xD6A5, 0xC39C},{0xD6A6, 0xC39D},
- {0xD6A7, 0xC39E},{0xD6A8, 0xC8BF},{0xD6A9, 0xC39F},{0xD6AA, 0xC3A0},{0xD6AB, 0xC441},{0xD6AC, 0xC8C0},{0xD6AD, 0xC442},{0xD6AE, 0xC443},
- {0xD6AF, 0xC444},{0xD6B0, 0xC8C1},{0xD6B1, 0xC445},{0xD6B2, 0xC446},{0xD6B3, 0xC447},{0xD6B4, 0xC448},{0xD6B5, 0xC449},{0xD6B6, 0xC44A},
- {0xD6B7, 0xC44B},{0xD6B8, 0xC44C},{0xD6B9, 0xC8C2},{0xD6BA, 0xC44D},{0xD6BB, 0xC8C3},{0xD6BC, 0xC44E},{0xD6BD, 0xC44F},{0xD6BE, 0xC450},
- {0xD6BF, 0xC451},{0xD6C0, 0xC452},{0xD6C1, 0xC453},{0xD6C2, 0xC454},{0xD6C3, 0xC455},{0xD6C4, 0xC8C4},{0xD6C5, 0xC8C5},{0xD6C6, 0xC456},
- {0xD6C7, 0xC457},{0xD6C8, 0xC8C6},{0xD6C9, 0xC458},{0xD6CA, 0xC459},{0xD6CB, 0xC45A},{0xD6CC, 0xC8C7},{0xD6CD, 0xC461},{0xD6CE, 0xC462},
- {0xD6CF, 0xC463},{0xD6D0, 0xC464},{0xD6D1, 0xC8C8},{0xD6D2, 0xC465},{0xD6D3, 0xC466},{0xD6D4, 0xC8C9},{0xD6D5, 0xC467},{0xD6D6, 0xC468},
- {0xD6D7, 0xC8CA},{0xD6D8, 0xC469},{0xD6D9, 0xC8CB},{0xD6DA, 0xC46A},{0xD6DB, 0xC46B},{0xD6DC, 0xC46C},{0xD6DD, 0xC46D},{0xD6DE, 0xC46E},
- {0xD6DF, 0xC46F},{0xD6E0, 0xC8CC},{0xD6E1, 0xC470},{0xD6E2, 0xC471},{0xD6E3, 0xC472},{0xD6E4, 0xC8CD},{0xD6E5, 0xC473},{0xD6E6, 0xC474},
- {0xD6E7, 0xC475},{0xD6E8, 0xC8CE},{0xD6E9, 0xC476},{0xD6EA, 0xC477},{0xD6EB, 0xC478},{0xD6EC, 0xC479},{0xD6ED, 0xC47A},{0xD6EE, 0xC481},
- {0xD6EF, 0xC482},{0xD6F0, 0xC8CF},{0xD6F1, 0xC483},{0xD6F2, 0xC484},{0xD6F3, 0xC485},{0xD6F4, 0xC486},{0xD6F5, 0xC8D0},{0xD6F6, 0xC487},
- {0xD6F7, 0xC488},{0xD6F8, 0xC489},{0xD6F9, 0xC48A},{0xD6FA, 0xC48B},{0xD6FB, 0xC48C},{0xD6FC, 0xC8D1},{0xD6FD, 0xC8D2},{0xD6FE, 0xC48D},
- {0xD6FF, 0xC48E},{0xD700, 0xC8D3},{0xD701, 0xC48F},{0xD702, 0xC490},{0xD703, 0xC491},{0xD704, 0xC8D4},{0xD705, 0xC492},{0xD706, 0xC493},
- {0xD707, 0xC494},{0xD708, 0xC495},{0xD709, 0xC496},{0xD70A, 0xC497},{0xD70B, 0xC498},{0xD70C, 0xC499},{0xD70D, 0xC49A},{0xD70E, 0xC49B},
- {0xD70F, 0xC49C},{0xD710, 0xC49D},{0xD711, 0xC8D5},{0xD712, 0xC49E},{0xD713, 0xC49F},{0xD714, 0xC4A0},{0xD715, 0xC541},{0xD716, 0xC542},
- {0xD717, 0xC543},{0xD718, 0xC8D6},{0xD719, 0xC8D7},{0xD71A, 0xC544},{0xD71B, 0xC545},{0xD71C, 0xC8D8},{0xD71D, 0xC546},{0xD71E, 0xC547},
- {0xD71F, 0xC548},{0xD720, 0xC8D9},{0xD721, 0xC549},{0xD722, 0xC54A},{0xD723, 0xC54B},{0xD724, 0xC54C},{0xD725, 0xC54D},{0xD726, 0xC54E},
- {0xD727, 0xC54F},{0xD728, 0xC8DA},{0xD729, 0xC8DB},{0xD72A, 0xC550},{0xD72B, 0xC8DC},{0xD72C, 0xC551},{0xD72D, 0xC8DD},{0xD72E, 0xC552},
- {0xD72F, 0xC553},{0xD730, 0xC554},{0xD731, 0xC555},{0xD732, 0xC556},{0xD733, 0xC557},{0xD734, 0xC8DE},{0xD735, 0xC8DF},{0xD736, 0xC558},
- {0xD737, 0xC559},{0xD738, 0xC8E0},{0xD739, 0xC55A},{0xD73A, 0xC561},{0xD73B, 0xC562},{0xD73C, 0xC8E1},{0xD73D, 0xC563},{0xD73E, 0xC564},
- {0xD73F, 0xC565},{0xD740, 0xC566},{0xD741, 0xC567},{0xD742, 0xC568},{0xD743, 0xC569},{0xD744, 0xC8E2},{0xD745, 0xC56A},{0xD746, 0xC56B},
- {0xD747, 0xC8E3},{0xD748, 0xC56C},{0xD749, 0xC8E4},{0xD74A, 0xC56D},{0xD74B, 0xC56E},{0xD74C, 0xC56F},{0xD74D, 0xC570},{0xD74E, 0xC571},
- {0xD74F, 0xC572},{0xD750, 0xC8E5},{0xD751, 0xC8E6},{0xD752, 0xC573},{0xD753, 0xC574},{0xD754, 0xC8E7},{0xD755, 0xC575},{0xD756, 0xC8E8},
- {0xD757, 0xC8E9},{0xD758, 0xC8EA},{0xD759, 0xC8EB},{0xD75A, 0xC576},{0xD75B, 0xC577},{0xD75C, 0xC578},{0xD75D, 0xC579},{0xD75E, 0xC57A},
- {0xD75F, 0xC581},{0xD760, 0xC8EC},{0xD761, 0xC8ED},{0xD762, 0xC582},{0xD763, 0xC8EE},{0xD764, 0xC583},{0xD765, 0xC8EF},{0xD766, 0xC584},
- {0xD767, 0xC585},{0xD768, 0xC586},{0xD769, 0xC8F0},{0xD76A, 0xC587},{0xD76B, 0xC588},{0xD76C, 0xC8F1},{0xD76D, 0xC589},{0xD76E, 0xC58A},
- {0xD76F, 0xC58B},{0xD770, 0xC8F2},{0xD771, 0xC58C},{0xD772, 0xC58D},{0xD773, 0xC58E},{0xD774, 0xC8F3},{0xD775, 0xC58F},{0xD776, 0xC590},
- {0xD777, 0xC591},{0xD778, 0xC592},{0xD779, 0xC593},{0xD77A, 0xC594},{0xD77B, 0xC595},{0xD77C, 0xC8F4},{0xD77D, 0xC8F5},{0xD77E, 0xC596},
- {0xD77F, 0xC597},{0xD780, 0xC598},{0xD781, 0xC8F6},{0xD782, 0xC599},{0xD783, 0xC59A},{0xD784, 0xC59B},{0xD785, 0xC59C},{0xD786, 0xC59D},
- {0xD787, 0xC59E},{0xD788, 0xC8F7},{0xD789, 0xC8F8},{0xD78A, 0xC59F},{0xD78B, 0xC5A0},{0xD78C, 0xC8F9},{0xD78D, 0xC641},{0xD78E, 0xC642},
- {0xD78F, 0xC643},{0xD790, 0xC8FA},{0xD791, 0xC644},{0xD792, 0xC645},{0xD793, 0xC646},{0xD794, 0xC647},{0xD795, 0xC648},{0xD796, 0xC649},
- {0xD797, 0xC64A},{0xD798, 0xC8FB},{0xD799, 0xC8FC},{0xD79A, 0xC64B},{0xD79B, 0xC8FD},{0xD79C, 0xC64C},{0xD79D, 0xC8FE},{0xD79E, 0xC64D},
- {0xD79F, 0xC64E},{0xD7A0, 0xC64F},{0xD7A1, 0xC650},{0xD7A2, 0xC651},{0xD7A3, 0xC652},{0xF900, 0xCBD0},{0xF901, 0xCBD6},{0xF902, 0xCBE7},
- {0xF903, 0xCDCF},{0xF904, 0xCDE8},{0xF905, 0xCEAD},{0xF906, 0xCFFB},{0xF907, 0xD0A2},{0xF908, 0xD0B8},{0xF909, 0xD0D0},{0xF90A, 0xD0DD},
- {0xF90B, 0xD1D4},{0xF90C, 0xD1D5},{0xF90D, 0xD1D8},{0xF90E, 0xD1DB},{0xF90F, 0xD1DC},{0xF910, 0xD1DD},{0xF911, 0xD1DE},{0xF912, 0xD1DF},
- {0xF913, 0xD1E0},{0xF914, 0xD1E2},{0xF915, 0xD1E3},{0xF916, 0xD1E4},{0xF917, 0xD1E5},{0xF918, 0xD1E6},{0xF919, 0xD1E8},{0xF91A, 0xD1E9},
- {0xF91B, 0xD1EA},{0xF91C, 0xD1EB},{0xF91D, 0xD1ED},{0xF91E, 0xD1EF},{0xF91F, 0xD1F0},{0xF920, 0xD1F2},{0xF921, 0xD1F6},{0xF922, 0xD1FA},
- {0xF923, 0xD1FC},{0xF924, 0xD1FD},{0xF925, 0xD1FE},{0xF926, 0xD2A2},{0xF927, 0xD2A3},{0xF928, 0xD2A7},{0xF929, 0xD2A8},{0xF92A, 0xD2A9},
- {0xF92B, 0xD2AA},{0xF92C, 0xD2AB},{0xF92D, 0xD2AD},{0xF92E, 0xD2B2},{0xF92F, 0xD2BE},{0xF930, 0xD2C2},{0xF931, 0xD2C3},{0xF932, 0xD2C4},
- {0xF933, 0xD2C6},{0xF934, 0xD2C7},{0xF935, 0xD2C8},{0xF936, 0xD2C9},{0xF937, 0xD2CA},{0xF938, 0xD2CB},{0xF939, 0xD2CD},{0xF93A, 0xD2CE},
- {0xF93B, 0xD2CF},{0xF93C, 0xD2D0},{0xF93D, 0xD2D1},{0xF93E, 0xD2D2},{0xF93F, 0xD2D3},{0xF940, 0xD2D4},{0xF941, 0xD2D5},{0xF942, 0xD2D6},
- {0xF943, 0xD2D7},{0xF944, 0xD2D9},{0xF945, 0xD2DA},{0xF946, 0xD2DE},{0xF947, 0xD2DF},{0xF948, 0xD2E1},{0xF949, 0xD2E2},{0xF94A, 0xD2E4},
- {0xF94B, 0xD2E5},{0xF94C, 0xD2E6},{0xF94D, 0xD2E7},{0xF94E, 0xD2E8},{0xF94F, 0xD2E9},{0xF950, 0xD2EA},{0xF951, 0xD2EB},{0xF952, 0xD2F0},
- {0xF953, 0xD2F1},{0xF954, 0xD2F2},{0xF955, 0xD2F3},{0xF956, 0xD2F4},{0xF957, 0xD2F5},{0xF958, 0xD2F7},{0xF959, 0xD2F8},{0xF95A, 0xD4E6},
- {0xF95B, 0xD4FC},{0xF95C, 0xD5A5},{0xF95D, 0xD5AB},{0xF95E, 0xD5AE},{0xF95F, 0xD6B8},{0xF960, 0xD6CD},{0xF961, 0xD7CB},{0xF962, 0xD7E4},
- {0xF963, 0xDBC5},{0xF964, 0xDBE4},{0xF965, 0xDCA5},{0xF966, 0xDDA5},{0xF967, 0xDDD5},{0xF968, 0xDDF4},{0xF969, 0xDEFC},{0xF96A, 0xDEFE},
- {0xF96B, 0xDFB3},{0xF96C, 0xDFE1},{0xF96D, 0xDFE8},{0xF96E, 0xE0F1},{0xF96F, 0xE1AD},{0xF970, 0xE1ED},{0xF971, 0xE3F5},{0xF972, 0xE4A1},
- {0xF973, 0xE4A9},{0xF974, 0xE5AE},{0xF975, 0xE5B1},{0xF976, 0xE5B2},{0xF977, 0xE5B9},{0xF978, 0xE5BB},{0xF979, 0xE5BC},{0xF97A, 0xE5C4},
- {0xF97B, 0xE5CE},{0xF97C, 0xE5D0},{0xF97D, 0xE5D2},{0xF97E, 0xE5D6},{0xF97F, 0xE5FA},{0xF980, 0xE5FB},{0xF981, 0xE5FC},{0xF982, 0xE5FE},
- {0xF983, 0xE6A1},{0xF984, 0xE6A4},{0xF985, 0xE6A7},{0xF986, 0xE6AD},{0xF987, 0xE6AF},{0xF988, 0xE6B0},{0xF989, 0xE6B1},{0xF98A, 0xE6B3},
- {0xF98B, 0xE6B7},{0xF98C, 0xE6B8},{0xF98D, 0xE6BC},{0xF98E, 0xE6C4},{0xF98F, 0xE6C6},{0xF990, 0xE6C7},{0xF991, 0xE6CA},{0xF992, 0xE6D2},
- {0xF993, 0xE6D6},{0xF994, 0xE6D9},{0xF995, 0xE6DC},{0xF996, 0xE6DF},{0xF997, 0xE6E1},{0xF998, 0xE6E4},{0xF999, 0xE6E5},{0xF99A, 0xE6E6},
- {0xF99B, 0xE6E8},{0xF99C, 0xE6EA},{0xF99D, 0xE6EB},{0xF99E, 0xE6EC},{0xF99F, 0xE6EF},{0xF9A0, 0xE6F1},{0xF9A1, 0xE6F2},{0xF9A2, 0xE6F5},
- {0xF9A3, 0xE6F6},{0xF9A4, 0xE6F7},{0xF9A5, 0xE6F9},{0xF9A6, 0xE7A1},{0xF9A7, 0xE7A6},{0xF9A8, 0xE7A9},{0xF9A9, 0xE7AA},{0xF9AA, 0xE7AC},
- {0xF9AB, 0xE7AD},{0xF9AC, 0xE7B0},{0xF9AD, 0xE7BF},{0xF9AE, 0xE7C1},{0xF9AF, 0xE7C6},{0xF9B0, 0xE7C7},{0xF9B1, 0xE7CB},{0xF9B2, 0xE7CD},
- {0xF9B3, 0xE7CF},{0xF9B4, 0xE7D0},{0xF9B5, 0xE7D3},{0xF9B6, 0xE7DF},{0xF9B7, 0xE7E4},{0xF9B8, 0xE7E6},{0xF9B9, 0xE7F7},{0xF9BA, 0xE8E7},
- {0xF9BB, 0xE8E8},{0xF9BC, 0xE8F0},{0xF9BD, 0xE8F1},{0xF9BE, 0xE8F7},{0xF9BF, 0xE8F9},{0xF9C0, 0xE8FB},{0xF9C1, 0xE8FE},{0xF9C2, 0xE9A7},
- {0xF9C3, 0xE9AC},{0xF9C4, 0xE9CC},{0xF9C5, 0xE9F7},{0xF9C6, 0xEAC1},{0xF9C7, 0xEAE5},{0xF9C8, 0xEAF4},{0xF9C9, 0xEAF7},{0xF9CA, 0xEAFC},
- {0xF9CB, 0xEAFE},{0xF9CC, 0xEBA4},{0xF9CD, 0xEBA7},{0xF9CE, 0xEBA9},{0xF9CF, 0xEBAA},{0xF9D0, 0xEBBA},{0xF9D1, 0xEBBB},{0xF9D2, 0xEBBD},
- {0xF9D3, 0xEBC1},{0xF9D4, 0xEBC2},{0xF9D5, 0xEBC6},{0xF9D6, 0xEBC7},{0xF9D7, 0xEBCC},{0xF9D8, 0xEBCF},{0xF9D9, 0xEBD0},{0xF9DA, 0xEBD1},
- {0xF9DB, 0xEBD2},{0xF9DC, 0xEBD8},{0xF9DD, 0xECA6},{0xF9DE, 0xECA7},{0xF9DF, 0xECAA},{0xF9E0, 0xECAF},{0xF9E1, 0xECB0},{0xF9E2, 0xECB1},
- {0xF9E3, 0xECB2},{0xF9E4, 0xECB5},{0xF9E5, 0xECB8},{0xF9E6, 0xECBA},{0xF9E7, 0xECC0},{0xF9E8, 0xECC1},{0xF9E9, 0xECC5},{0xF9EA, 0xECC6},
- {0xF9EB, 0xECC9},{0xF9EC, 0xECCA},{0xF9ED, 0xECD5},{0xF9EE, 0xECDD},{0xF9EF, 0xECDE},{0xF9F0, 0xECE1},{0xF9F1, 0xECE4},{0xF9F2, 0xECE7},
- {0xF9F3, 0xECE8},{0xF9F4, 0xECF7},{0xF9F5, 0xECF8},{0xF9F6, 0xECFA},{0xF9F7, 0xEDA1},{0xF9F8, 0xEDA2},{0xF9F9, 0xEDA3},{0xF9FA, 0xEDEE},
- {0xF9FB, 0xEEDB},{0xF9FC, 0xF2BD},{0xF9FD, 0xF2FA},{0xF9FE, 0xF3B1},{0xF9FF, 0xF4A7},{0xFA00, 0xF4EE},{0xFA01, 0xF6F4},{0xFA02, 0xF6F6},
- {0xFA03, 0xF7B8},{0xFA04, 0xF7C8},{0xFA05, 0xF7D3},{0xFA06, 0xF8DB},{0xFA07, 0xF8F0},{0xFA08, 0xFAA1},{0xFA09, 0xFAA2},{0xFA0A, 0xFAE6},
- {0xFA0B, 0xFCA9},{0xFF01, 0xA3A1},{0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA3A4},{0xFF05, 0xA3A5},{0xFF06, 0xA3A6},{0xFF07, 0xA3A7},
- {0xFF08, 0xA3A8},{0xFF09, 0xA3A9},{0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},{0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},
- {0xFF10, 0xA3B0},{0xFF11, 0xA3B1},{0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},{0xFF16, 0xA3B6},{0xFF17, 0xA3B7},
- {0xFF18, 0xA3B8},{0xFF19, 0xA3B9},{0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},{0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},
- {0xFF20, 0xA3C0},{0xFF21, 0xA3C1},{0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},{0xFF26, 0xA3C6},{0xFF27, 0xA3C7},
- {0xFF28, 0xA3C8},{0xFF29, 0xA3C9},{0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},{0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},
- {0xFF30, 0xA3D0},{0xFF31, 0xA3D1},{0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},{0xFF36, 0xA3D6},{0xFF37, 0xA3D7},
- {0xFF38, 0xA3D8},{0xFF39, 0xA3D9},{0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA1AC},{0xFF3D, 0xA3DD},{0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},
- {0xFF40, 0xA3E0},{0xFF41, 0xA3E1},{0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},{0xFF46, 0xA3E6},{0xFF47, 0xA3E7},
- {0xFF48, 0xA3E8},{0xFF49, 0xA3E9},{0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},{0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},
- {0xFF50, 0xA3F0},{0xFF51, 0xA3F1},{0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},{0xFF56, 0xA3F6},{0xFF57, 0xA3F7},
- {0xFF58, 0xA3F8},{0xFF59, 0xA3F9},{0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},{0xFF5E, 0xA2A6},{0xFFE0, 0xA1CB},
- {0xFFE1, 0xA1CC},{0xFFE2, 0xA1FE},{0xFFE3, 0xA3FE},{0xFFE5, 0xA1CD},{0xFFE6, 0xA3DC}
-};
diff --git a/vcl/source/fontsubset/u2prc.inc b/vcl/source/fontsubset/u2prc.inc
deleted file mode 100644
index 445461b59653..000000000000
--- a/vcl/source/fontsubset/u2prc.inc
+++ /dev/null
@@ -1,3036 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// use generic RTL_TEXTENCODING_ to get rid of this file
-
-sal_uInt16pair xlat_1_4[24035] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A4, 0xA1E8},
- {0x00A7, 0xA1EC},{0x00A8, 0xA1A7},{0x00B0, 0xA1E3},{0x00B1, 0xA1C0},{0x00B7, 0xA1A4},{0x00D7, 0xA1C1},{0x00E0, 0xA8A4},{0x00E1, 0xA8A2},
- {0x00E8, 0xA8A8},{0x00E9, 0xA8A6},{0x00EA, 0xA8BA},{0x00EC, 0xA8AC},{0x00ED, 0xA8AA},{0x00F2, 0xA8B0},{0x00F3, 0xA8AE},{0x00F7, 0xA1C2},
- {0x00F9, 0xA8B4},{0x00FA, 0xA8B2},{0x00FC, 0xA8B9},{0x0101, 0xA8A1},{0x0113, 0xA8A5},{0x011B, 0xA8A7},{0x012B, 0xA8A9},{0x0144, 0xA8BD},
- {0x0148, 0xA8BE},{0x014D, 0xA8AD},{0x016B, 0xA8B1},{0x01CE, 0xA8A3},{0x01D0, 0xA8AB},{0x01D2, 0xA8AF},{0x01D4, 0xA8B3},{0x01D6, 0xA8B5},
- {0x01D8, 0xA8B6},{0x01DA, 0xA8B7},{0x01DC, 0xA8B8},{0x0251, 0xA8BB},{0x0261, 0xA8C0},{0x02C7, 0xA1A6},{0x02C9, 0xA1A5},{0x02CA, 0xA840},
- {0x02CB, 0xA841},{0x02D9, 0xA842},{0x0391, 0xA6A1},{0x0392, 0xA6A2},{0x0393, 0xA6A3},{0x0394, 0xA6A4},{0x0395, 0xA6A5},{0x0396, 0xA6A6},
- {0x0397, 0xA6A7},{0x0398, 0xA6A8},{0x0399, 0xA6A9},{0x039A, 0xA6AA},{0x039B, 0xA6AB},{0x039C, 0xA6AC},{0x039D, 0xA6AD},{0x039E, 0xA6AE},
- {0x039F, 0xA6AF},{0x03A0, 0xA6B0},{0x03A1, 0xA6B1},{0x03A3, 0xA6B2},{0x03A4, 0xA6B3},{0x03A5, 0xA6B4},{0x03A6, 0xA6B5},{0x03A7, 0xA6B6},
- {0x03A8, 0xA6B7},{0x03A9, 0xA6B8},{0x03B1, 0xA6C1},{0x03B2, 0xA6C2},{0x03B3, 0xA6C3},{0x03B4, 0xA6C4},{0x03B5, 0xA6C5},{0x03B6, 0xA6C6},
- {0x03B7, 0xA6C7},{0x03B8, 0xA6C8},{0x03B9, 0xA6C9},{0x03BA, 0xA6CA},{0x03BB, 0xA6CB},{0x03BC, 0xA6CC},{0x03BD, 0xA6CD},{0x03BE, 0xA6CE},
- {0x03BF, 0xA6CF},{0x03C0, 0xA6D0},{0x03C1, 0xA6D1},{0x03C3, 0xA6D2},{0x03C4, 0xA6D3},{0x03C5, 0xA6D4},{0x03C6, 0xA6D5},{0x03C7, 0xA6D6},
- {0x03C8, 0xA6D7},{0x03C9, 0xA6D8},{0x0401, 0xA7A7},{0x0410, 0xA7A1},{0x0411, 0xA7A2},{0x0412, 0xA7A3},{0x0413, 0xA7A4},{0x0414, 0xA7A5},
- {0x0415, 0xA7A6},{0x0416, 0xA7A8},{0x0417, 0xA7A9},{0x0418, 0xA7AA},{0x0419, 0xA7AB},{0x041A, 0xA7AC},{0x041B, 0xA7AD},{0x041C, 0xA7AE},
- {0x041D, 0xA7AF},{0x041E, 0xA7B0},{0x041F, 0xA7B1},{0x0420, 0xA7B2},{0x0421, 0xA7B3},{0x0422, 0xA7B4},{0x0423, 0xA7B5},{0x0424, 0xA7B6},
- {0x0425, 0xA7B7},{0x0426, 0xA7B8},{0x0427, 0xA7B9},{0x0428, 0xA7BA},{0x0429, 0xA7BB},{0x042A, 0xA7BC},{0x042B, 0xA7BD},{0x042C, 0xA7BE},
- {0x042D, 0xA7BF},{0x042E, 0xA7C0},{0x042F, 0xA7C1},{0x0430, 0xA7D1},{0x0431, 0xA7D2},{0x0432, 0xA7D3},{0x0433, 0xA7D4},{0x0434, 0xA7D5},
- {0x0435, 0xA7D6},{0x0436, 0xA7D8},{0x0437, 0xA7D9},{0x0438, 0xA7DA},{0x0439, 0xA7DB},{0x043A, 0xA7DC},{0x043B, 0xA7DD},{0x043C, 0xA7DE},
- {0x043D, 0xA7DF},{0x043E, 0xA7E0},{0x043F, 0xA7E1},{0x0440, 0xA7E2},{0x0441, 0xA7E3},{0x0442, 0xA7E4},{0x0443, 0xA7E5},{0x0444, 0xA7E6},
- {0x0445, 0xA7E7},{0x0446, 0xA7E8},{0x0447, 0xA7E9},{0x0448, 0xA7EA},{0x0449, 0xA7EB},{0x044A, 0xA7EC},{0x044B, 0xA7ED},{0x044C, 0xA7EE},
- {0x044D, 0xA7EF},{0x044E, 0xA7F0},{0x044F, 0xA7F1},{0x0451, 0xA7D7},{0x2010, 0xA95C},{0x2013, 0xA843},{0x2014, 0xA1AA},{0x2015, 0xA844},
- {0x2016, 0xA1AC},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2025, 0xA845},{0x2026, 0xA1AD},{0x2030, 0xA1EB},
- {0x2032, 0xA1E4},{0x2033, 0xA1E5},{0x2035, 0xA846},{0x203B, 0xA1F9},{0x2103, 0xA1E6},{0x2105, 0xA847},{0x2109, 0xA848},{0x2116, 0xA1ED},
- {0x2121, 0xA959},{0x2160, 0xA2F1},{0x2161, 0xA2F2},{0x2162, 0xA2F3},{0x2163, 0xA2F4},{0x2164, 0xA2F5},{0x2165, 0xA2F6},{0x2166, 0xA2F7},
- {0x2167, 0xA2F8},{0x2168, 0xA2F9},{0x2169, 0xA2FA},{0x216A, 0xA2FB},{0x216B, 0xA2FC},{0x2170, 0xA2A1},{0x2171, 0xA2A2},{0x2172, 0xA2A3},
- {0x2173, 0xA2A4},{0x2174, 0xA2A5},{0x2175, 0xA2A6},{0x2176, 0xA2A7},{0x2177, 0xA2A8},{0x2178, 0xA2A9},{0x2179, 0xA2AA},{0x2190, 0xA1FB},
- {0x2191, 0xA1FC},{0x2192, 0xA1FA},{0x2193, 0xA1FD},{0x2196, 0xA849},{0x2197, 0xA84A},{0x2198, 0xA84B},{0x2199, 0xA84C},{0x2208, 0xA1CA},
- {0x220F, 0xA1C7},{0x2211, 0xA1C6},{0x2215, 0xA84D},{0x221A, 0xA1CC},{0x221D, 0xA1D8},{0x221E, 0xA1DE},{0x221F, 0xA84E},{0x2220, 0xA1CF},
- {0x2223, 0xA84F},{0x2225, 0xA1CE},{0x2227, 0xA1C4},{0x2228, 0xA1C5},{0x2229, 0xA1C9},{0x222A, 0xA1C8},{0x222B, 0xA1D2},{0x222E, 0xA1D3},
- {0x2234, 0xA1E0},{0x2235, 0xA1DF},{0x2236, 0xA1C3},{0x2237, 0xA1CB},{0x223D, 0xA1D7},{0x2248, 0xA1D6},{0x224C, 0xA1D5},{0x2252, 0xA850},
- {0x2260, 0xA1D9},{0x2261, 0xA1D4},{0x2264, 0xA1DC},{0x2265, 0xA1DD},{0x2266, 0xA851},{0x2267, 0xA852},{0x226E, 0xA1DA},{0x226F, 0xA1DB},
- {0x2299, 0xA1D1},{0x22A5, 0xA1CD},{0x22BF, 0xA853},{0x2312, 0xA1D0},{0x2460, 0xA2D9},{0x2461, 0xA2DA},{0x2462, 0xA2DB},{0x2463, 0xA2DC},
- {0x2464, 0xA2DD},{0x2465, 0xA2DE},{0x2466, 0xA2DF},{0x2467, 0xA2E0},{0x2468, 0xA2E1},{0x2469, 0xA2E2},{0x2474, 0xA2C5},{0x2475, 0xA2C6},
- {0x2476, 0xA2C7},{0x2477, 0xA2C8},{0x2478, 0xA2C9},{0x2479, 0xA2CA},{0x247A, 0xA2CB},{0x247B, 0xA2CC},{0x247C, 0xA2CD},{0x247D, 0xA2CE},
- {0x247E, 0xA2CF},{0x247F, 0xA2D0},{0x2480, 0xA2D1},{0x2481, 0xA2D2},{0x2482, 0xA2D3},{0x2483, 0xA2D4},{0x2484, 0xA2D5},{0x2485, 0xA2D6},
- {0x2486, 0xA2D7},{0x2487, 0xA2D8},{0x2488, 0xA2B1},{0x2489, 0xA2B2},{0x248A, 0xA2B3},{0x248B, 0xA2B4},{0x248C, 0xA2B5},{0x248D, 0xA2B6},
- {0x248E, 0xA2B7},{0x248F, 0xA2B8},{0x2490, 0xA2B9},{0x2491, 0xA2BA},{0x2492, 0xA2BB},{0x2493, 0xA2BC},{0x2494, 0xA2BD},{0x2495, 0xA2BE},
- {0x2496, 0xA2BF},{0x2497, 0xA2C0},{0x2498, 0xA2C1},{0x2499, 0xA2C2},{0x249A, 0xA2C3},{0x249B, 0xA2C4},{0x2500, 0xA9A4},{0x2501, 0xA9A5},
- {0x2502, 0xA9A6},{0x2503, 0xA9A7},{0x2504, 0xA9A8},{0x2505, 0xA9A9},{0x2506, 0xA9AA},{0x2507, 0xA9AB},{0x2508, 0xA9AC},{0x2509, 0xA9AD},
- {0x250A, 0xA9AE},{0x250B, 0xA9AF},{0x250C, 0xA9B0},{0x250D, 0xA9B1},{0x250E, 0xA9B2},{0x250F, 0xA9B3},{0x2510, 0xA9B4},{0x2511, 0xA9B5},
- {0x2512, 0xA9B6},{0x2513, 0xA9B7},{0x2514, 0xA9B8},{0x2515, 0xA9B9},{0x2516, 0xA9BA},{0x2517, 0xA9BB},{0x2518, 0xA9BC},{0x2519, 0xA9BD},
- {0x251A, 0xA9BE},{0x251B, 0xA9BF},{0x251C, 0xA9C0},{0x251D, 0xA9C1},{0x251E, 0xA9C2},{0x251F, 0xA9C3},{0x2520, 0xA9C4},{0x2521, 0xA9C5},
- {0x2522, 0xA9C6},{0x2523, 0xA9C7},{0x2524, 0xA9C8},{0x2525, 0xA9C9},{0x2526, 0xA9CA},{0x2527, 0xA9CB},{0x2528, 0xA9CC},{0x2529, 0xA9CD},
- {0x252A, 0xA9CE},{0x252B, 0xA9CF},{0x252C, 0xA9D0},{0x252D, 0xA9D1},{0x252E, 0xA9D2},{0x252F, 0xA9D3},{0x2530, 0xA9D4},{0x2531, 0xA9D5},
- {0x2532, 0xA9D6},{0x2533, 0xA9D7},{0x2534, 0xA9D8},{0x2535, 0xA9D9},{0x2536, 0xA9DA},{0x2537, 0xA9DB},{0x2538, 0xA9DC},{0x2539, 0xA9DD},
- {0x253A, 0xA9DE},{0x253B, 0xA9DF},{0x253C, 0xA9E0},{0x253D, 0xA9E1},{0x253E, 0xA9E2},{0x253F, 0xA9E3},{0x2540, 0xA9E4},{0x2541, 0xA9E5},
- {0x2542, 0xA9E6},{0x2543, 0xA9E7},{0x2544, 0xA9E8},{0x2545, 0xA9E9},{0x2546, 0xA9EA},{0x2547, 0xA9EB},{0x2548, 0xA9EC},{0x2549, 0xA9ED},
- {0x254A, 0xA9EE},{0x254B, 0xA9EF},{0x2550, 0xA854},{0x2551, 0xA855},{0x2552, 0xA856},{0x2553, 0xA857},{0x2554, 0xA858},{0x2555, 0xA859},
- {0x2556, 0xA85A},{0x2557, 0xA85B},{0x2558, 0xA85C},{0x2559, 0xA85D},{0x255A, 0xA85E},{0x255B, 0xA85F},{0x255C, 0xA860},{0x255D, 0xA861},
- {0x255E, 0xA862},{0x255F, 0xA863},{0x2560, 0xA864},{0x2561, 0xA865},{0x2562, 0xA866},{0x2563, 0xA867},{0x2564, 0xA868},{0x2565, 0xA869},
- {0x2566, 0xA86A},{0x2567, 0xA86B},{0x2568, 0xA86C},{0x2569, 0xA86D},{0x256A, 0xA86E},{0x256B, 0xA86F},{0x256C, 0xA870},{0x256D, 0xA871},
- {0x256E, 0xA872},{0x256F, 0xA873},{0x2570, 0xA874},{0x2571, 0xA875},{0x2572, 0xA876},{0x2573, 0xA877},{0x2581, 0xA878},{0x2582, 0xA879},
- {0x2583, 0xA87A},{0x2584, 0xA87B},{0x2585, 0xA87C},{0x2586, 0xA87D},{0x2587, 0xA87E},{0x2588, 0xA880},{0x2589, 0xA881},{0x258A, 0xA882},
- {0x258B, 0xA883},{0x258C, 0xA884},{0x258D, 0xA885},{0x258E, 0xA886},{0x258F, 0xA887},{0x2593, 0xA888},{0x2594, 0xA889},{0x2595, 0xA88A},
- {0x25A0, 0xA1F6},{0x25A1, 0xA1F5},{0x25B2, 0xA1F8},{0x25B3, 0xA1F7},{0x25BC, 0xA88B},{0x25BD, 0xA88C},{0x25C6, 0xA1F4},{0x25C7, 0xA1F3},
- {0x25CB, 0xA1F0},{0x25CE, 0xA1F2},{0x25CF, 0xA1F1},{0x25E2, 0xA88D},{0x25E3, 0xA88E},{0x25E4, 0xA88F},{0x25E5, 0xA890},{0x2605, 0xA1EF},
- {0x2606, 0xA1EE},{0x2609, 0xA891},{0x2640, 0xA1E2},{0x2641, 0xA892},{0x2642, 0xA1E1},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},
- {0x3003, 0xA1A8},{0x3005, 0xA1A9},{0x3006, 0xA965},{0x3007, 0xA996},{0x3008, 0xA1B4},{0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},
- {0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BE},{0x3011, 0xA1BF},{0x3012, 0xA893},{0x3013, 0xA1FE},
- {0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3016, 0xA1BC},{0x3017, 0xA1BD},{0x301D, 0xA894},{0x301E, 0xA895},{0x3021, 0xA940},{0x3022, 0xA941},
- {0x3023, 0xA942},{0x3024, 0xA943},{0x3025, 0xA944},{0x3026, 0xA945},{0x3027, 0xA946},{0x3028, 0xA947},{0x3029, 0xA948},{0x3041, 0xA4A1},
- {0x3042, 0xA4A2},{0x3043, 0xA4A3},{0x3044, 0xA4A4},{0x3045, 0xA4A5},{0x3046, 0xA4A6},{0x3047, 0xA4A7},{0x3048, 0xA4A8},{0x3049, 0xA4A9},
- {0x304A, 0xA4AA},{0x304B, 0xA4AB},{0x304C, 0xA4AC},{0x304D, 0xA4AD},{0x304E, 0xA4AE},{0x304F, 0xA4AF},{0x3050, 0xA4B0},{0x3051, 0xA4B1},
- {0x3052, 0xA4B2},{0x3053, 0xA4B3},{0x3054, 0xA4B4},{0x3055, 0xA4B5},{0x3056, 0xA4B6},{0x3057, 0xA4B7},{0x3058, 0xA4B8},{0x3059, 0xA4B9},
- {0x305A, 0xA4BA},{0x305B, 0xA4BB},{0x305C, 0xA4BC},{0x305D, 0xA4BD},{0x305E, 0xA4BE},{0x305F, 0xA4BF},{0x3060, 0xA4C0},{0x3061, 0xA4C1},
- {0x3062, 0xA4C2},{0x3063, 0xA4C3},{0x3064, 0xA4C4},{0x3065, 0xA4C5},{0x3066, 0xA4C6},{0x3067, 0xA4C7},{0x3068, 0xA4C8},{0x3069, 0xA4C9},
- {0x306A, 0xA4CA},{0x306B, 0xA4CB},{0x306C, 0xA4CC},{0x306D, 0xA4CD},{0x306E, 0xA4CE},{0x306F, 0xA4CF},{0x3070, 0xA4D0},{0x3071, 0xA4D1},
- {0x3072, 0xA4D2},{0x3073, 0xA4D3},{0x3074, 0xA4D4},{0x3075, 0xA4D5},{0x3076, 0xA4D6},{0x3077, 0xA4D7},{0x3078, 0xA4D8},{0x3079, 0xA4D9},
- {0x307A, 0xA4DA},{0x307B, 0xA4DB},{0x307C, 0xA4DC},{0x307D, 0xA4DD},{0x307E, 0xA4DE},{0x307F, 0xA4DF},{0x3080, 0xA4E0},{0x3081, 0xA4E1},
- {0x3082, 0xA4E2},{0x3083, 0xA4E3},{0x3084, 0xA4E4},{0x3085, 0xA4E5},{0x3086, 0xA4E6},{0x3087, 0xA4E7},{0x3088, 0xA4E8},{0x3089, 0xA4E9},
- {0x308A, 0xA4EA},{0x308B, 0xA4EB},{0x308C, 0xA4EC},{0x308D, 0xA4ED},{0x308E, 0xA4EE},{0x308F, 0xA4EF},{0x3090, 0xA4F0},{0x3091, 0xA4F1},
- {0x3092, 0xA4F2},{0x3093, 0xA4F3},{0x309B, 0xA961},{0x309C, 0xA962},{0x309D, 0xA966},{0x309E, 0xA967},{0x30A1, 0xA5A1},{0x30A2, 0xA5A2},
- {0x30A3, 0xA5A3},{0x30A4, 0xA5A4},{0x30A5, 0xA5A5},{0x30A6, 0xA5A6},{0x30A7, 0xA5A7},{0x30A8, 0xA5A8},{0x30A9, 0xA5A9},{0x30AA, 0xA5AA},
- {0x30AB, 0xA5AB},{0x30AC, 0xA5AC},{0x30AD, 0xA5AD},{0x30AE, 0xA5AE},{0x30AF, 0xA5AF},{0x30B0, 0xA5B0},{0x30B1, 0xA5B1},{0x30B2, 0xA5B2},
- {0x30B3, 0xA5B3},{0x30B4, 0xA5B4},{0x30B5, 0xA5B5},{0x30B6, 0xA5B6},{0x30B7, 0xA5B7},{0x30B8, 0xA5B8},{0x30B9, 0xA5B9},{0x30BA, 0xA5BA},
- {0x30BB, 0xA5BB},{0x30BC, 0xA5BC},{0x30BD, 0xA5BD},{0x30BE, 0xA5BE},{0x30BF, 0xA5BF},{0x30C0, 0xA5C0},{0x30C1, 0xA5C1},{0x30C2, 0xA5C2},
- {0x30C3, 0xA5C3},{0x30C4, 0xA5C4},{0x30C5, 0xA5C5},{0x30C6, 0xA5C6},{0x30C7, 0xA5C7},{0x30C8, 0xA5C8},{0x30C9, 0xA5C9},{0x30CA, 0xA5CA},
- {0x30CB, 0xA5CB},{0x30CC, 0xA5CC},{0x30CD, 0xA5CD},{0x30CE, 0xA5CE},{0x30CF, 0xA5CF},{0x30D0, 0xA5D0},{0x30D1, 0xA5D1},{0x30D2, 0xA5D2},
- {0x30D3, 0xA5D3},{0x30D4, 0xA5D4},{0x30D5, 0xA5D5},{0x30D6, 0xA5D6},{0x30D7, 0xA5D7},{0x30D8, 0xA5D8},{0x30D9, 0xA5D9},{0x30DA, 0xA5DA},
- {0x30DB, 0xA5DB},{0x30DC, 0xA5DC},{0x30DD, 0xA5DD},{0x30DE, 0xA5DE},{0x30DF, 0xA5DF},{0x30E0, 0xA5E0},{0x30E1, 0xA5E1},{0x30E2, 0xA5E2},
- {0x30E3, 0xA5E3},{0x30E4, 0xA5E4},{0x30E5, 0xA5E5},{0x30E6, 0xA5E6},{0x30E7, 0xA5E7},{0x30E8, 0xA5E8},{0x30E9, 0xA5E9},{0x30EA, 0xA5EA},
- {0x30EB, 0xA5EB},{0x30EC, 0xA5EC},{0x30ED, 0xA5ED},{0x30EE, 0xA5EE},{0x30EF, 0xA5EF},{0x30F0, 0xA5F0},{0x30F1, 0xA5F1},{0x30F2, 0xA5F2},
- {0x30F3, 0xA5F3},{0x30F4, 0xA5F4},{0x30F5, 0xA5F5},{0x30F6, 0xA5F6},{0x30FC, 0xA960},{0x30FD, 0xA963},{0x30FE, 0xA964},{0x3105, 0xA8C5},
- {0x3106, 0xA8C6},{0x3107, 0xA8C7},{0x3108, 0xA8C8},{0x3109, 0xA8C9},{0x310A, 0xA8CA},{0x310B, 0xA8CB},{0x310C, 0xA8CC},{0x310D, 0xA8CD},
- {0x310E, 0xA8CE},{0x310F, 0xA8CF},{0x3110, 0xA8D0},{0x3111, 0xA8D1},{0x3112, 0xA8D2},{0x3113, 0xA8D3},{0x3114, 0xA8D4},{0x3115, 0xA8D5},
- {0x3116, 0xA8D6},{0x3117, 0xA8D7},{0x3118, 0xA8D8},{0x3119, 0xA8D9},{0x311A, 0xA8DA},{0x311B, 0xA8DB},{0x311C, 0xA8DC},{0x311D, 0xA8DD},
- {0x311E, 0xA8DE},{0x311F, 0xA8DF},{0x3120, 0xA8E0},{0x3121, 0xA8E1},{0x3122, 0xA8E2},{0x3123, 0xA8E3},{0x3124, 0xA8E4},{0x3125, 0xA8E5},
- {0x3126, 0xA8E6},{0x3127, 0xA8E7},{0x3128, 0xA8E8},{0x3129, 0xA8E9},{0x3220, 0xA2E5},{0x3221, 0xA2E6},{0x3222, 0xA2E7},{0x3223, 0xA2E8},
- {0x3224, 0xA2E9},{0x3225, 0xA2EA},{0x3226, 0xA2EB},{0x3227, 0xA2EC},{0x3228, 0xA2ED},{0x3229, 0xA2EE},{0x3231, 0xA95A},{0x32A3, 0xA949},
- {0x338E, 0xA94A},{0x338F, 0xA94B},{0x339C, 0xA94C},{0x339D, 0xA94D},{0x339E, 0xA94E},{0x33A1, 0xA94F},{0x33C4, 0xA950},{0x33CE, 0xA951},
- {0x33D1, 0xA952},{0x33D2, 0xA953},{0x33D5, 0xA954},{0x4E00, 0xD2BB},{0x4E01, 0xB6A1},{0x4E02, 0x8140},{0x4E03, 0xC6DF},{0x4E04, 0x8141},
- {0x4E05, 0x8142},{0x4E06, 0x8143},{0x4E07, 0xCDF2},{0x4E08, 0xD5C9},{0x4E09, 0xC8FD},{0x4E0A, 0xC9CF},{0x4E0B, 0xCFC2},{0x4E0C, 0xD8A2},
- {0x4E0D, 0xB2BB},{0x4E0E, 0xD3EB},{0x4E0F, 0x8144},{0x4E10, 0xD8A4},{0x4E11, 0xB3F3},{0x4E12, 0x8145},{0x4E13, 0xD7A8},{0x4E14, 0xC7D2},
- {0x4E15, 0xD8A7},{0x4E16, 0xCAC0},{0x4E17, 0x8146},{0x4E18, 0xC7F0},{0x4E19, 0xB1FB},{0x4E1A, 0xD2B5},{0x4E1B, 0xB4D4},{0x4E1C, 0xB6AB},
- {0x4E1D, 0xCBBF},{0x4E1E, 0xD8A9},{0x4E1F, 0x8147},{0x4E20, 0x8148},{0x4E21, 0x8149},{0x4E22, 0xB6AA},{0x4E23, 0x814A},{0x4E24, 0xC1BD},
- {0x4E25, 0xD1CF},{0x4E26, 0x814B},{0x4E27, 0xC9A5},{0x4E28, 0xD8AD},{0x4E29, 0x814C},{0x4E2A, 0xB8F6},{0x4E2B, 0xD1BE},{0x4E2C, 0xE3DC},
- {0x4E2D, 0xD6D0},{0x4E2E, 0x814D},{0x4E2F, 0x814E},{0x4E30, 0xB7E1},{0x4E31, 0x814F},{0x4E32, 0xB4AE},{0x4E33, 0x8150},{0x4E34, 0xC1D9},
- {0x4E35, 0x8151},{0x4E36, 0xD8BC},{0x4E37, 0x8152},{0x4E38, 0xCDE8},{0x4E39, 0xB5A4},{0x4E3A, 0xCEAA},{0x4E3B, 0xD6F7},{0x4E3C, 0x8153},
- {0x4E3D, 0xC0F6},{0x4E3E, 0xBED9},{0x4E3F, 0xD8AF},{0x4E40, 0x8154},{0x4E41, 0x8155},{0x4E42, 0x8156},{0x4E43, 0xC4CB},{0x4E44, 0x8157},
- {0x4E45, 0xBEC3},{0x4E46, 0x8158},{0x4E47, 0xD8B1},{0x4E48, 0xC3B4},{0x4E49, 0xD2E5},{0x4E4A, 0x8159},{0x4E4B, 0xD6AE},{0x4E4C, 0xCEDA},
- {0x4E4D, 0xD5A7},{0x4E4E, 0xBAF5},{0x4E4F, 0xB7A6},{0x4E50, 0xC0D6},{0x4E51, 0x815A},{0x4E52, 0xC6B9},{0x4E53, 0xC5D2},{0x4E54, 0xC7C7},
- {0x4E55, 0x815B},{0x4E56, 0xB9D4},{0x4E57, 0x815C},{0x4E58, 0xB3CB},{0x4E59, 0xD2D2},{0x4E5A, 0x815D},{0x4E5B, 0x815E},{0x4E5C, 0xD8BF},
- {0x4E5D, 0xBEC5},{0x4E5E, 0xC6F2},{0x4E5F, 0xD2B2},{0x4E60, 0xCFB0},{0x4E61, 0xCFE7},{0x4E62, 0x815F},{0x4E63, 0x8160},{0x4E64, 0x8161},
- {0x4E65, 0x8162},{0x4E66, 0xCAE9},{0x4E67, 0x8163},{0x4E68, 0x8164},{0x4E69, 0xD8C0},{0x4E6A, 0x8165},{0x4E6B, 0x8166},{0x4E6C, 0x8167},
- {0x4E6D, 0x8168},{0x4E6E, 0x8169},{0x4E6F, 0x816A},{0x4E70, 0xC2F2},{0x4E71, 0xC2D2},{0x4E72, 0x816B},{0x4E73, 0xC8E9},{0x4E74, 0x816C},
- {0x4E75, 0x816D},{0x4E76, 0x816E},{0x4E77, 0x816F},{0x4E78, 0x8170},{0x4E79, 0x8171},{0x4E7A, 0x8172},{0x4E7B, 0x8173},{0x4E7C, 0x8174},
- {0x4E7D, 0x8175},{0x4E7E, 0xC7AC},{0x4E7F, 0x8176},{0x4E80, 0x8177},{0x4E81, 0x8178},{0x4E82, 0x8179},{0x4E83, 0x817A},{0x4E84, 0x817B},
- {0x4E85, 0x817C},{0x4E86, 0xC1CB},{0x4E87, 0x817D},{0x4E88, 0xD3E8},{0x4E89, 0xD5F9},{0x4E8A, 0x817E},{0x4E8B, 0xCAC2},{0x4E8C, 0xB6FE},
- {0x4E8D, 0xD8A1},{0x4E8E, 0xD3DA},{0x4E8F, 0xBFF7},{0x4E90, 0x8180},{0x4E91, 0xD4C6},{0x4E92, 0xBBA5},{0x4E93, 0xD8C1},{0x4E94, 0xCEE5},
- {0x4E95, 0xBEAE},{0x4E96, 0x8181},{0x4E97, 0x8182},{0x4E98, 0xD8A8},{0x4E99, 0x8183},{0x4E9A, 0xD1C7},{0x4E9B, 0xD0A9},{0x4E9C, 0x8184},
- {0x4E9D, 0x8185},{0x4E9E, 0x8186},{0x4E9F, 0xD8BD},{0x4EA0, 0xD9EF},{0x4EA1, 0xCDF6},{0x4EA2, 0xBFBA},{0x4EA3, 0x8187},{0x4EA4, 0xBDBB},
- {0x4EA5, 0xBAA5},{0x4EA6, 0xD2E0},{0x4EA7, 0xB2FA},{0x4EA8, 0xBAE0},{0x4EA9, 0xC4B6},{0x4EAA, 0x8188},{0x4EAB, 0xCFED},{0x4EAC, 0xBEA9},
- {0x4EAD, 0xCDA4},{0x4EAE, 0xC1C1},{0x4EAF, 0x8189},{0x4EB0, 0x818A},{0x4EB1, 0x818B},{0x4EB2, 0xC7D7},{0x4EB3, 0xD9F1},{0x4EB4, 0x818C},
- {0x4EB5, 0xD9F4},{0x4EB6, 0x818D},{0x4EB7, 0x818E},{0x4EB8, 0x818F},{0x4EB9, 0x8190},{0x4EBA, 0xC8CB},{0x4EBB, 0xD8E9},{0x4EBC, 0x8191},
- {0x4EBD, 0x8192},{0x4EBE, 0x8193},{0x4EBF, 0xD2DA},{0x4EC0, 0xCAB2},{0x4EC1, 0xC8CA},{0x4EC2, 0xD8EC},{0x4EC3, 0xD8EA},{0x4EC4, 0xD8C6},
- {0x4EC5, 0xBDF6},{0x4EC6, 0xC6CD},{0x4EC7, 0xB3F0},{0x4EC8, 0x8194},{0x4EC9, 0xD8EB},{0x4ECA, 0xBDF1},{0x4ECB, 0xBDE9},{0x4ECC, 0x8195},
- {0x4ECD, 0xC8D4},{0x4ECE, 0xB4D3},{0x4ECF, 0x8196},{0x4ED0, 0x8197},{0x4ED1, 0xC2D8},{0x4ED2, 0x8198},{0x4ED3, 0xB2D6},{0x4ED4, 0xD7D0},
- {0x4ED5, 0xCACB},{0x4ED6, 0xCBFB},{0x4ED7, 0xD5CC},{0x4ED8, 0xB8B6},{0x4ED9, 0xCFC9},{0x4EDA, 0x8199},{0x4EDB, 0x819A},{0x4EDC, 0x819B},
- {0x4EDD, 0xD9DA},{0x4EDE, 0xD8F0},{0x4EDF, 0xC7AA},{0x4EE0, 0x819C},{0x4EE1, 0xD8EE},{0x4EE2, 0x819D},{0x4EE3, 0xB4FA},{0x4EE4, 0xC1EE},
- {0x4EE5, 0xD2D4},{0x4EE6, 0x819E},{0x4EE7, 0x819F},{0x4EE8, 0xD8ED},{0x4EE9, 0x81A0},{0x4EEA, 0xD2C7},{0x4EEB, 0xD8EF},{0x4EEC, 0xC3C7},
- {0x4EED, 0x81A1},{0x4EEE, 0x81A2},{0x4EEF, 0x81A3},{0x4EF0, 0xD1F6},{0x4EF1, 0x81A4},{0x4EF2, 0xD6D9},{0x4EF3, 0xD8F2},{0x4EF4, 0x81A5},
- {0x4EF5, 0xD8F5},{0x4EF6, 0xBCFE},{0x4EF7, 0xBCDB},{0x4EF8, 0x81A6},{0x4EF9, 0x81A7},{0x4EFA, 0x81A8},{0x4EFB, 0xC8CE},{0x4EFC, 0x81A9},
- {0x4EFD, 0xB7DD},{0x4EFE, 0x81AA},{0x4EFF, 0xB7C2},{0x4F00, 0x81AB},{0x4F01, 0xC6F3},{0x4F02, 0x81AC},{0x4F03, 0x81AD},{0x4F04, 0x81AE},
- {0x4F05, 0x81AF},{0x4F06, 0x81B0},{0x4F07, 0x81B1},{0x4F08, 0x81B2},{0x4F09, 0xD8F8},{0x4F0A, 0xD2C1},{0x4F0B, 0x81B3},{0x4F0C, 0x81B4},
- {0x4F0D, 0xCEE9},{0x4F0E, 0xBCBF},{0x4F0F, 0xB7FC},{0x4F10, 0xB7A5},{0x4F11, 0xD0DD},{0x4F12, 0x81B5},{0x4F13, 0x81B6},{0x4F14, 0x81B7},
- {0x4F15, 0x81B8},{0x4F16, 0x81B9},{0x4F17, 0xD6DA},{0x4F18, 0xD3C5},{0x4F19, 0xBBEF},{0x4F1A, 0xBBE1},{0x4F1B, 0xD8F1},{0x4F1C, 0x81BA},
- {0x4F1D, 0x81BB},{0x4F1E, 0xC9A1},{0x4F1F, 0xCEB0},{0x4F20, 0xB4AB},{0x4F21, 0x81BC},{0x4F22, 0xD8F3},{0x4F23, 0x81BD},{0x4F24, 0xC9CB},
- {0x4F25, 0xD8F6},{0x4F26, 0xC2D7},{0x4F27, 0xD8F7},{0x4F28, 0x81BE},{0x4F29, 0x81BF},{0x4F2A, 0xCEB1},{0x4F2B, 0xD8F9},{0x4F2C, 0x81C0},
- {0x4F2D, 0x81C1},{0x4F2E, 0x81C2},{0x4F2F, 0xB2AE},{0x4F30, 0xB9C0},{0x4F31, 0x81C3},{0x4F32, 0xD9A3},{0x4F33, 0x81C4},{0x4F34, 0xB0E9},
- {0x4F35, 0x81C5},{0x4F36, 0xC1E6},{0x4F37, 0x81C6},{0x4F38, 0xC9EC},{0x4F39, 0x81C7},{0x4F3A, 0xCBC5},{0x4F3B, 0x81C8},{0x4F3C, 0xCBC6},
- {0x4F3D, 0xD9A4},{0x4F3E, 0x81C9},{0x4F3F, 0x81CA},{0x4F40, 0x81CB},{0x4F41, 0x81CC},{0x4F42, 0x81CD},{0x4F43, 0xB5E8},{0x4F44, 0x81CE},
- {0x4F45, 0x81CF},{0x4F46, 0xB5AB},{0x4F47, 0x81D0},{0x4F48, 0x81D1},{0x4F49, 0x81D2},{0x4F4A, 0x81D3},{0x4F4B, 0x81D4},{0x4F4C, 0x81D5},
- {0x4F4D, 0xCEBB},{0x4F4E, 0xB5CD},{0x4F4F, 0xD7A1},{0x4F50, 0xD7F4},{0x4F51, 0xD3D3},{0x4F52, 0x81D6},{0x4F53, 0xCCE5},{0x4F54, 0x81D7},
- {0x4F55, 0xBACE},{0x4F56, 0x81D8},{0x4F57, 0xD9A2},{0x4F58, 0xD9DC},{0x4F59, 0xD3E0},{0x4F5A, 0xD8FD},{0x4F5B, 0xB7F0},{0x4F5C, 0xD7F7},
- {0x4F5D, 0xD8FE},{0x4F5E, 0xD8FA},{0x4F5F, 0xD9A1},{0x4F60, 0xC4E3},{0x4F61, 0x81D9},{0x4F62, 0x81DA},{0x4F63, 0xD3B6},{0x4F64, 0xD8F4},
- {0x4F65, 0xD9DD},{0x4F66, 0x81DB},{0x4F67, 0xD8FB},{0x4F68, 0x81DC},{0x4F69, 0xC5E5},{0x4F6A, 0x81DD},{0x4F6B, 0x81DE},{0x4F6C, 0xC0D0},
- {0x4F6D, 0x81DF},{0x4F6E, 0x81E0},{0x4F6F, 0xD1F0},{0x4F70, 0xB0DB},{0x4F71, 0x81E1},{0x4F72, 0x81E2},{0x4F73, 0xBCD1},{0x4F74, 0xD9A6},
- {0x4F75, 0x81E3},{0x4F76, 0xD9A5},{0x4F77, 0x81E4},{0x4F78, 0x81E5},{0x4F79, 0x81E6},{0x4F7A, 0x81E7},{0x4F7B, 0xD9AC},{0x4F7C, 0xD9AE},
- {0x4F7D, 0x81E8},{0x4F7E, 0xD9AB},{0x4F7F, 0xCAB9},{0x4F80, 0x81E9},{0x4F81, 0x81EA},{0x4F82, 0x81EB},{0x4F83, 0xD9A9},{0x4F84, 0xD6B6},
- {0x4F85, 0x81EC},{0x4F86, 0x81ED},{0x4F87, 0x81EE},{0x4F88, 0xB3DE},{0x4F89, 0xD9A8},{0x4F8A, 0x81EF},{0x4F8B, 0xC0FD},{0x4F8C, 0x81F0},
- {0x4F8D, 0xCACC},{0x4F8E, 0x81F1},{0x4F8F, 0xD9AA},{0x4F90, 0x81F2},{0x4F91, 0xD9A7},{0x4F92, 0x81F3},{0x4F93, 0x81F4},{0x4F94, 0xD9B0},
- {0x4F95, 0x81F5},{0x4F96, 0x81F6},{0x4F97, 0xB6B1},{0x4F98, 0x81F7},{0x4F99, 0x81F8},{0x4F9A, 0x81F9},{0x4F9B, 0xB9A9},{0x4F9C, 0x81FA},
- {0x4F9D, 0xD2C0},{0x4F9E, 0x81FB},{0x4F9F, 0x81FC},{0x4FA0, 0xCFC0},{0x4FA1, 0x81FD},{0x4FA2, 0x81FE},{0x4FA3, 0xC2C2},{0x4FA4, 0x8240},
- {0x4FA5, 0xBDC4},{0x4FA6, 0xD5EC},{0x4FA7, 0xB2E0},{0x4FA8, 0xC7C8},{0x4FA9, 0xBFEB},{0x4FAA, 0xD9AD},{0x4FAB, 0x8241},{0x4FAC, 0xD9AF},
- {0x4FAD, 0x8242},{0x4FAE, 0xCEEA},{0x4FAF, 0xBAEE},{0x4FB0, 0x8243},{0x4FB1, 0x8244},{0x4FB2, 0x8245},{0x4FB3, 0x8246},{0x4FB4, 0x8247},
- {0x4FB5, 0xC7D6},{0x4FB6, 0x8248},{0x4FB7, 0x8249},{0x4FB8, 0x824A},{0x4FB9, 0x824B},{0x4FBA, 0x824C},{0x4FBB, 0x824D},{0x4FBC, 0x824E},
- {0x4FBD, 0x824F},{0x4FBE, 0x8250},{0x4FBF, 0xB1E3},{0x4FC0, 0x8251},{0x4FC1, 0x8252},{0x4FC2, 0x8253},{0x4FC3, 0xB4D9},{0x4FC4, 0xB6ED},
- {0x4FC5, 0xD9B4},{0x4FC6, 0x8254},{0x4FC7, 0x8255},{0x4FC8, 0x8256},{0x4FC9, 0x8257},{0x4FCA, 0xBFA1},{0x4FCB, 0x8258},{0x4FCC, 0x8259},
- {0x4FCD, 0x825A},{0x4FCE, 0xD9DE},{0x4FCF, 0xC7CE},{0x4FD0, 0xC0FE},{0x4FD1, 0xD9B8},{0x4FD2, 0x825B},{0x4FD3, 0x825C},{0x4FD4, 0x825D},
- {0x4FD5, 0x825E},{0x4FD6, 0x825F},{0x4FD7, 0xCBD7},{0x4FD8, 0xB7FD},{0x4FD9, 0x8260},{0x4FDA, 0xD9B5},{0x4FDB, 0x8261},{0x4FDC, 0xD9B7},
- {0x4FDD, 0xB1A3},{0x4FDE, 0xD3E1},{0x4FDF, 0xD9B9},{0x4FE0, 0x8262},{0x4FE1, 0xD0C5},{0x4FE2, 0x8263},{0x4FE3, 0xD9B6},{0x4FE4, 0x8264},
- {0x4FE5, 0x8265},{0x4FE6, 0xD9B1},{0x4FE7, 0x8266},{0x4FE8, 0xD9B2},{0x4FE9, 0xC1A9},{0x4FEA, 0xD9B3},{0x4FEB, 0x8267},{0x4FEC, 0x8268},
- {0x4FED, 0xBCF3},{0x4FEE, 0xD0DE},{0x4FEF, 0xB8A9},{0x4FF0, 0x8269},{0x4FF1, 0xBEE3},{0x4FF2, 0x826A},{0x4FF3, 0xD9BD},{0x4FF4, 0x826B},
- {0x4FF5, 0x826C},{0x4FF6, 0x826D},{0x4FF7, 0x826E},{0x4FF8, 0xD9BA},{0x4FF9, 0x826F},{0x4FFA, 0xB0B3},{0x4FFB, 0x8270},{0x4FFC, 0x8271},
- {0x4FFD, 0x8272},{0x4FFE, 0xD9C2},{0x4FFF, 0x8273},{0x5000, 0x8274},{0x5001, 0x8275},{0x5002, 0x8276},{0x5003, 0x8277},{0x5004, 0x8278},
- {0x5005, 0x8279},{0x5006, 0x827A},{0x5007, 0x827B},{0x5008, 0x827C},{0x5009, 0x827D},{0x500A, 0x827E},{0x500B, 0x8280},{0x500C, 0xD9C4},
- {0x500D, 0xB1B6},{0x500E, 0x8281},{0x500F, 0xD9BF},{0x5010, 0x8282},{0x5011, 0x8283},{0x5012, 0xB5B9},{0x5013, 0x8284},{0x5014, 0xBEF3},
- {0x5015, 0x8285},{0x5016, 0x8286},{0x5017, 0x8287},{0x5018, 0xCCC8},{0x5019, 0xBAF2},{0x501A, 0xD2D0},{0x501B, 0x8288},{0x501C, 0xD9C3},
- {0x501D, 0x8289},{0x501E, 0x828A},{0x501F, 0xBDE8},{0x5020, 0x828B},{0x5021, 0xB3AB},{0x5022, 0x828C},{0x5023, 0x828D},{0x5024, 0x828E},
- {0x5025, 0xD9C5},{0x5026, 0xBEEB},{0x5027, 0x828F},{0x5028, 0xD9C6},{0x5029, 0xD9BB},{0x502A, 0xC4DF},{0x502B, 0x8290},{0x502C, 0xD9BE},
- {0x502D, 0xD9C1},{0x502E, 0xD9C0},{0x502F, 0x8291},{0x5030, 0x8292},{0x5031, 0x8293},{0x5032, 0x8294},{0x5033, 0x8295},{0x5034, 0x8296},
- {0x5035, 0x8297},{0x5036, 0x8298},{0x5037, 0x8299},{0x5038, 0x829A},{0x5039, 0x829B},{0x503A, 0xD5AE},{0x503B, 0x829C},{0x503C, 0xD6B5},
- {0x503D, 0x829D},{0x503E, 0xC7E3},{0x503F, 0x829E},{0x5040, 0x829F},{0x5041, 0x82A0},{0x5042, 0x82A1},{0x5043, 0xD9C8},{0x5044, 0x82A2},
- {0x5045, 0x82A3},{0x5046, 0x82A4},{0x5047, 0xBCD9},{0x5048, 0xD9CA},{0x5049, 0x82A5},{0x504A, 0x82A6},{0x504B, 0x82A7},{0x504C, 0xD9BC},
- {0x504D, 0x82A8},{0x504E, 0xD9CB},{0x504F, 0xC6AB},{0x5050, 0x82A9},{0x5051, 0x82AA},{0x5052, 0x82AB},{0x5053, 0x82AC},{0x5054, 0x82AD},
- {0x5055, 0xD9C9},{0x5056, 0x82AE},{0x5057, 0x82AF},{0x5058, 0x82B0},{0x5059, 0x82B1},{0x505A, 0xD7F6},{0x505B, 0x82B2},{0x505C, 0xCDA3},
- {0x505D, 0x82B3},{0x505E, 0x82B4},{0x505F, 0x82B5},{0x5060, 0x82B6},{0x5061, 0x82B7},{0x5062, 0x82B8},{0x5063, 0x82B9},{0x5064, 0x82BA},
- {0x5065, 0xBDA1},{0x5066, 0x82BB},{0x5067, 0x82BC},{0x5068, 0x82BD},{0x5069, 0x82BE},{0x506A, 0x82BF},{0x506B, 0x82C0},{0x506C, 0xD9CC},
- {0x506D, 0x82C1},{0x506E, 0x82C2},{0x506F, 0x82C3},{0x5070, 0x82C4},{0x5071, 0x82C5},{0x5072, 0x82C6},{0x5073, 0x82C7},{0x5074, 0x82C8},
- {0x5075, 0x82C9},{0x5076, 0xC5BC},{0x5077, 0xCDB5},{0x5078, 0x82CA},{0x5079, 0x82CB},{0x507A, 0x82CC},{0x507B, 0xD9CD},{0x507C, 0x82CD},
- {0x507D, 0x82CE},{0x507E, 0xD9C7},{0x507F, 0xB3A5},{0x5080, 0xBFFE},{0x5081, 0x82CF},{0x5082, 0x82D0},{0x5083, 0x82D1},{0x5084, 0x82D2},
- {0x5085, 0xB8B5},{0x5086, 0x82D3},{0x5087, 0x82D4},{0x5088, 0xC0FC},{0x5089, 0x82D5},{0x508A, 0x82D6},{0x508B, 0x82D7},{0x508C, 0x82D8},
- {0x508D, 0xB0F8},{0x508E, 0x82D9},{0x508F, 0x82DA},{0x5090, 0x82DB},{0x5091, 0x82DC},{0x5092, 0x82DD},{0x5093, 0x82DE},{0x5094, 0x82DF},
- {0x5095, 0x82E0},{0x5096, 0x82E1},{0x5097, 0x82E2},{0x5098, 0x82E3},{0x5099, 0x82E4},{0x509A, 0x82E5},{0x509B, 0x82E6},{0x509C, 0x82E7},
- {0x509D, 0x82E8},{0x509E, 0x82E9},{0x509F, 0x82EA},{0x50A0, 0x82EB},{0x50A1, 0x82EC},{0x50A2, 0x82ED},{0x50A3, 0xB4F6},{0x50A4, 0x82EE},
- {0x50A5, 0xD9CE},{0x50A6, 0x82EF},{0x50A7, 0xD9CF},{0x50A8, 0xB4A2},{0x50A9, 0xD9D0},{0x50AA, 0x82F0},{0x50AB, 0x82F1},{0x50AC, 0xB4DF},
- {0x50AD, 0x82F2},{0x50AE, 0x82F3},{0x50AF, 0x82F4},{0x50B0, 0x82F5},{0x50B1, 0x82F6},{0x50B2, 0xB0C1},{0x50B3, 0x82F7},{0x50B4, 0x82F8},
- {0x50B5, 0x82F9},{0x50B6, 0x82FA},{0x50B7, 0x82FB},{0x50B8, 0x82FC},{0x50B9, 0x82FD},{0x50BA, 0xD9D1},{0x50BB, 0xC9B5},{0x50BC, 0x82FE},
- {0x50BD, 0x8340},{0x50BE, 0x8341},{0x50BF, 0x8342},{0x50C0, 0x8343},{0x50C1, 0x8344},{0x50C2, 0x8345},{0x50C3, 0x8346},{0x50C4, 0x8347},
- {0x50C5, 0x8348},{0x50C6, 0x8349},{0x50C7, 0x834A},{0x50C8, 0x834B},{0x50C9, 0x834C},{0x50CA, 0x834D},{0x50CB, 0x834E},{0x50CC, 0x834F},
- {0x50CD, 0x8350},{0x50CE, 0x8351},{0x50CF, 0xCFF1},{0x50D0, 0x8352},{0x50D1, 0x8353},{0x50D2, 0x8354},{0x50D3, 0x8355},{0x50D4, 0x8356},
- {0x50D5, 0x8357},{0x50D6, 0xD9D2},{0x50D7, 0x8358},{0x50D8, 0x8359},{0x50D9, 0x835A},{0x50DA, 0xC1C5},{0x50DB, 0x835B},{0x50DC, 0x835C},
- {0x50DD, 0x835D},{0x50DE, 0x835E},{0x50DF, 0x835F},{0x50E0, 0x8360},{0x50E1, 0x8361},{0x50E2, 0x8362},{0x50E3, 0x8363},{0x50E4, 0x8364},
- {0x50E5, 0x8365},{0x50E6, 0xD9D6},{0x50E7, 0xC9AE},{0x50E8, 0x8366},{0x50E9, 0x8367},{0x50EA, 0x8368},{0x50EB, 0x8369},{0x50EC, 0xD9D5},
- {0x50ED, 0xD9D4},{0x50EE, 0xD9D7},{0x50EF, 0x836A},{0x50F0, 0x836B},{0x50F1, 0x836C},{0x50F2, 0x836D},{0x50F3, 0xCBDB},{0x50F4, 0x836E},
- {0x50F5, 0xBDA9},{0x50F6, 0x836F},{0x50F7, 0x8370},{0x50F8, 0x8371},{0x50F9, 0x8372},{0x50FA, 0x8373},{0x50FB, 0xC6A7},{0x50FC, 0x8374},
- {0x50FD, 0x8375},{0x50FE, 0x8376},{0x50FF, 0x8377},{0x5100, 0x8378},{0x5101, 0x8379},{0x5102, 0x837A},{0x5103, 0x837B},{0x5104, 0x837C},
- {0x5105, 0x837D},{0x5106, 0xD9D3},{0x5107, 0xD9D8},{0x5108, 0x837E},{0x5109, 0x8380},{0x510A, 0x8381},{0x510B, 0xD9D9},{0x510C, 0x8382},
- {0x510D, 0x8383},{0x510E, 0x8384},{0x510F, 0x8385},{0x5110, 0x8386},{0x5111, 0x8387},{0x5112, 0xC8E5},{0x5113, 0x8388},{0x5114, 0x8389},
- {0x5115, 0x838A},{0x5116, 0x838B},{0x5117, 0x838C},{0x5118, 0x838D},{0x5119, 0x838E},{0x511A, 0x838F},{0x511B, 0x8390},{0x511C, 0x8391},
- {0x511D, 0x8392},{0x511E, 0x8393},{0x511F, 0x8394},{0x5120, 0x8395},{0x5121, 0xC0DC},{0x5122, 0x8396},{0x5123, 0x8397},{0x5124, 0x8398},
- {0x5125, 0x8399},{0x5126, 0x839A},{0x5127, 0x839B},{0x5128, 0x839C},{0x5129, 0x839D},{0x512A, 0x839E},{0x512B, 0x839F},{0x512C, 0x83A0},
- {0x512D, 0x83A1},{0x512E, 0x83A2},{0x512F, 0x83A3},{0x5130, 0x83A4},{0x5131, 0x83A5},{0x5132, 0x83A6},{0x5133, 0x83A7},{0x5134, 0x83A8},
- {0x5135, 0x83A9},{0x5136, 0x83AA},{0x5137, 0x83AB},{0x5138, 0x83AC},{0x5139, 0x83AD},{0x513A, 0x83AE},{0x513B, 0x83AF},{0x513C, 0x83B0},
- {0x513D, 0x83B1},{0x513E, 0x83B2},{0x513F, 0xB6F9},{0x5140, 0xD8A3},{0x5141, 0xD4CA},{0x5142, 0x83B3},{0x5143, 0xD4AA},{0x5144, 0xD0D6},
- {0x5145, 0xB3E4},{0x5146, 0xD5D7},{0x5147, 0x83B4},{0x5148, 0xCFC8},{0x5149, 0xB9E2},{0x514A, 0x83B5},{0x514B, 0xBFCB},{0x514C, 0x83B6},
- {0x514D, 0xC3E2},{0x514E, 0x83B7},{0x514F, 0x83B8},{0x5150, 0x83B9},{0x5151, 0xB6D2},{0x5152, 0x83BA},{0x5153, 0x83BB},{0x5154, 0xCDC3},
- {0x5155, 0xD9EE},{0x5156, 0xD9F0},{0x5157, 0x83BC},{0x5158, 0x83BD},{0x5159, 0x83BE},{0x515A, 0xB5B3},{0x515B, 0x83BF},{0x515C, 0xB6B5},
- {0x515D, 0x83C0},{0x515E, 0x83C1},{0x515F, 0x83C2},{0x5160, 0x83C3},{0x5161, 0x83C4},{0x5162, 0xBEA4},{0x5163, 0x83C5},{0x5164, 0x83C6},
- {0x5165, 0xC8EB},{0x5166, 0x83C7},{0x5167, 0x83C8},{0x5168, 0xC8AB},{0x5169, 0x83C9},{0x516A, 0x83CA},{0x516B, 0xB0CB},{0x516C, 0xB9AB},
- {0x516D, 0xC1F9},{0x516E, 0xD9E2},{0x516F, 0x83CB},{0x5170, 0xC0BC},{0x5171, 0xB9B2},{0x5172, 0x83CC},{0x5173, 0xB9D8},{0x5174, 0xD0CB},
- {0x5175, 0xB1F8},{0x5176, 0xC6E4},{0x5177, 0xBEDF},{0x5178, 0xB5E4},{0x5179, 0xD7C8},{0x517A, 0x83CD},{0x517B, 0xD1F8},{0x517C, 0xBCE6},
- {0x517D, 0xCADE},{0x517E, 0x83CE},{0x517F, 0x83CF},{0x5180, 0xBCBD},{0x5181, 0xD9E6},{0x5182, 0xD8E7},{0x5183, 0x83D0},{0x5184, 0x83D1},
- {0x5185, 0xC4DA},{0x5186, 0x83D2},{0x5187, 0x83D3},{0x5188, 0xB8D4},{0x5189, 0xC8BD},{0x518A, 0x83D4},{0x518B, 0x83D5},{0x518C, 0xB2E1},
- {0x518D, 0xD4D9},{0x518E, 0x83D6},{0x518F, 0x83D7},{0x5190, 0x83D8},{0x5191, 0x83D9},{0x5192, 0xC3B0},{0x5193, 0x83DA},{0x5194, 0x83DB},
- {0x5195, 0xC3E1},{0x5196, 0xDAA2},{0x5197, 0xC8DF},{0x5198, 0x83DC},{0x5199, 0xD0B4},{0x519A, 0x83DD},{0x519B, 0xBEFC},{0x519C, 0xC5A9},
- {0x519D, 0x83DE},{0x519E, 0x83DF},{0x519F, 0x83E0},{0x51A0, 0xB9DA},{0x51A1, 0x83E1},{0x51A2, 0xDAA3},{0x51A3, 0x83E2},{0x51A4, 0xD4A9},
- {0x51A5, 0xDAA4},{0x51A6, 0x83E3},{0x51A7, 0x83E4},{0x51A8, 0x83E5},{0x51A9, 0x83E6},{0x51AA, 0x83E7},{0x51AB, 0xD9FB},{0x51AC, 0xB6AC},
- {0x51AD, 0x83E8},{0x51AE, 0x83E9},{0x51AF, 0xB7EB},{0x51B0, 0xB1F9},{0x51B1, 0xD9FC},{0x51B2, 0xB3E5},{0x51B3, 0xBEF6},{0x51B4, 0x83EA},
- {0x51B5, 0xBFF6},{0x51B6, 0xD2B1},{0x51B7, 0xC0E4},{0x51B8, 0x83EB},{0x51B9, 0x83EC},{0x51BA, 0x83ED},{0x51BB, 0xB6B3},{0x51BC, 0xD9FE},
- {0x51BD, 0xD9FD},{0x51BE, 0x83EE},{0x51BF, 0x83EF},{0x51C0, 0xBEBB},{0x51C1, 0x83F0},{0x51C2, 0x83F1},{0x51C3, 0x83F2},{0x51C4, 0xC6E0},
- {0x51C5, 0x83F3},{0x51C6, 0xD7BC},{0x51C7, 0xDAA1},{0x51C8, 0x83F4},{0x51C9, 0xC1B9},{0x51CA, 0x83F5},{0x51CB, 0xB5F2},{0x51CC, 0xC1E8},
- {0x51CD, 0x83F6},{0x51CE, 0x83F7},{0x51CF, 0xBCF5},{0x51D0, 0x83F8},{0x51D1, 0xB4D5},{0x51D2, 0x83F9},{0x51D3, 0x83FA},{0x51D4, 0x83FB},
- {0x51D5, 0x83FC},{0x51D6, 0x83FD},{0x51D7, 0x83FE},{0x51D8, 0x8440},{0x51D9, 0x8441},{0x51DA, 0x8442},{0x51DB, 0xC1DD},{0x51DC, 0x8443},
- {0x51DD, 0xC4FD},{0x51DE, 0x8444},{0x51DF, 0x8445},{0x51E0, 0xBCB8},{0x51E1, 0xB7B2},{0x51E2, 0x8446},{0x51E3, 0x8447},{0x51E4, 0xB7EF},
- {0x51E5, 0x8448},{0x51E6, 0x8449},{0x51E7, 0x844A},{0x51E8, 0x844B},{0x51E9, 0x844C},{0x51EA, 0x844D},{0x51EB, 0xD9EC},{0x51EC, 0x844E},
- {0x51ED, 0xC6BE},{0x51EE, 0x844F},{0x51EF, 0xBFAD},{0x51F0, 0xBBCB},{0x51F1, 0x8450},{0x51F2, 0x8451},{0x51F3, 0xB5CA},{0x51F4, 0x8452},
- {0x51F5, 0xDBC9},{0x51F6, 0xD0D7},{0x51F7, 0x8453},{0x51F8, 0xCDB9},{0x51F9, 0xB0BC},{0x51FA, 0xB3F6},{0x51FB, 0xBBF7},{0x51FC, 0xDBCA},
- {0x51FD, 0xBAAF},{0x51FE, 0x8454},{0x51FF, 0xD4E4},{0x5200, 0xB5B6},{0x5201, 0xB5F3},{0x5202, 0xD8D6},{0x5203, 0xC8D0},{0x5204, 0x8455},
- {0x5205, 0x8456},{0x5206, 0xB7D6},{0x5207, 0xC7D0},{0x5208, 0xD8D7},{0x5209, 0x8457},{0x520A, 0xBFAF},{0x520B, 0x8458},{0x520C, 0x8459},
- {0x520D, 0xDBBB},{0x520E, 0xD8D8},{0x520F, 0x845A},{0x5210, 0x845B},{0x5211, 0xD0CC},{0x5212, 0xBBAE},{0x5213, 0x845C},{0x5214, 0x845D},
- {0x5215, 0x845E},{0x5216, 0xEBBE},{0x5217, 0xC1D0},{0x5218, 0xC1F5},{0x5219, 0xD4F2},{0x521A, 0xB8D5},{0x521B, 0xB4B4},{0x521C, 0x845F},
- {0x521D, 0xB3F5},{0x521E, 0x8460},{0x521F, 0x8461},{0x5220, 0xC9BE},{0x5221, 0x8462},{0x5222, 0x8463},{0x5223, 0x8464},{0x5224, 0xC5D0},
- {0x5225, 0x8465},{0x5226, 0x8466},{0x5227, 0x8467},{0x5228, 0xC5D9},{0x5229, 0xC0FB},{0x522A, 0x8468},{0x522B, 0xB1F0},{0x522C, 0x8469},
- {0x522D, 0xD8D9},{0x522E, 0xB9CE},{0x522F, 0x846A},{0x5230, 0xB5BD},{0x5231, 0x846B},{0x5232, 0x846C},{0x5233, 0xD8DA},{0x5234, 0x846D},
- {0x5235, 0x846E},{0x5236, 0xD6C6},{0x5237, 0xCBA2},{0x5238, 0xC8AF},{0x5239, 0xC9B2},{0x523A, 0xB4CC},{0x523B, 0xBFCC},{0x523C, 0x846F},
- {0x523D, 0xB9F4},{0x523E, 0x8470},{0x523F, 0xD8DB},{0x5240, 0xD8DC},{0x5241, 0xB6E7},{0x5242, 0xBCC1},{0x5243, 0xCCEA},{0x5244, 0x8471},
- {0x5245, 0x8472},{0x5246, 0x8473},{0x5247, 0x8474},{0x5248, 0x8475},{0x5249, 0x8476},{0x524A, 0xCFF7},{0x524B, 0x8477},{0x524C, 0xD8DD},
- {0x524D, 0xC7B0},{0x524E, 0x8478},{0x524F, 0x8479},{0x5250, 0xB9D0},{0x5251, 0xBDA3},{0x5252, 0x847A},{0x5253, 0x847B},{0x5254, 0xCCDE},
- {0x5255, 0x847C},{0x5256, 0xC6CA},{0x5257, 0x847D},{0x5258, 0x847E},{0x5259, 0x8480},{0x525A, 0x8481},{0x525B, 0x8482},{0x525C, 0xD8E0},
- {0x525D, 0x8483},{0x525E, 0xD8DE},{0x525F, 0x8484},{0x5260, 0x8485},{0x5261, 0xD8DF},{0x5262, 0x8486},{0x5263, 0x8487},{0x5264, 0x8488},
- {0x5265, 0xB0FE},{0x5266, 0x8489},{0x5267, 0xBEE7},{0x5268, 0x848A},{0x5269, 0xCAA3},{0x526A, 0xBCF4},{0x526B, 0x848B},{0x526C, 0x848C},
- {0x526D, 0x848D},{0x526E, 0x848E},{0x526F, 0xB8B1},{0x5270, 0x848F},{0x5271, 0x8490},{0x5272, 0xB8EE},{0x5273, 0x8491},{0x5274, 0x8492},
- {0x5275, 0x8493},{0x5276, 0x8494},{0x5277, 0x8495},{0x5278, 0x8496},{0x5279, 0x8497},{0x527A, 0x8498},{0x527B, 0x8499},{0x527C, 0x849A},
- {0x527D, 0xD8E2},{0x527E, 0x849B},{0x527F, 0xBDCB},{0x5280, 0x849C},{0x5281, 0xD8E4},{0x5282, 0xD8E3},{0x5283, 0x849D},{0x5284, 0x849E},
- {0x5285, 0x849F},{0x5286, 0x84A0},{0x5287, 0x84A1},{0x5288, 0xC5FC},{0x5289, 0x84A2},{0x528A, 0x84A3},{0x528B, 0x84A4},{0x528C, 0x84A5},
- {0x528D, 0x84A6},{0x528E, 0x84A7},{0x528F, 0x84A8},{0x5290, 0xD8E5},{0x5291, 0x84A9},{0x5292, 0x84AA},{0x5293, 0xD8E6},{0x5294, 0x84AB},
- {0x5295, 0x84AC},{0x5296, 0x84AD},{0x5297, 0x84AE},{0x5298, 0x84AF},{0x5299, 0x84B0},{0x529A, 0x84B1},{0x529B, 0xC1A6},{0x529C, 0x84B2},
- {0x529D, 0xC8B0},{0x529E, 0xB0EC},{0x529F, 0xB9A6},{0x52A0, 0xBCD3},{0x52A1, 0xCEF1},{0x52A2, 0xDBBD},{0x52A3, 0xC1D3},{0x52A4, 0x84B3},
- {0x52A5, 0x84B4},{0x52A6, 0x84B5},{0x52A7, 0x84B6},{0x52A8, 0xB6AF},{0x52A9, 0xD6FA},{0x52AA, 0xC5AC},{0x52AB, 0xBDD9},{0x52AC, 0xDBBE},
- {0x52AD, 0xDBBF},{0x52AE, 0x84B7},{0x52AF, 0x84B8},{0x52B0, 0x84B9},{0x52B1, 0xC0F8},{0x52B2, 0xBEA2},{0x52B3, 0xC0CD},{0x52B4, 0x84BA},
- {0x52B5, 0x84BB},{0x52B6, 0x84BC},{0x52B7, 0x84BD},{0x52B8, 0x84BE},{0x52B9, 0x84BF},{0x52BA, 0x84C0},{0x52BB, 0x84C1},{0x52BC, 0x84C2},
- {0x52BD, 0x84C3},{0x52BE, 0xDBC0},{0x52BF, 0xCAC6},{0x52C0, 0x84C4},{0x52C1, 0x84C5},{0x52C2, 0x84C6},{0x52C3, 0xB2AA},{0x52C4, 0x84C7},
- {0x52C5, 0x84C8},{0x52C6, 0x84C9},{0x52C7, 0xD3C2},{0x52C8, 0x84CA},{0x52C9, 0xC3E3},{0x52CA, 0x84CB},{0x52CB, 0xD1AB},{0x52CC, 0x84CC},
- {0x52CD, 0x84CD},{0x52CE, 0x84CE},{0x52CF, 0x84CF},{0x52D0, 0xDBC2},{0x52D1, 0x84D0},{0x52D2, 0xC0D5},{0x52D3, 0x84D1},{0x52D4, 0x84D2},
- {0x52D5, 0x84D3},{0x52D6, 0xDBC3},{0x52D7, 0x84D4},{0x52D8, 0xBFB1},{0x52D9, 0x84D5},{0x52DA, 0x84D6},{0x52DB, 0x84D7},{0x52DC, 0x84D8},
- {0x52DD, 0x84D9},{0x52DE, 0x84DA},{0x52DF, 0xC4BC},{0x52E0, 0x84DB},{0x52E1, 0x84DC},{0x52E2, 0x84DD},{0x52E3, 0x84DE},{0x52E4, 0xC7DA},
- {0x52E5, 0x84DF},{0x52E6, 0x84E0},{0x52E7, 0x84E1},{0x52E8, 0x84E2},{0x52E9, 0x84E3},{0x52EA, 0x84E4},{0x52EB, 0x84E5},{0x52EC, 0x84E6},
- {0x52ED, 0x84E7},{0x52EE, 0x84E8},{0x52EF, 0x84E9},{0x52F0, 0xDBC4},{0x52F1, 0x84EA},{0x52F2, 0x84EB},{0x52F3, 0x84EC},{0x52F4, 0x84ED},
- {0x52F5, 0x84EE},{0x52F6, 0x84EF},{0x52F7, 0x84F0},{0x52F8, 0x84F1},{0x52F9, 0xD9E8},{0x52FA, 0xC9D7},{0x52FB, 0x84F2},{0x52FC, 0x84F3},
- {0x52FD, 0x84F4},{0x52FE, 0xB9B4},{0x52FF, 0xCEF0},{0x5300, 0xD4C8},{0x5301, 0x84F5},{0x5302, 0x84F6},{0x5303, 0x84F7},{0x5304, 0x84F8},
- {0x5305, 0xB0FC},{0x5306, 0xB4D2},{0x5307, 0x84F9},{0x5308, 0xD0D9},{0x5309, 0x84FA},{0x530A, 0x84FB},{0x530B, 0x84FC},{0x530C, 0x84FD},
- {0x530D, 0xD9E9},{0x530E, 0x84FE},{0x530F, 0xDECB},{0x5310, 0xD9EB},{0x5311, 0x8540},{0x5312, 0x8541},{0x5313, 0x8542},{0x5314, 0x8543},
- {0x5315, 0xD8B0},{0x5316, 0xBBAF},{0x5317, 0xB1B1},{0x5318, 0x8544},{0x5319, 0xB3D7},{0x531A, 0xD8CE},{0x531B, 0x8545},{0x531C, 0x8546},
- {0x531D, 0xD4D1},{0x531E, 0x8547},{0x531F, 0x8548},{0x5320, 0xBDB3},{0x5321, 0xBFEF},{0x5322, 0x8549},{0x5323, 0xCFBB},{0x5324, 0x854A},
- {0x5325, 0x854B},{0x5326, 0xD8D0},{0x5327, 0x854C},{0x5328, 0x854D},{0x5329, 0x854E},{0x532A, 0xB7CB},{0x532B, 0x854F},{0x532C, 0x8550},
- {0x532D, 0x8551},{0x532E, 0xD8D1},{0x532F, 0x8552},{0x5330, 0x8553},{0x5331, 0x8554},{0x5332, 0x8555},{0x5333, 0x8556},{0x5334, 0x8557},
- {0x5335, 0x8558},{0x5336, 0x8559},{0x5337, 0x855A},{0x5338, 0x855B},{0x5339, 0xC6A5},{0x533A, 0xC7F8},{0x533B, 0xD2BD},{0x533C, 0x855C},
- {0x533D, 0x855D},{0x533E, 0xD8D2},{0x533F, 0xC4E4},{0x5340, 0x855E},{0x5341, 0xCAAE},{0x5342, 0x855F},{0x5343, 0xC7A7},{0x5344, 0x8560},
- {0x5345, 0xD8A6},{0x5346, 0x8561},{0x5347, 0xC9FD},{0x5348, 0xCEE7},{0x5349, 0xBBDC},{0x534A, 0xB0EB},{0x534B, 0x8562},{0x534C, 0x8563},
- {0x534D, 0x8564},{0x534E, 0xBBAA},{0x534F, 0xD0AD},{0x5350, 0x8565},{0x5351, 0xB1B0},{0x5352, 0xD7E4},{0x5353, 0xD7BF},{0x5354, 0x8566},
- {0x5355, 0xB5A5},{0x5356, 0xC2F4},{0x5357, 0xC4CF},{0x5358, 0x8567},{0x5359, 0x8568},{0x535A, 0xB2A9},{0x535B, 0x8569},{0x535C, 0xB2B7},
- {0x535D, 0x856A},{0x535E, 0xB1E5},{0x535F, 0xDFB2},{0x5360, 0xD5BC},{0x5361, 0xBFA8},{0x5362, 0xC2AC},{0x5363, 0xD8D5},{0x5364, 0xC2B1},
- {0x5365, 0x856B},{0x5366, 0xD8D4},{0x5367, 0xCED4},{0x5368, 0x856C},{0x5369, 0xDAE0},{0x536A, 0x856D},{0x536B, 0xCEC0},{0x536C, 0x856E},
- {0x536D, 0x856F},{0x536E, 0xD8B4},{0x536F, 0xC3AE},{0x5370, 0xD3A1},{0x5371, 0xCEA3},{0x5372, 0x8570},{0x5373, 0xBCB4},{0x5374, 0xC8B4},
- {0x5375, 0xC2D1},{0x5376, 0x8571},{0x5377, 0xBEED},{0x5378, 0xD0B6},{0x5379, 0x8572},{0x537A, 0xDAE1},{0x537B, 0x8573},{0x537C, 0x8574},
- {0x537D, 0x8575},{0x537E, 0x8576},{0x537F, 0xC7E4},{0x5380, 0x8577},{0x5381, 0x8578},{0x5382, 0xB3A7},{0x5383, 0x8579},{0x5384, 0xB6F2},
- {0x5385, 0xCCFC},{0x5386, 0xC0FA},{0x5387, 0x857A},{0x5388, 0x857B},{0x5389, 0xC0F7},{0x538A, 0x857C},{0x538B, 0xD1B9},{0x538C, 0xD1E1},
- {0x538D, 0xD8C7},{0x538E, 0x857D},{0x538F, 0x857E},{0x5390, 0x8580},{0x5391, 0x8581},{0x5392, 0x8582},{0x5393, 0x8583},{0x5394, 0x8584},
- {0x5395, 0xB2DE},{0x5396, 0x8585},{0x5397, 0x8586},{0x5398, 0xC0E5},{0x5399, 0x8587},{0x539A, 0xBAF1},{0x539B, 0x8588},{0x539C, 0x8589},
- {0x539D, 0xD8C8},{0x539E, 0x858A},{0x539F, 0xD4AD},{0x53A0, 0x858B},{0x53A1, 0x858C},{0x53A2, 0xCFE1},{0x53A3, 0xD8C9},{0x53A4, 0x858D},
- {0x53A5, 0xD8CA},{0x53A6, 0xCFC3},{0x53A7, 0x858E},{0x53A8, 0xB3F8},{0x53A9, 0xBEC7},{0x53AA, 0x858F},{0x53AB, 0x8590},{0x53AC, 0x8591},
- {0x53AD, 0x8592},{0x53AE, 0xD8CB},{0x53AF, 0x8593},{0x53B0, 0x8594},{0x53B1, 0x8595},{0x53B2, 0x8596},{0x53B3, 0x8597},{0x53B4, 0x8598},
- {0x53B5, 0x8599},{0x53B6, 0xDBCC},{0x53B7, 0x859A},{0x53B8, 0x859B},{0x53B9, 0x859C},{0x53BA, 0x859D},{0x53BB, 0xC8A5},{0x53BC, 0x859E},
- {0x53BD, 0x859F},{0x53BE, 0x85A0},{0x53BF, 0xCFD8},{0x53C0, 0x85A1},{0x53C1, 0xC8FE},{0x53C2, 0xB2CE},{0x53C3, 0x85A2},{0x53C4, 0x85A3},
- {0x53C5, 0x85A4},{0x53C6, 0x85A5},{0x53C7, 0x85A6},{0x53C8, 0xD3D6},{0x53C9, 0xB2E6},{0x53CA, 0xBCB0},{0x53CB, 0xD3D1},{0x53CC, 0xCBAB},
- {0x53CD, 0xB7B4},{0x53CE, 0x85A7},{0x53CF, 0x85A8},{0x53D0, 0x85A9},{0x53D1, 0xB7A2},{0x53D2, 0x85AA},{0x53D3, 0x85AB},{0x53D4, 0xCAE5},
- {0x53D5, 0x85AC},{0x53D6, 0xC8A1},{0x53D7, 0xCADC},{0x53D8, 0xB1E4},{0x53D9, 0xD0F0},{0x53DA, 0x85AD},{0x53DB, 0xC5D1},{0x53DC, 0x85AE},
- {0x53DD, 0x85AF},{0x53DE, 0x85B0},{0x53DF, 0xDBC5},{0x53E0, 0xB5FE},{0x53E1, 0x85B1},{0x53E2, 0x85B2},{0x53E3, 0xBFDA},{0x53E4, 0xB9C5},
- {0x53E5, 0xBEE4},{0x53E6, 0xC1ED},{0x53E7, 0x85B3},{0x53E8, 0xDFB6},{0x53E9, 0xDFB5},{0x53EA, 0xD6BB},{0x53EB, 0xBDD0},{0x53EC, 0xD5D9},
- {0x53ED, 0xB0C8},{0x53EE, 0xB6A3},{0x53EF, 0xBFC9},{0x53F0, 0xCCA8},{0x53F1, 0xDFB3},{0x53F2, 0xCAB7},{0x53F3, 0xD3D2},{0x53F4, 0x85B4},
- {0x53F5, 0xD8CF},{0x53F6, 0xD2B6},{0x53F7, 0xBAC5},{0x53F8, 0xCBBE},{0x53F9, 0xCCBE},{0x53FA, 0x85B5},{0x53FB, 0xDFB7},{0x53FC, 0xB5F0},
- {0x53FD, 0xDFB4},{0x53FE, 0x85B6},{0x53FF, 0x85B7},{0x5400, 0x85B8},{0x5401, 0xD3F5},{0x5402, 0x85B9},{0x5403, 0xB3D4},{0x5404, 0xB8F7},
- {0x5405, 0x85BA},{0x5406, 0xDFBA},{0x5407, 0x85BB},{0x5408, 0xBACF},{0x5409, 0xBCAA},{0x540A, 0xB5F5},{0x540B, 0x85BC},{0x540C, 0xCDAC},
- {0x540D, 0xC3FB},{0x540E, 0xBAF3},{0x540F, 0xC0F4},{0x5410, 0xCDC2},{0x5411, 0xCFF2},{0x5412, 0xDFB8},{0x5413, 0xCFC5},{0x5414, 0x85BD},
- {0x5415, 0xC2C0},{0x5416, 0xDFB9},{0x5417, 0xC2F0},{0x5418, 0x85BE},{0x5419, 0x85BF},{0x541A, 0x85C0},{0x541B, 0xBEFD},{0x541C, 0x85C1},
- {0x541D, 0xC1DF},{0x541E, 0xCDCC},{0x541F, 0xD2F7},{0x5420, 0xB7CD},{0x5421, 0xDFC1},{0x5422, 0x85C2},{0x5423, 0xDFC4},{0x5424, 0x85C3},
- {0x5425, 0x85C4},{0x5426, 0xB7F1},{0x5427, 0xB0C9},{0x5428, 0xB6D6},{0x5429, 0xB7D4},{0x542A, 0x85C5},{0x542B, 0xBAAC},{0x542C, 0xCCFD},
- {0x542D, 0xBFD4},{0x542E, 0xCBB1},{0x542F, 0xC6F4},{0x5430, 0x85C6},{0x5431, 0xD6A8},{0x5432, 0xDFC5},{0x5433, 0x85C7},{0x5434, 0xCEE2},
- {0x5435, 0xB3B3},{0x5436, 0x85C8},{0x5437, 0x85C9},{0x5438, 0xCEFC},{0x5439, 0xB4B5},{0x543A, 0x85CA},{0x543B, 0xCEC7},{0x543C, 0xBAF0},
- {0x543D, 0x85CB},{0x543E, 0xCEE1},{0x543F, 0x85CC},{0x5440, 0xD1BD},{0x5441, 0x85CD},{0x5442, 0x85CE},{0x5443, 0xDFC0},{0x5444, 0x85CF},
- {0x5445, 0x85D0},{0x5446, 0xB4F4},{0x5447, 0x85D1},{0x5448, 0xB3CA},{0x5449, 0x85D2},{0x544A, 0xB8E6},{0x544B, 0xDFBB},{0x544C, 0x85D3},
- {0x544D, 0x85D4},{0x544E, 0x85D5},{0x544F, 0x85D6},{0x5450, 0xC4C5},{0x5451, 0x85D7},{0x5452, 0xDFBC},{0x5453, 0xDFBD},{0x5454, 0xDFBE},
- {0x5455, 0xC5BB},{0x5456, 0xDFBF},{0x5457, 0xDFC2},{0x5458, 0xD4B1},{0x5459, 0xDFC3},{0x545A, 0x85D8},{0x545B, 0xC7BA},{0x545C, 0xCED8},
- {0x545D, 0x85D9},{0x545E, 0x85DA},{0x545F, 0x85DB},{0x5460, 0x85DC},{0x5461, 0x85DD},{0x5462, 0xC4D8},{0x5463, 0x85DE},{0x5464, 0xDFCA},
- {0x5465, 0x85DF},{0x5466, 0xDFCF},{0x5467, 0x85E0},{0x5468, 0xD6DC},{0x5469, 0x85E1},{0x546A, 0x85E2},{0x546B, 0x85E3},{0x546C, 0x85E4},
- {0x546D, 0x85E5},{0x546E, 0x85E6},{0x546F, 0x85E7},{0x5470, 0x85E8},{0x5471, 0xDFC9},{0x5472, 0xDFDA},{0x5473, 0xCEB6},{0x5474, 0x85E9},
- {0x5475, 0xBAC7},{0x5476, 0xDFCE},{0x5477, 0xDFC8},{0x5478, 0xC5DE},{0x5479, 0x85EA},{0x547A, 0x85EB},{0x547B, 0xC9EB},{0x547C, 0xBAF4},
- {0x547D, 0xC3FC},{0x547E, 0x85EC},{0x547F, 0x85ED},{0x5480, 0xBED7},{0x5481, 0x85EE},{0x5482, 0xDFC6},{0x5483, 0x85EF},{0x5484, 0xDFCD},
- {0x5485, 0x85F0},{0x5486, 0xC5D8},{0x5487, 0x85F1},{0x5488, 0x85F2},{0x5489, 0x85F3},{0x548A, 0x85F4},{0x548B, 0xD5A6},{0x548C, 0xBACD},
- {0x548D, 0x85F5},{0x548E, 0xBECC},{0x548F, 0xD3BD},{0x5490, 0xB8C0},{0x5491, 0x85F6},{0x5492, 0xD6E4},{0x5493, 0x85F7},{0x5494, 0xDFC7},
- {0x5495, 0xB9BE},{0x5496, 0xBFA7},{0x5497, 0x85F8},{0x5498, 0x85F9},{0x5499, 0xC1FC},{0x549A, 0xDFCB},{0x549B, 0xDFCC},{0x549C, 0x85FA},
- {0x549D, 0xDFD0},{0x549E, 0x85FB},{0x549F, 0x85FC},{0x54A0, 0x85FD},{0x54A1, 0x85FE},{0x54A2, 0x8640},{0x54A3, 0xDFDB},{0x54A4, 0xDFE5},
- {0x54A5, 0x8641},{0x54A6, 0xDFD7},{0x54A7, 0xDFD6},{0x54A8, 0xD7C9},{0x54A9, 0xDFE3},{0x54AA, 0xDFE4},{0x54AB, 0xE5EB},{0x54AC, 0xD2A7},
- {0x54AD, 0xDFD2},{0x54AE, 0x8642},{0x54AF, 0xBFA9},{0x54B0, 0x8643},{0x54B1, 0xD4DB},{0x54B2, 0x8644},{0x54B3, 0xBFC8},{0x54B4, 0xDFD4},
- {0x54B5, 0x8645},{0x54B6, 0x8646},{0x54B7, 0x8647},{0x54B8, 0xCFCC},{0x54B9, 0x8648},{0x54BA, 0x8649},{0x54BB, 0xDFDD},{0x54BC, 0x864A},
- {0x54BD, 0xD1CA},{0x54BE, 0x864B},{0x54BF, 0xDFDE},{0x54C0, 0xB0A7},{0x54C1, 0xC6B7},{0x54C2, 0xDFD3},{0x54C3, 0x864C},{0x54C4, 0xBAE5},
- {0x54C5, 0x864D},{0x54C6, 0xB6DF},{0x54C7, 0xCDDB},{0x54C8, 0xB9FE},{0x54C9, 0xD4D5},{0x54CA, 0x864E},{0x54CB, 0x864F},{0x54CC, 0xDFDF},
- {0x54CD, 0xCFEC},{0x54CE, 0xB0A5},{0x54CF, 0xDFE7},{0x54D0, 0xDFD1},{0x54D1, 0xD1C6},{0x54D2, 0xDFD5},{0x54D3, 0xDFD8},{0x54D4, 0xDFD9},
- {0x54D5, 0xDFDC},{0x54D6, 0x8650},{0x54D7, 0xBBA9},{0x54D8, 0x8651},{0x54D9, 0xDFE0},{0x54DA, 0xDFE1},{0x54DB, 0x8652},{0x54DC, 0xDFE2},
- {0x54DD, 0xDFE6},{0x54DE, 0xDFE8},{0x54DF, 0xD3B4},{0x54E0, 0x8653},{0x54E1, 0x8654},{0x54E2, 0x8655},{0x54E3, 0x8656},{0x54E4, 0x8657},
- {0x54E5, 0xB8E7},{0x54E6, 0xC5B6},{0x54E7, 0xDFEA},{0x54E8, 0xC9DA},{0x54E9, 0xC1A8},{0x54EA, 0xC4C4},{0x54EB, 0x8658},{0x54EC, 0x8659},
- {0x54ED, 0xBFDE},{0x54EE, 0xCFF8},{0x54EF, 0x865A},{0x54F0, 0x865B},{0x54F1, 0x865C},{0x54F2, 0xD5DC},{0x54F3, 0xDFEE},{0x54F4, 0x865D},
- {0x54F5, 0x865E},{0x54F6, 0x865F},{0x54F7, 0x8660},{0x54F8, 0x8661},{0x54F9, 0x8662},{0x54FA, 0xB2B8},{0x54FB, 0x8663},{0x54FC, 0xBADF},
- {0x54FD, 0xDFEC},{0x54FE, 0x8664},{0x54FF, 0xDBC1},{0x5500, 0x8665},{0x5501, 0xD1E4},{0x5502, 0x8666},{0x5503, 0x8667},{0x5504, 0x8668},
- {0x5505, 0x8669},{0x5506, 0xCBF4},{0x5507, 0xB4BD},{0x5508, 0x866A},{0x5509, 0xB0A6},{0x550A, 0x866B},{0x550B, 0x866C},{0x550C, 0x866D},
- {0x550D, 0x866E},{0x550E, 0x866F},{0x550F, 0xDFF1},{0x5510, 0xCCC6},{0x5511, 0xDFF2},{0x5512, 0x8670},{0x5513, 0x8671},{0x5514, 0xDFED},
- {0x5515, 0x8672},{0x5516, 0x8673},{0x5517, 0x8674},{0x5518, 0x8675},{0x5519, 0x8676},{0x551A, 0x8677},{0x551B, 0xDFE9},{0x551C, 0x8678},
- {0x551D, 0x8679},{0x551E, 0x867A},{0x551F, 0x867B},{0x5520, 0xDFEB},{0x5521, 0x867C},{0x5522, 0xDFEF},{0x5523, 0xDFF0},{0x5524, 0xBBBD},
- {0x5525, 0x867D},{0x5526, 0x867E},{0x5527, 0xDFF3},{0x5528, 0x8680},{0x5529, 0x8681},{0x552A, 0xDFF4},{0x552B, 0x8682},{0x552C, 0xBBA3},
- {0x552D, 0x8683},{0x552E, 0xCADB},{0x552F, 0xCEA8},{0x5530, 0xE0A7},{0x5531, 0xB3AA},{0x5532, 0x8684},{0x5533, 0xE0A6},{0x5534, 0x8685},
- {0x5535, 0x8686},{0x5536, 0x8687},{0x5537, 0xE0A1},{0x5538, 0x8688},{0x5539, 0x8689},{0x553A, 0x868A},{0x553B, 0x868B},{0x553C, 0xDFFE},
- {0x553D, 0x868C},{0x553E, 0xCDD9},{0x553F, 0xDFFC},{0x5540, 0x868D},{0x5541, 0xDFFA},{0x5542, 0x868E},{0x5543, 0xBFD0},{0x5544, 0xD7C4},
- {0x5545, 0x868F},{0x5546, 0xC9CC},{0x5547, 0x8690},{0x5548, 0x8691},{0x5549, 0xDFF8},{0x554A, 0xB0A1},{0x554B, 0x8692},{0x554C, 0x8693},
- {0x554D, 0x8694},{0x554E, 0x8695},{0x554F, 0x8696},{0x5550, 0xDFFD},{0x5551, 0x8697},{0x5552, 0x8698},{0x5553, 0x8699},{0x5554, 0x869A},
- {0x5555, 0xDFFB},{0x5556, 0xE0A2},{0x5557, 0x869B},{0x5558, 0x869C},{0x5559, 0x869D},{0x555A, 0x869E},{0x555B, 0x869F},{0x555C, 0xE0A8},
- {0x555D, 0x86A0},{0x555E, 0x86A1},{0x555F, 0x86A2},{0x5560, 0x86A3},{0x5561, 0xB7C8},{0x5562, 0x86A4},{0x5563, 0x86A5},{0x5564, 0xC6A1},
- {0x5565, 0xC9B6},{0x5566, 0xC0B2},{0x5567, 0xDFF5},{0x5568, 0x86A6},{0x5569, 0x86A7},{0x556A, 0xC5BE},{0x556B, 0x86A8},{0x556C, 0xD8C4},
- {0x556D, 0xDFF9},{0x556E, 0xC4F6},{0x556F, 0x86A9},{0x5570, 0x86AA},{0x5571, 0x86AB},{0x5572, 0x86AC},{0x5573, 0x86AD},{0x5574, 0x86AE},
- {0x5575, 0xE0A3},{0x5576, 0xE0A4},{0x5577, 0xE0A5},{0x5578, 0xD0A5},{0x5579, 0x86AF},{0x557A, 0x86B0},{0x557B, 0xE0B4},{0x557C, 0xCCE4},
- {0x557D, 0x86B1},{0x557E, 0xE0B1},{0x557F, 0x86B2},{0x5580, 0xBFA6},{0x5581, 0xE0AF},{0x5582, 0xCEB9},{0x5583, 0xE0AB},{0x5584, 0xC9C6},
- {0x5585, 0x86B3},{0x5586, 0x86B4},{0x5587, 0xC0AE},{0x5588, 0xE0AE},{0x5589, 0xBAED},{0x558A, 0xBAB0},{0x558B, 0xE0A9},{0x558C, 0x86B5},
- {0x558D, 0x86B6},{0x558E, 0x86B7},{0x558F, 0xDFF6},{0x5590, 0x86B8},{0x5591, 0xE0B3},{0x5592, 0x86B9},{0x5593, 0x86BA},{0x5594, 0xE0B8},
- {0x5595, 0x86BB},{0x5596, 0x86BC},{0x5597, 0x86BD},{0x5598, 0xB4AD},{0x5599, 0xE0B9},{0x559A, 0x86BE},{0x559B, 0x86BF},{0x559C, 0xCFB2},
- {0x559D, 0xBAC8},{0x559E, 0x86C0},{0x559F, 0xE0B0},{0x55A0, 0x86C1},{0x55A1, 0x86C2},{0x55A2, 0x86C3},{0x55A3, 0x86C4},{0x55A4, 0x86C5},
- {0x55A5, 0x86C6},{0x55A6, 0x86C7},{0x55A7, 0xD0FA},{0x55A8, 0x86C8},{0x55A9, 0x86C9},{0x55AA, 0x86CA},{0x55AB, 0x86CB},{0x55AC, 0x86CC},
- {0x55AD, 0x86CD},{0x55AE, 0x86CE},{0x55AF, 0x86CF},{0x55B0, 0x86D0},{0x55B1, 0xE0AC},{0x55B2, 0x86D1},{0x55B3, 0xD4FB},{0x55B4, 0x86D2},
- {0x55B5, 0xDFF7},{0x55B6, 0x86D3},{0x55B7, 0xC5E7},{0x55B8, 0x86D4},{0x55B9, 0xE0AD},{0x55BA, 0x86D5},{0x55BB, 0xD3F7},{0x55BC, 0x86D6},
- {0x55BD, 0xE0B6},{0x55BE, 0xE0B7},{0x55BF, 0x86D7},{0x55C0, 0x86D8},{0x55C1, 0x86D9},{0x55C2, 0x86DA},{0x55C3, 0x86DB},{0x55C4, 0xE0C4},
- {0x55C5, 0xD0E1},{0x55C6, 0x86DC},{0x55C7, 0x86DD},{0x55C8, 0x86DE},{0x55C9, 0xE0BC},{0x55CA, 0x86DF},{0x55CB, 0x86E0},{0x55CC, 0xE0C9},
- {0x55CD, 0xE0CA},{0x55CE, 0x86E1},{0x55CF, 0x86E2},{0x55D0, 0x86E3},{0x55D1, 0xE0BE},{0x55D2, 0xE0AA},{0x55D3, 0xC9A4},{0x55D4, 0xE0C1},
- {0x55D5, 0x86E4},{0x55D6, 0xE0B2},{0x55D7, 0x86E5},{0x55D8, 0x86E6},{0x55D9, 0x86E7},{0x55DA, 0x86E8},{0x55DB, 0x86E9},{0x55DC, 0xCAC8},
- {0x55DD, 0xE0C3},{0x55DE, 0x86EA},{0x55DF, 0xE0B5},{0x55E0, 0x86EB},{0x55E1, 0xCECB},{0x55E2, 0x86EC},{0x55E3, 0xCBC3},{0x55E4, 0xE0CD},
- {0x55E5, 0xE0C6},{0x55E6, 0xE0C2},{0x55E7, 0x86ED},{0x55E8, 0xE0CB},{0x55E9, 0x86EE},{0x55EA, 0xE0BA},{0x55EB, 0xE0BF},{0x55EC, 0xE0C0},
- {0x55ED, 0x86EF},{0x55EE, 0x86F0},{0x55EF, 0xE0C5},{0x55F0, 0x86F1},{0x55F1, 0x86F2},{0x55F2, 0xE0C7},{0x55F3, 0xE0C8},{0x55F4, 0x86F3},
- {0x55F5, 0xE0CC},{0x55F6, 0x86F4},{0x55F7, 0xE0BB},{0x55F8, 0x86F5},{0x55F9, 0x86F6},{0x55FA, 0x86F7},{0x55FB, 0x86F8},{0x55FC, 0x86F9},
- {0x55FD, 0xCBD4},{0x55FE, 0xE0D5},{0x55FF, 0x86FA},{0x5600, 0xE0D6},{0x5601, 0xE0D2},{0x5602, 0x86FB},{0x5603, 0x86FC},{0x5604, 0x86FD},
- {0x5605, 0x86FE},{0x5606, 0x8740},{0x5607, 0x8741},{0x5608, 0xE0D0},{0x5609, 0xBCCE},{0x560A, 0x8742},{0x560B, 0x8743},{0x560C, 0xE0D1},
- {0x560D, 0x8744},{0x560E, 0xB8C2},{0x560F, 0xD8C5},{0x5610, 0x8745},{0x5611, 0x8746},{0x5612, 0x8747},{0x5613, 0x8748},{0x5614, 0x8749},
- {0x5615, 0x874A},{0x5616, 0x874B},{0x5617, 0x874C},{0x5618, 0xD0EA},{0x5619, 0x874D},{0x561A, 0x874E},{0x561B, 0xC2EF},{0x561C, 0x874F},
- {0x561D, 0x8750},{0x561E, 0xE0CF},{0x561F, 0xE0BD},{0x5620, 0x8751},{0x5621, 0x8752},{0x5622, 0x8753},{0x5623, 0xE0D4},{0x5624, 0xE0D3},
- {0x5625, 0x8754},{0x5626, 0x8755},{0x5627, 0xE0D7},{0x5628, 0x8756},{0x5629, 0x8757},{0x562A, 0x8758},{0x562B, 0x8759},{0x562C, 0xE0DC},
- {0x562D, 0xE0D8},{0x562E, 0x875A},{0x562F, 0x875B},{0x5630, 0x875C},{0x5631, 0xD6F6},{0x5632, 0xB3B0},{0x5633, 0x875D},{0x5634, 0xD7EC},
- {0x5635, 0x875E},{0x5636, 0xCBBB},{0x5637, 0x875F},{0x5638, 0x8760},{0x5639, 0xE0DA},{0x563A, 0x8761},{0x563B, 0xCEFB},{0x563C, 0x8762},
- {0x563D, 0x8763},{0x563E, 0x8764},{0x563F, 0xBAD9},{0x5640, 0x8765},{0x5641, 0x8766},{0x5642, 0x8767},{0x5643, 0x8768},{0x5644, 0x8769},
- {0x5645, 0x876A},{0x5646, 0x876B},{0x5647, 0x876C},{0x5648, 0x876D},{0x5649, 0x876E},{0x564A, 0x876F},{0x564B, 0x8770},{0x564C, 0xE0E1},
- {0x564D, 0xE0DD},{0x564E, 0xD2AD},{0x564F, 0x8771},{0x5650, 0x8772},{0x5651, 0x8773},{0x5652, 0x8774},{0x5653, 0x8775},{0x5654, 0xE0E2},
- {0x5655, 0x8776},{0x5656, 0x8777},{0x5657, 0xE0DB},{0x5658, 0xE0D9},{0x5659, 0xE0DF},{0x565A, 0x8778},{0x565B, 0x8779},{0x565C, 0xE0E0},
- {0x565D, 0x877A},{0x565E, 0x877B},{0x565F, 0x877C},{0x5660, 0x877D},{0x5661, 0x877E},{0x5662, 0xE0DE},{0x5663, 0x8780},{0x5664, 0xE0E4},
- {0x5665, 0x8781},{0x5666, 0x8782},{0x5667, 0x8783},{0x5668, 0xC6F7},{0x5669, 0xD8AC},{0x566A, 0xD4EB},{0x566B, 0xE0E6},{0x566C, 0xCAC9},
- {0x566D, 0x8784},{0x566E, 0x8785},{0x566F, 0x8786},{0x5670, 0x8787},{0x5671, 0xE0E5},{0x5672, 0x8788},{0x5673, 0x8789},{0x5674, 0x878A},
- {0x5675, 0x878B},{0x5676, 0xB8C1},{0x5677, 0x878C},{0x5678, 0x878D},{0x5679, 0x878E},{0x567A, 0x878F},{0x567B, 0xE0E7},{0x567C, 0xE0E8},
- {0x567D, 0x8790},{0x567E, 0x8791},{0x567F, 0x8792},{0x5680, 0x8793},{0x5681, 0x8794},{0x5682, 0x8795},{0x5683, 0x8796},{0x5684, 0x8797},
- {0x5685, 0xE0E9},{0x5686, 0xE0E3},{0x5687, 0x8798},{0x5688, 0x8799},{0x5689, 0x879A},{0x568A, 0x879B},{0x568B, 0x879C},{0x568C, 0x879D},
- {0x568D, 0x879E},{0x568E, 0xBABF},{0x568F, 0xCCE7},{0x5690, 0x879F},{0x5691, 0x87A0},{0x5692, 0x87A1},{0x5693, 0xE0EA},{0x5694, 0x87A2},
- {0x5695, 0x87A3},{0x5696, 0x87A4},{0x5697, 0x87A5},{0x5698, 0x87A6},{0x5699, 0x87A7},{0x569A, 0x87A8},{0x569B, 0x87A9},{0x569C, 0x87AA},
- {0x569D, 0x87AB},{0x569E, 0x87AC},{0x569F, 0x87AD},{0x56A0, 0x87AE},{0x56A1, 0x87AF},{0x56A2, 0x87B0},{0x56A3, 0xCFF9},{0x56A4, 0x87B1},
- {0x56A5, 0x87B2},{0x56A6, 0x87B3},{0x56A7, 0x87B4},{0x56A8, 0x87B5},{0x56A9, 0x87B6},{0x56AA, 0x87B7},{0x56AB, 0x87B8},{0x56AC, 0x87B9},
- {0x56AD, 0x87BA},{0x56AE, 0x87BB},{0x56AF, 0xE0EB},{0x56B0, 0x87BC},{0x56B1, 0x87BD},{0x56B2, 0x87BE},{0x56B3, 0x87BF},{0x56B4, 0x87C0},
- {0x56B5, 0x87C1},{0x56B6, 0x87C2},{0x56B7, 0xC8C2},{0x56B8, 0x87C3},{0x56B9, 0x87C4},{0x56BA, 0x87C5},{0x56BB, 0x87C6},{0x56BC, 0xBDC0},
- {0x56BD, 0x87C7},{0x56BE, 0x87C8},{0x56BF, 0x87C9},{0x56C0, 0x87CA},{0x56C1, 0x87CB},{0x56C2, 0x87CC},{0x56C3, 0x87CD},{0x56C4, 0x87CE},
- {0x56C5, 0x87CF},{0x56C6, 0x87D0},{0x56C7, 0x87D1},{0x56C8, 0x87D2},{0x56C9, 0x87D3},{0x56CA, 0xC4D2},{0x56CB, 0x87D4},{0x56CC, 0x87D5},
- {0x56CD, 0x87D6},{0x56CE, 0x87D7},{0x56CF, 0x87D8},{0x56D0, 0x87D9},{0x56D1, 0x87DA},{0x56D2, 0x87DB},{0x56D3, 0x87DC},{0x56D4, 0xE0EC},
- {0x56D5, 0x87DD},{0x56D6, 0x87DE},{0x56D7, 0xE0ED},{0x56D8, 0x87DF},{0x56D9, 0x87E0},{0x56DA, 0xC7F4},{0x56DB, 0xCBC4},{0x56DC, 0x87E1},
- {0x56DD, 0xE0EE},{0x56DE, 0xBBD8},{0x56DF, 0xD8B6},{0x56E0, 0xD2F2},{0x56E1, 0xE0EF},{0x56E2, 0xCDC5},{0x56E3, 0x87E2},{0x56E4, 0xB6DA},
- {0x56E5, 0x87E3},{0x56E6, 0x87E4},{0x56E7, 0x87E5},{0x56E8, 0x87E6},{0x56E9, 0x87E7},{0x56EA, 0x87E8},{0x56EB, 0xE0F1},{0x56EC, 0x87E9},
- {0x56ED, 0xD4B0},{0x56EE, 0x87EA},{0x56EF, 0x87EB},{0x56F0, 0xC0A7},{0x56F1, 0xB4D1},{0x56F2, 0x87EC},{0x56F3, 0x87ED},{0x56F4, 0xCEA7},
- {0x56F5, 0xE0F0},{0x56F6, 0x87EE},{0x56F7, 0x87EF},{0x56F8, 0x87F0},{0x56F9, 0xE0F2},{0x56FA, 0xB9CC},{0x56FB, 0x87F1},{0x56FC, 0x87F2},
- {0x56FD, 0xB9FA},{0x56FE, 0xCDBC},{0x56FF, 0xE0F3},{0x5700, 0x87F3},{0x5701, 0x87F4},{0x5702, 0x87F5},{0x5703, 0xC6D4},{0x5704, 0xE0F4},
- {0x5705, 0x87F6},{0x5706, 0xD4B2},{0x5707, 0x87F7},{0x5708, 0xC8A6},{0x5709, 0xE0F6},{0x570A, 0xE0F5},{0x570B, 0x87F8},{0x570C, 0x87F9},
- {0x570D, 0x87FA},{0x570E, 0x87FB},{0x570F, 0x87FC},{0x5710, 0x87FD},{0x5711, 0x87FE},{0x5712, 0x8840},{0x5713, 0x8841},{0x5714, 0x8842},
- {0x5715, 0x8843},{0x5716, 0x8844},{0x5717, 0x8845},{0x5718, 0x8846},{0x5719, 0x8847},{0x571A, 0x8848},{0x571B, 0x8849},{0x571C, 0xE0F7},
- {0x571D, 0x884A},{0x571E, 0x884B},{0x571F, 0xCDC1},{0x5720, 0x884C},{0x5721, 0x884D},{0x5722, 0x884E},{0x5723, 0xCAA5},{0x5724, 0x884F},
- {0x5725, 0x8850},{0x5726, 0x8851},{0x5727, 0x8852},{0x5728, 0xD4DA},{0x5729, 0xDBD7},{0x572A, 0xDBD9},{0x572B, 0x8853},{0x572C, 0xDBD8},
- {0x572D, 0xB9E7},{0x572E, 0xDBDC},{0x572F, 0xDBDD},{0x5730, 0xB5D8},{0x5731, 0x8854},{0x5732, 0x8855},{0x5733, 0xDBDA},{0x5734, 0x8856},
- {0x5735, 0x8857},{0x5736, 0x8858},{0x5737, 0x8859},{0x5738, 0x885A},{0x5739, 0xDBDB},{0x573A, 0xB3A1},{0x573B, 0xDBDF},{0x573C, 0x885B},
- {0x573D, 0x885C},{0x573E, 0xBBF8},{0x573F, 0x885D},{0x5740, 0xD6B7},{0x5741, 0x885E},{0x5742, 0xDBE0},{0x5743, 0x885F},{0x5744, 0x8860},
- {0x5745, 0x8861},{0x5746, 0x8862},{0x5747, 0xBEF9},{0x5748, 0x8863},{0x5749, 0x8864},{0x574A, 0xB7BB},{0x574B, 0x8865},{0x574C, 0xDBD0},
- {0x574D, 0xCCAE},{0x574E, 0xBFB2},{0x574F, 0xBBB5},{0x5750, 0xD7F8},{0x5751, 0xBFD3},{0x5752, 0x8866},{0x5753, 0x8867},{0x5754, 0x8868},
- {0x5755, 0x8869},{0x5756, 0x886A},{0x5757, 0xBFE9},{0x5758, 0x886B},{0x5759, 0x886C},{0x575A, 0xBCE1},{0x575B, 0xCCB3},{0x575C, 0xDBDE},
- {0x575D, 0xB0D3},{0x575E, 0xCEEB},{0x575F, 0xB7D8},{0x5760, 0xD7B9},{0x5761, 0xC6C2},{0x5762, 0x886D},{0x5763, 0x886E},{0x5764, 0xC0A4},
- {0x5765, 0x886F},{0x5766, 0xCCB9},{0x5767, 0x8870},{0x5768, 0xDBE7},{0x5769, 0xDBE1},{0x576A, 0xC6BA},{0x576B, 0xDBE3},{0x576C, 0x8871},
- {0x576D, 0xDBE8},{0x576E, 0x8872},{0x576F, 0xC5F7},{0x5770, 0x8873},{0x5771, 0x8874},{0x5772, 0x8875},{0x5773, 0xDBEA},{0x5774, 0x8876},
- {0x5775, 0x8877},{0x5776, 0xDBE9},{0x5777, 0xBFC0},{0x5778, 0x8878},{0x5779, 0x8879},{0x577A, 0x887A},{0x577B, 0xDBE6},{0x577C, 0xDBE5},
- {0x577D, 0x887B},{0x577E, 0x887C},{0x577F, 0x887D},{0x5780, 0x887E},{0x5781, 0x8880},{0x5782, 0xB4B9},{0x5783, 0xC0AC},{0x5784, 0xC2A2},
- {0x5785, 0xDBE2},{0x5786, 0xDBE4},{0x5787, 0x8881},{0x5788, 0x8882},{0x5789, 0x8883},{0x578A, 0x8884},{0x578B, 0xD0CD},{0x578C, 0xDBED},
- {0x578D, 0x8885},{0x578E, 0x8886},{0x578F, 0x8887},{0x5790, 0x8888},{0x5791, 0x8889},{0x5792, 0xC0DD},{0x5793, 0xDBF2},{0x5794, 0x888A},
- {0x5795, 0x888B},{0x5796, 0x888C},{0x5797, 0x888D},{0x5798, 0x888E},{0x5799, 0x888F},{0x579A, 0x8890},{0x579B, 0xB6E2},{0x579C, 0x8891},
- {0x579D, 0x8892},{0x579E, 0x8893},{0x579F, 0x8894},{0x57A0, 0xDBF3},{0x57A1, 0xDBD2},{0x57A2, 0xB9B8},{0x57A3, 0xD4AB},{0x57A4, 0xDBEC},
- {0x57A5, 0x8895},{0x57A6, 0xBFD1},{0x57A7, 0xDBF0},{0x57A8, 0x8896},{0x57A9, 0xDBD1},{0x57AA, 0x8897},{0x57AB, 0xB5E6},{0x57AC, 0x8898},
- {0x57AD, 0xDBEB},{0x57AE, 0xBFE5},{0x57AF, 0x8899},{0x57B0, 0x889A},{0x57B1, 0x889B},{0x57B2, 0xDBEE},{0x57B3, 0x889C},{0x57B4, 0xDBF1},
- {0x57B5, 0x889D},{0x57B6, 0x889E},{0x57B7, 0x889F},{0x57B8, 0xDBF9},{0x57B9, 0x88A0},{0x57BA, 0x88A1},{0x57BB, 0x88A2},{0x57BC, 0x88A3},
- {0x57BD, 0x88A4},{0x57BE, 0x88A5},{0x57BF, 0x88A6},{0x57C0, 0x88A7},{0x57C1, 0x88A8},{0x57C2, 0xB9A1},{0x57C3, 0xB0A3},{0x57C4, 0x88A9},
- {0x57C5, 0x88AA},{0x57C6, 0x88AB},{0x57C7, 0x88AC},{0x57C8, 0x88AD},{0x57C9, 0x88AE},{0x57CA, 0x88AF},{0x57CB, 0xC2F1},{0x57CC, 0x88B0},
- {0x57CD, 0x88B1},{0x57CE, 0xB3C7},{0x57CF, 0xDBEF},{0x57D0, 0x88B2},{0x57D1, 0x88B3},{0x57D2, 0xDBF8},{0x57D3, 0x88B4},{0x57D4, 0xC6D2},
- {0x57D5, 0xDBF4},{0x57D6, 0x88B5},{0x57D7, 0x88B6},{0x57D8, 0xDBF5},{0x57D9, 0xDBF7},{0x57DA, 0xDBF6},{0x57DB, 0x88B7},{0x57DC, 0x88B8},
- {0x57DD, 0xDBFE},{0x57DE, 0x88B9},{0x57DF, 0xD3F2},{0x57E0, 0xB2BA},{0x57E1, 0x88BA},{0x57E2, 0x88BB},{0x57E3, 0x88BC},{0x57E4, 0xDBFD},
- {0x57E5, 0x88BD},{0x57E6, 0x88BE},{0x57E7, 0x88BF},{0x57E8, 0x88C0},{0x57E9, 0x88C1},{0x57EA, 0x88C2},{0x57EB, 0x88C3},{0x57EC, 0x88C4},
- {0x57ED, 0xDCA4},{0x57EE, 0x88C5},{0x57EF, 0xDBFB},{0x57F0, 0x88C6},{0x57F1, 0x88C7},{0x57F2, 0x88C8},{0x57F3, 0x88C9},{0x57F4, 0xDBFA},
- {0x57F5, 0x88CA},{0x57F6, 0x88CB},{0x57F7, 0x88CC},{0x57F8, 0xDBFC},{0x57F9, 0xC5E0},{0x57FA, 0xBBF9},{0x57FB, 0x88CD},{0x57FC, 0x88CE},
- {0x57FD, 0xDCA3},{0x57FE, 0x88CF},{0x57FF, 0x88D0},{0x5800, 0xDCA5},{0x5801, 0x88D1},{0x5802, 0xCCC3},{0x5803, 0x88D2},{0x5804, 0x88D3},
- {0x5805, 0x88D4},{0x5806, 0xB6D1},{0x5807, 0xDDC0},{0x5808, 0x88D5},{0x5809, 0x88D6},{0x580A, 0x88D7},{0x580B, 0xDCA1},{0x580C, 0x88D8},
- {0x580D, 0xDCA2},{0x580E, 0x88D9},{0x580F, 0x88DA},{0x5810, 0x88DB},{0x5811, 0xC7B5},{0x5812, 0x88DC},{0x5813, 0x88DD},{0x5814, 0x88DE},
- {0x5815, 0xB6E9},{0x5816, 0x88DF},{0x5817, 0x88E0},{0x5818, 0x88E1},{0x5819, 0xDCA7},{0x581A, 0x88E2},{0x581B, 0x88E3},{0x581C, 0x88E4},
- {0x581D, 0x88E5},{0x581E, 0xDCA6},{0x581F, 0x88E6},{0x5820, 0xDCA9},{0x5821, 0xB1A4},{0x5822, 0x88E7},{0x5823, 0x88E8},{0x5824, 0xB5CC},
- {0x5825, 0x88E9},{0x5826, 0x88EA},{0x5827, 0x88EB},{0x5828, 0x88EC},{0x5829, 0x88ED},{0x582A, 0xBFB0},{0x582B, 0x88EE},{0x582C, 0x88EF},
- {0x582D, 0x88F0},{0x582E, 0x88F1},{0x582F, 0x88F2},{0x5830, 0xD1DF},{0x5831, 0x88F3},{0x5832, 0x88F4},{0x5833, 0x88F5},{0x5834, 0x88F6},
- {0x5835, 0xB6C2},{0x5836, 0x88F7},{0x5837, 0x88F8},{0x5838, 0x88F9},{0x5839, 0x88FA},{0x583A, 0x88FB},{0x583B, 0x88FC},{0x583C, 0x88FD},
- {0x583D, 0x88FE},{0x583E, 0x8940},{0x583F, 0x8941},{0x5840, 0x8942},{0x5841, 0x8943},{0x5842, 0x8944},{0x5843, 0x8945},{0x5844, 0xDCA8},
- {0x5845, 0x8946},{0x5846, 0x8947},{0x5847, 0x8948},{0x5848, 0x8949},{0x5849, 0x894A},{0x584A, 0x894B},{0x584B, 0x894C},{0x584C, 0xCBFA},
- {0x584D, 0xEBF3},{0x584E, 0x894D},{0x584F, 0x894E},{0x5850, 0x894F},{0x5851, 0xCBDC},{0x5852, 0x8950},{0x5853, 0x8951},{0x5854, 0xCBFE},
- {0x5855, 0x8952},{0x5856, 0x8953},{0x5857, 0x8954},{0x5858, 0xCCC1},{0x5859, 0x8955},{0x585A, 0x8956},{0x585B, 0x8957},{0x585C, 0x8958},
- {0x585D, 0x8959},{0x585E, 0xC8FB},{0x585F, 0x895A},{0x5860, 0x895B},{0x5861, 0x895C},{0x5862, 0x895D},{0x5863, 0x895E},{0x5864, 0x895F},
- {0x5865, 0xDCAA},{0x5866, 0x8960},{0x5867, 0x8961},{0x5868, 0x8962},{0x5869, 0x8963},{0x586A, 0x8964},{0x586B, 0xCCEE},{0x586C, 0xDCAB},
- {0x586D, 0x8965},{0x586E, 0x8966},{0x586F, 0x8967},{0x5870, 0x8968},{0x5871, 0x8969},{0x5872, 0x896A},{0x5873, 0x896B},{0x5874, 0x896C},
- {0x5875, 0x896D},{0x5876, 0x896E},{0x5877, 0x896F},{0x5878, 0x8970},{0x5879, 0x8971},{0x587A, 0x8972},{0x587B, 0x8973},{0x587C, 0x8974},
- {0x587D, 0x8975},{0x587E, 0xDBD3},{0x587F, 0x8976},{0x5880, 0xDCAF},{0x5881, 0xDCAC},{0x5882, 0x8977},{0x5883, 0xBEB3},{0x5884, 0x8978},
- {0x5885, 0xCAFB},{0x5886, 0x8979},{0x5887, 0x897A},{0x5888, 0x897B},{0x5889, 0xDCAD},{0x588A, 0x897C},{0x588B, 0x897D},{0x588C, 0x897E},
- {0x588D, 0x8980},{0x588E, 0x8981},{0x588F, 0x8982},{0x5890, 0x8983},{0x5891, 0x8984},{0x5892, 0xC9CA},{0x5893, 0xC4B9},{0x5894, 0x8985},
- {0x5895, 0x8986},{0x5896, 0x8987},{0x5897, 0x8988},{0x5898, 0x8989},{0x5899, 0xC7BD},{0x589A, 0xDCAE},{0x589B, 0x898A},{0x589C, 0x898B},
- {0x589D, 0x898C},{0x589E, 0xD4F6},{0x589F, 0xD0E6},{0x58A0, 0x898D},{0x58A1, 0x898E},{0x58A2, 0x898F},{0x58A3, 0x8990},{0x58A4, 0x8991},
- {0x58A5, 0x8992},{0x58A6, 0x8993},{0x58A7, 0x8994},{0x58A8, 0xC4AB},{0x58A9, 0xB6D5},{0x58AA, 0x8995},{0x58AB, 0x8996},{0x58AC, 0x8997},
- {0x58AD, 0x8998},{0x58AE, 0x8999},{0x58AF, 0x899A},{0x58B0, 0x899B},{0x58B1, 0x899C},{0x58B2, 0x899D},{0x58B3, 0x899E},{0x58B4, 0x899F},
- {0x58B5, 0x89A0},{0x58B6, 0x89A1},{0x58B7, 0x89A2},{0x58B8, 0x89A3},{0x58B9, 0x89A4},{0x58BA, 0x89A5},{0x58BB, 0x89A6},{0x58BC, 0xDBD4},
- {0x58BD, 0x89A7},{0x58BE, 0x89A8},{0x58BF, 0x89A9},{0x58C0, 0x89AA},{0x58C1, 0xB1DA},{0x58C2, 0x89AB},{0x58C3, 0x89AC},{0x58C4, 0x89AD},
- {0x58C5, 0xDBD5},{0x58C6, 0x89AE},{0x58C7, 0x89AF},{0x58C8, 0x89B0},{0x58C9, 0x89B1},{0x58CA, 0x89B2},{0x58CB, 0x89B3},{0x58CC, 0x89B4},
- {0x58CD, 0x89B5},{0x58CE, 0x89B6},{0x58CF, 0x89B7},{0x58D0, 0x89B8},{0x58D1, 0xDBD6},{0x58D2, 0x89B9},{0x58D3, 0x89BA},{0x58D4, 0x89BB},
- {0x58D5, 0xBABE},{0x58D6, 0x89BC},{0x58D7, 0x89BD},{0x58D8, 0x89BE},{0x58D9, 0x89BF},{0x58DA, 0x89C0},{0x58DB, 0x89C1},{0x58DC, 0x89C2},
- {0x58DD, 0x89C3},{0x58DE, 0x89C4},{0x58DF, 0x89C5},{0x58E0, 0x89C6},{0x58E1, 0x89C7},{0x58E2, 0x89C8},{0x58E3, 0x89C9},{0x58E4, 0xC8C0},
- {0x58E5, 0x89CA},{0x58E6, 0x89CB},{0x58E7, 0x89CC},{0x58E8, 0x89CD},{0x58E9, 0x89CE},{0x58EA, 0x89CF},{0x58EB, 0xCABF},{0x58EC, 0xC8C9},
- {0x58ED, 0x89D0},{0x58EE, 0xD7B3},{0x58EF, 0x89D1},{0x58F0, 0xC9F9},{0x58F1, 0x89D2},{0x58F2, 0x89D3},{0x58F3, 0xBFC7},{0x58F4, 0x89D4},
- {0x58F5, 0x89D5},{0x58F6, 0xBAF8},{0x58F7, 0x89D6},{0x58F8, 0x89D7},{0x58F9, 0xD2BC},{0x58FA, 0x89D8},{0x58FB, 0x89D9},{0x58FC, 0x89DA},
- {0x58FD, 0x89DB},{0x58FE, 0x89DC},{0x58FF, 0x89DD},{0x5900, 0x89DE},{0x5901, 0x89DF},{0x5902, 0xE2BA},{0x5903, 0x89E0},{0x5904, 0xB4A6},
- {0x5905, 0x89E1},{0x5906, 0x89E2},{0x5907, 0xB1B8},{0x5908, 0x89E3},{0x5909, 0x89E4},{0x590A, 0x89E5},{0x590B, 0x89E6},{0x590C, 0x89E7},
- {0x590D, 0xB8B4},{0x590E, 0x89E8},{0x590F, 0xCFC4},{0x5910, 0x89E9},{0x5911, 0x89EA},{0x5912, 0x89EB},{0x5913, 0x89EC},{0x5914, 0xD9E7},
- {0x5915, 0xCFA6},{0x5916, 0xCDE2},{0x5917, 0x89ED},{0x5918, 0x89EE},{0x5919, 0xD9ED},{0x591A, 0xB6E0},{0x591B, 0x89EF},{0x591C, 0xD2B9},
- {0x591D, 0x89F0},{0x591E, 0x89F1},{0x591F, 0xB9BB},{0x5920, 0x89F2},{0x5921, 0x89F3},{0x5922, 0x89F4},{0x5923, 0x89F5},{0x5924, 0xE2B9},
- {0x5925, 0xE2B7},{0x5926, 0x89F6},{0x5927, 0xB4F3},{0x5928, 0x89F7},{0x5929, 0xCCEC},{0x592A, 0xCCAB},{0x592B, 0xB7F2},{0x592C, 0x89F8},
- {0x592D, 0xD8B2},{0x592E, 0xD1EB},{0x592F, 0xBABB},{0x5930, 0x89F9},{0x5931, 0xCAA7},{0x5932, 0x89FA},{0x5933, 0x89FB},{0x5934, 0xCDB7},
- {0x5935, 0x89FC},{0x5936, 0x89FD},{0x5937, 0xD2C4},{0x5938, 0xBFE4},{0x5939, 0xBCD0},{0x593A, 0xB6E1},{0x593B, 0x89FE},{0x593C, 0xDEC5},
- {0x593D, 0x8A40},{0x593E, 0x8A41},{0x593F, 0x8A42},{0x5940, 0x8A43},{0x5941, 0xDEC6},{0x5942, 0xDBBC},{0x5943, 0x8A44},{0x5944, 0xD1D9},
- {0x5945, 0x8A45},{0x5946, 0x8A46},{0x5947, 0xC6E6},{0x5948, 0xC4CE},{0x5949, 0xB7EE},{0x594A, 0x8A47},{0x594B, 0xB7DC},{0x594C, 0x8A48},
- {0x594D, 0x8A49},{0x594E, 0xBFFC},{0x594F, 0xD7E0},{0x5950, 0x8A4A},{0x5951, 0xC6F5},{0x5952, 0x8A4B},{0x5953, 0x8A4C},{0x5954, 0xB1BC},
- {0x5955, 0xDEC8},{0x5956, 0xBDB1},{0x5957, 0xCCD7},{0x5958, 0xDECA},{0x5959, 0x8A4D},{0x595A, 0xDEC9},{0x595B, 0x8A4E},{0x595C, 0x8A4F},
- {0x595D, 0x8A50},{0x595E, 0x8A51},{0x595F, 0x8A52},{0x5960, 0xB5EC},{0x5961, 0x8A53},{0x5962, 0xC9DD},{0x5963, 0x8A54},{0x5964, 0x8A55},
- {0x5965, 0xB0C2},{0x5966, 0x8A56},{0x5967, 0x8A57},{0x5968, 0x8A58},{0x5969, 0x8A59},{0x596A, 0x8A5A},{0x596B, 0x8A5B},{0x596C, 0x8A5C},
- {0x596D, 0x8A5D},{0x596E, 0x8A5E},{0x596F, 0x8A5F},{0x5970, 0x8A60},{0x5971, 0x8A61},{0x5972, 0x8A62},{0x5973, 0xC5AE},{0x5974, 0xC5AB},
- {0x5975, 0x8A63},{0x5976, 0xC4CC},{0x5977, 0x8A64},{0x5978, 0xBCE9},{0x5979, 0xCBFD},{0x597A, 0x8A65},{0x597B, 0x8A66},{0x597C, 0x8A67},
- {0x597D, 0xBAC3},{0x597E, 0x8A68},{0x597F, 0x8A69},{0x5980, 0x8A6A},{0x5981, 0xE5F9},{0x5982, 0xC8E7},{0x5983, 0xE5FA},{0x5984, 0xCDFD},
- {0x5985, 0x8A6B},{0x5986, 0xD7B1},{0x5987, 0xB8BE},{0x5988, 0xC2E8},{0x5989, 0x8A6C},{0x598A, 0xC8D1},{0x598B, 0x8A6D},{0x598C, 0x8A6E},
- {0x598D, 0xE5FB},{0x598E, 0x8A6F},{0x598F, 0x8A70},{0x5990, 0x8A71},{0x5991, 0x8A72},{0x5992, 0xB6CA},{0x5993, 0xBCCB},{0x5994, 0x8A73},
- {0x5995, 0x8A74},{0x5996, 0xD1FD},{0x5997, 0xE6A1},{0x5998, 0x8A75},{0x5999, 0xC3EE},{0x599A, 0x8A76},{0x599B, 0x8A77},{0x599C, 0x8A78},
- {0x599D, 0x8A79},{0x599E, 0xE6A4},{0x599F, 0x8A7A},{0x59A0, 0x8A7B},{0x59A1, 0x8A7C},{0x59A2, 0x8A7D},{0x59A3, 0xE5FE},{0x59A4, 0xE6A5},
- {0x59A5, 0xCDD7},{0x59A6, 0x8A7E},{0x59A7, 0x8A80},{0x59A8, 0xB7C1},{0x59A9, 0xE5FC},{0x59AA, 0xE5FD},{0x59AB, 0xE6A3},{0x59AC, 0x8A81},
- {0x59AD, 0x8A82},{0x59AE, 0xC4DD},{0x59AF, 0xE6A8},{0x59B0, 0x8A83},{0x59B1, 0x8A84},{0x59B2, 0xE6A7},{0x59B3, 0x8A85},{0x59B4, 0x8A86},
- {0x59B5, 0x8A87},{0x59B6, 0x8A88},{0x59B7, 0x8A89},{0x59B8, 0x8A8A},{0x59B9, 0xC3C3},{0x59BA, 0x8A8B},{0x59BB, 0xC6DE},{0x59BC, 0x8A8C},
- {0x59BD, 0x8A8D},{0x59BE, 0xE6AA},{0x59BF, 0x8A8E},{0x59C0, 0x8A8F},{0x59C1, 0x8A90},{0x59C2, 0x8A91},{0x59C3, 0x8A92},{0x59C4, 0x8A93},
- {0x59C5, 0x8A94},{0x59C6, 0xC4B7},{0x59C7, 0x8A95},{0x59C8, 0x8A96},{0x59C9, 0x8A97},{0x59CA, 0xE6A2},{0x59CB, 0xCABC},{0x59CC, 0x8A98},
- {0x59CD, 0x8A99},{0x59CE, 0x8A9A},{0x59CF, 0x8A9B},{0x59D0, 0xBDE3},{0x59D1, 0xB9C3},{0x59D2, 0xE6A6},{0x59D3, 0xD0D5},{0x59D4, 0xCEAF},
- {0x59D5, 0x8A9C},{0x59D6, 0x8A9D},{0x59D7, 0xE6A9},{0x59D8, 0xE6B0},{0x59D9, 0x8A9E},{0x59DA, 0xD2A6},{0x59DB, 0x8A9F},{0x59DC, 0xBDAA},
- {0x59DD, 0xE6AD},{0x59DE, 0x8AA0},{0x59DF, 0x8AA1},{0x59E0, 0x8AA2},{0x59E1, 0x8AA3},{0x59E2, 0x8AA4},{0x59E3, 0xE6AF},{0x59E4, 0x8AA5},
- {0x59E5, 0xC0D1},{0x59E6, 0x8AA6},{0x59E7, 0x8AA7},{0x59E8, 0xD2CC},{0x59E9, 0x8AA8},{0x59EA, 0x8AA9},{0x59EB, 0x8AAA},{0x59EC, 0xBCA7},
- {0x59ED, 0x8AAB},{0x59EE, 0x8AAC},{0x59EF, 0x8AAD},{0x59F0, 0x8AAE},{0x59F1, 0x8AAF},{0x59F2, 0x8AB0},{0x59F3, 0x8AB1},{0x59F4, 0x8AB2},
- {0x59F5, 0x8AB3},{0x59F6, 0x8AB4},{0x59F7, 0x8AB5},{0x59F8, 0x8AB6},{0x59F9, 0xE6B1},{0x59FA, 0x8AB7},{0x59FB, 0xD2F6},{0x59FC, 0x8AB8},
- {0x59FD, 0x8AB9},{0x59FE, 0x8ABA},{0x59FF, 0xD7CB},{0x5A00, 0x8ABB},{0x5A01, 0xCDFE},{0x5A02, 0x8ABC},{0x5A03, 0xCDDE},{0x5A04, 0xC2A6},
- {0x5A05, 0xE6AB},{0x5A06, 0xE6AC},{0x5A07, 0xBDBF},{0x5A08, 0xE6AE},{0x5A09, 0xE6B3},{0x5A0A, 0x8ABD},{0x5A0B, 0x8ABE},{0x5A0C, 0xE6B2},
- {0x5A0D, 0x8ABF},{0x5A0E, 0x8AC0},{0x5A0F, 0x8AC1},{0x5A10, 0x8AC2},{0x5A11, 0xE6B6},{0x5A12, 0x8AC3},{0x5A13, 0xE6B8},{0x5A14, 0x8AC4},
- {0x5A15, 0x8AC5},{0x5A16, 0x8AC6},{0x5A17, 0x8AC7},{0x5A18, 0xC4EF},{0x5A19, 0x8AC8},{0x5A1A, 0x8AC9},{0x5A1B, 0x8ACA},{0x5A1C, 0xC4C8},
- {0x5A1D, 0x8ACB},{0x5A1E, 0x8ACC},{0x5A1F, 0xBEEA},{0x5A20, 0xC9EF},{0x5A21, 0x8ACD},{0x5A22, 0x8ACE},{0x5A23, 0xE6B7},{0x5A24, 0x8ACF},
- {0x5A25, 0xB6F0},{0x5A26, 0x8AD0},{0x5A27, 0x8AD1},{0x5A28, 0x8AD2},{0x5A29, 0xC3E4},{0x5A2A, 0x8AD3},{0x5A2B, 0x8AD4},{0x5A2C, 0x8AD5},
- {0x5A2D, 0x8AD6},{0x5A2E, 0x8AD7},{0x5A2F, 0x8AD8},{0x5A30, 0x8AD9},{0x5A31, 0xD3E9},{0x5A32, 0xE6B4},{0x5A33, 0x8ADA},{0x5A34, 0xE6B5},
- {0x5A35, 0x8ADB},{0x5A36, 0xC8A2},{0x5A37, 0x8ADC},{0x5A38, 0x8ADD},{0x5A39, 0x8ADE},{0x5A3A, 0x8ADF},{0x5A3B, 0x8AE0},{0x5A3C, 0xE6BD},
- {0x5A3D, 0x8AE1},{0x5A3E, 0x8AE2},{0x5A3F, 0x8AE3},{0x5A40, 0xE6B9},{0x5A41, 0x8AE4},{0x5A42, 0x8AE5},{0x5A43, 0x8AE6},{0x5A44, 0x8AE7},
- {0x5A45, 0x8AE8},{0x5A46, 0xC6C5},{0x5A47, 0x8AE9},{0x5A48, 0x8AEA},{0x5A49, 0xCDF1},{0x5A4A, 0xE6BB},{0x5A4B, 0x8AEB},{0x5A4C, 0x8AEC},
- {0x5A4D, 0x8AED},{0x5A4E, 0x8AEE},{0x5A4F, 0x8AEF},{0x5A50, 0x8AF0},{0x5A51, 0x8AF1},{0x5A52, 0x8AF2},{0x5A53, 0x8AF3},{0x5A54, 0x8AF4},
- {0x5A55, 0xE6BC},{0x5A56, 0x8AF5},{0x5A57, 0x8AF6},{0x5A58, 0x8AF7},{0x5A59, 0x8AF8},{0x5A5A, 0xBBE9},{0x5A5B, 0x8AF9},{0x5A5C, 0x8AFA},
- {0x5A5D, 0x8AFB},{0x5A5E, 0x8AFC},{0x5A5F, 0x8AFD},{0x5A60, 0x8AFE},{0x5A61, 0x8B40},{0x5A62, 0xE6BE},{0x5A63, 0x8B41},{0x5A64, 0x8B42},
- {0x5A65, 0x8B43},{0x5A66, 0x8B44},{0x5A67, 0xE6BA},{0x5A68, 0x8B45},{0x5A69, 0x8B46},{0x5A6A, 0xC0B7},{0x5A6B, 0x8B47},{0x5A6C, 0x8B48},
- {0x5A6D, 0x8B49},{0x5A6E, 0x8B4A},{0x5A6F, 0x8B4B},{0x5A70, 0x8B4C},{0x5A71, 0x8B4D},{0x5A72, 0x8B4E},{0x5A73, 0x8B4F},{0x5A74, 0xD3A4},
- {0x5A75, 0xE6BF},{0x5A76, 0xC9F4},{0x5A77, 0xE6C3},{0x5A78, 0x8B50},{0x5A79, 0x8B51},{0x5A7A, 0xE6C4},{0x5A7B, 0x8B52},{0x5A7C, 0x8B53},
- {0x5A7D, 0x8B54},{0x5A7E, 0x8B55},{0x5A7F, 0xD0F6},{0x5A80, 0x8B56},{0x5A81, 0x8B57},{0x5A82, 0x8B58},{0x5A83, 0x8B59},{0x5A84, 0x8B5A},
- {0x5A85, 0x8B5B},{0x5A86, 0x8B5C},{0x5A87, 0x8B5D},{0x5A88, 0x8B5E},{0x5A89, 0x8B5F},{0x5A8A, 0x8B60},{0x5A8B, 0x8B61},{0x5A8C, 0x8B62},
- {0x5A8D, 0x8B63},{0x5A8E, 0x8B64},{0x5A8F, 0x8B65},{0x5A90, 0x8B66},{0x5A91, 0x8B67},{0x5A92, 0xC3BD},{0x5A93, 0x8B68},{0x5A94, 0x8B69},
- {0x5A95, 0x8B6A},{0x5A96, 0x8B6B},{0x5A97, 0x8B6C},{0x5A98, 0x8B6D},{0x5A99, 0x8B6E},{0x5A9A, 0xC3C4},{0x5A9B, 0xE6C2},{0x5A9C, 0x8B6F},
- {0x5A9D, 0x8B70},{0x5A9E, 0x8B71},{0x5A9F, 0x8B72},{0x5AA0, 0x8B73},{0x5AA1, 0x8B74},{0x5AA2, 0x8B75},{0x5AA3, 0x8B76},{0x5AA4, 0x8B77},
- {0x5AA5, 0x8B78},{0x5AA6, 0x8B79},{0x5AA7, 0x8B7A},{0x5AA8, 0x8B7B},{0x5AA9, 0x8B7C},{0x5AAA, 0xE6C1},{0x5AAB, 0x8B7D},{0x5AAC, 0x8B7E},
- {0x5AAD, 0x8B80},{0x5AAE, 0x8B81},{0x5AAF, 0x8B82},{0x5AB0, 0x8B83},{0x5AB1, 0x8B84},{0x5AB2, 0xE6C7},{0x5AB3, 0xCFB1},{0x5AB4, 0x8B85},
- {0x5AB5, 0xEBF4},{0x5AB6, 0x8B86},{0x5AB7, 0x8B87},{0x5AB8, 0xE6CA},{0x5AB9, 0x8B88},{0x5ABA, 0x8B89},{0x5ABB, 0x8B8A},{0x5ABC, 0x8B8B},
- {0x5ABD, 0x8B8C},{0x5ABE, 0xE6C5},{0x5ABF, 0x8B8D},{0x5AC0, 0x8B8E},{0x5AC1, 0xBCDE},{0x5AC2, 0xC9A9},{0x5AC3, 0x8B8F},{0x5AC4, 0x8B90},
- {0x5AC5, 0x8B91},{0x5AC6, 0x8B92},{0x5AC7, 0x8B93},{0x5AC8, 0x8B94},{0x5AC9, 0xBCB5},{0x5ACA, 0x8B95},{0x5ACB, 0x8B96},{0x5ACC, 0xCFD3},
- {0x5ACD, 0x8B97},{0x5ACE, 0x8B98},{0x5ACF, 0x8B99},{0x5AD0, 0x8B9A},{0x5AD1, 0x8B9B},{0x5AD2, 0xE6C8},{0x5AD3, 0x8B9C},{0x5AD4, 0xE6C9},
- {0x5AD5, 0x8B9D},{0x5AD6, 0xE6CE},{0x5AD7, 0x8B9E},{0x5AD8, 0xE6D0},{0x5AD9, 0x8B9F},{0x5ADA, 0x8BA0},{0x5ADB, 0x8BA1},{0x5ADC, 0xE6D1},
- {0x5ADD, 0x8BA2},{0x5ADE, 0x8BA3},{0x5ADF, 0x8BA4},{0x5AE0, 0xE6CB},{0x5AE1, 0xB5D5},{0x5AE2, 0x8BA5},{0x5AE3, 0xE6CC},{0x5AE4, 0x8BA6},
- {0x5AE5, 0x8BA7},{0x5AE6, 0xE6CF},{0x5AE7, 0x8BA8},{0x5AE8, 0x8BA9},{0x5AE9, 0xC4DB},{0x5AEA, 0x8BAA},{0x5AEB, 0xE6C6},{0x5AEC, 0x8BAB},
- {0x5AED, 0x8BAC},{0x5AEE, 0x8BAD},{0x5AEF, 0x8BAE},{0x5AF0, 0x8BAF},{0x5AF1, 0xE6CD},{0x5AF2, 0x8BB0},{0x5AF3, 0x8BB1},{0x5AF4, 0x8BB2},
- {0x5AF5, 0x8BB3},{0x5AF6, 0x8BB4},{0x5AF7, 0x8BB5},{0x5AF8, 0x8BB6},{0x5AF9, 0x8BB7},{0x5AFA, 0x8BB8},{0x5AFB, 0x8BB9},{0x5AFC, 0x8BBA},
- {0x5AFD, 0x8BBB},{0x5AFE, 0x8BBC},{0x5AFF, 0x8BBD},{0x5B00, 0x8BBE},{0x5B01, 0x8BBF},{0x5B02, 0x8BC0},{0x5B03, 0x8BC1},{0x5B04, 0x8BC2},
- {0x5B05, 0x8BC3},{0x5B06, 0x8BC4},{0x5B07, 0x8BC5},{0x5B08, 0x8BC6},{0x5B09, 0xE6D2},{0x5B0A, 0x8BC7},{0x5B0B, 0x8BC8},{0x5B0C, 0x8BC9},
- {0x5B0D, 0x8BCA},{0x5B0E, 0x8BCB},{0x5B0F, 0x8BCC},{0x5B10, 0x8BCD},{0x5B11, 0x8BCE},{0x5B12, 0x8BCF},{0x5B13, 0x8BD0},{0x5B14, 0x8BD1},
- {0x5B15, 0x8BD2},{0x5B16, 0xE6D4},{0x5B17, 0xE6D3},{0x5B18, 0x8BD3},{0x5B19, 0x8BD4},{0x5B1A, 0x8BD5},{0x5B1B, 0x8BD6},{0x5B1C, 0x8BD7},
- {0x5B1D, 0x8BD8},{0x5B1E, 0x8BD9},{0x5B1F, 0x8BDA},{0x5B20, 0x8BDB},{0x5B21, 0x8BDC},{0x5B22, 0x8BDD},{0x5B23, 0x8BDE},{0x5B24, 0x8BDF},
- {0x5B25, 0x8BE0},{0x5B26, 0x8BE1},{0x5B27, 0x8BE2},{0x5B28, 0x8BE3},{0x5B29, 0x8BE4},{0x5B2A, 0x8BE5},{0x5B2B, 0x8BE6},{0x5B2C, 0x8BE7},
- {0x5B2D, 0x8BE8},{0x5B2E, 0x8BE9},{0x5B2F, 0x8BEA},{0x5B30, 0x8BEB},{0x5B31, 0x8BEC},{0x5B32, 0xE6D5},{0x5B33, 0x8BED},{0x5B34, 0xD9F8},
- {0x5B35, 0x8BEE},{0x5B36, 0x8BEF},{0x5B37, 0xE6D6},{0x5B38, 0x8BF0},{0x5B39, 0x8BF1},{0x5B3A, 0x8BF2},{0x5B3B, 0x8BF3},{0x5B3C, 0x8BF4},
- {0x5B3D, 0x8BF5},{0x5B3E, 0x8BF6},{0x5B3F, 0x8BF7},{0x5B40, 0xE6D7},{0x5B41, 0x8BF8},{0x5B42, 0x8BF9},{0x5B43, 0x8BFA},{0x5B44, 0x8BFB},
- {0x5B45, 0x8BFC},{0x5B46, 0x8BFD},{0x5B47, 0x8BFE},{0x5B48, 0x8C40},{0x5B49, 0x8C41},{0x5B4A, 0x8C42},{0x5B4B, 0x8C43},{0x5B4C, 0x8C44},
- {0x5B4D, 0x8C45},{0x5B4E, 0x8C46},{0x5B4F, 0x8C47},{0x5B50, 0xD7D3},{0x5B51, 0xE6DD},{0x5B52, 0x8C48},{0x5B53, 0xE6DE},{0x5B54, 0xBFD7},
- {0x5B55, 0xD4D0},{0x5B56, 0x8C49},{0x5B57, 0xD7D6},{0x5B58, 0xB4E6},{0x5B59, 0xCBEF},{0x5B5A, 0xE6DA},{0x5B5B, 0xD8C3},{0x5B5C, 0xD7CE},
- {0x5B5D, 0xD0A2},{0x5B5E, 0x8C4A},{0x5B5F, 0xC3CF},{0x5B60, 0x8C4B},{0x5B61, 0x8C4C},{0x5B62, 0xE6DF},{0x5B63, 0xBCBE},{0x5B64, 0xB9C2},
- {0x5B65, 0xE6DB},{0x5B66, 0xD1A7},{0x5B67, 0x8C4D},{0x5B68, 0x8C4E},{0x5B69, 0xBAA2},{0x5B6A, 0xC2CF},{0x5B6B, 0x8C4F},{0x5B6C, 0xD8AB},
- {0x5B6D, 0x8C50},{0x5B6E, 0x8C51},{0x5B6F, 0x8C52},{0x5B70, 0xCAEB},{0x5B71, 0xE5EE},{0x5B72, 0x8C53},{0x5B73, 0xE6DC},{0x5B74, 0x8C54},
- {0x5B75, 0xB7F5},{0x5B76, 0x8C55},{0x5B77, 0x8C56},{0x5B78, 0x8C57},{0x5B79, 0x8C58},{0x5B7A, 0xC8E6},{0x5B7B, 0x8C59},{0x5B7C, 0x8C5A},
- {0x5B7D, 0xC4F5},{0x5B7E, 0x8C5B},{0x5B7F, 0x8C5C},{0x5B80, 0xE5B2},{0x5B81, 0xC4FE},{0x5B82, 0x8C5D},{0x5B83, 0xCBFC},{0x5B84, 0xE5B3},
- {0x5B85, 0xD5AC},{0x5B86, 0x8C5E},{0x5B87, 0xD3EE},{0x5B88, 0xCAD8},{0x5B89, 0xB0B2},{0x5B8A, 0x8C5F},{0x5B8B, 0xCBCE},{0x5B8C, 0xCDEA},
- {0x5B8D, 0x8C60},{0x5B8E, 0x8C61},{0x5B8F, 0xBAEA},{0x5B90, 0x8C62},{0x5B91, 0x8C63},{0x5B92, 0x8C64},{0x5B93, 0xE5B5},{0x5B94, 0x8C65},
- {0x5B95, 0xE5B4},{0x5B96, 0x8C66},{0x5B97, 0xD7DA},{0x5B98, 0xB9D9},{0x5B99, 0xD6E6},{0x5B9A, 0xB6A8},{0x5B9B, 0xCDF0},{0x5B9C, 0xD2CB},
- {0x5B9D, 0xB1A6},{0x5B9E, 0xCAB5},{0x5B9F, 0x8C67},{0x5BA0, 0xB3E8},{0x5BA1, 0xC9F3},{0x5BA2, 0xBFCD},{0x5BA3, 0xD0FB},{0x5BA4, 0xCAD2},
- {0x5BA5, 0xE5B6},{0x5BA6, 0xBBC2},{0x5BA7, 0x8C68},{0x5BA8, 0x8C69},{0x5BA9, 0x8C6A},{0x5BAA, 0xCFDC},{0x5BAB, 0xB9AC},{0x5BAC, 0x8C6B},
- {0x5BAD, 0x8C6C},{0x5BAE, 0x8C6D},{0x5BAF, 0x8C6E},{0x5BB0, 0xD4D7},{0x5BB1, 0x8C6F},{0x5BB2, 0x8C70},{0x5BB3, 0xBAA6},{0x5BB4, 0xD1E7},
- {0x5BB5, 0xCFFC},{0x5BB6, 0xBCD2},{0x5BB7, 0x8C71},{0x5BB8, 0xE5B7},{0x5BB9, 0xC8DD},{0x5BBA, 0x8C72},{0x5BBB, 0x8C73},{0x5BBC, 0x8C74},
- {0x5BBD, 0xBFED},{0x5BBE, 0xB1F6},{0x5BBF, 0xCBDE},{0x5BC0, 0x8C75},{0x5BC1, 0x8C76},{0x5BC2, 0xBCC5},{0x5BC3, 0x8C77},{0x5BC4, 0xBCC4},
- {0x5BC5, 0xD2FA},{0x5BC6, 0xC3DC},{0x5BC7, 0xBFDC},{0x5BC8, 0x8C78},{0x5BC9, 0x8C79},{0x5BCA, 0x8C7A},{0x5BCB, 0x8C7B},{0x5BCC, 0xB8BB},
- {0x5BCD, 0x8C7C},{0x5BCE, 0x8C7D},{0x5BCF, 0x8C7E},{0x5BD0, 0xC3C2},{0x5BD1, 0x8C80},{0x5BD2, 0xBAAE},{0x5BD3, 0xD4A2},{0x5BD4, 0x8C81},
- {0x5BD5, 0x8C82},{0x5BD6, 0x8C83},{0x5BD7, 0x8C84},{0x5BD8, 0x8C85},{0x5BD9, 0x8C86},{0x5BDA, 0x8C87},{0x5BDB, 0x8C88},{0x5BDC, 0x8C89},
- {0x5BDD, 0xC7DE},{0x5BDE, 0xC4AF},{0x5BDF, 0xB2EC},{0x5BE0, 0x8C8A},{0x5BE1, 0xB9D1},{0x5BE2, 0x8C8B},{0x5BE3, 0x8C8C},{0x5BE4, 0xE5BB},
- {0x5BE5, 0xC1C8},{0x5BE6, 0x8C8D},{0x5BE7, 0x8C8E},{0x5BE8, 0xD5AF},{0x5BE9, 0x8C8F},{0x5BEA, 0x8C90},{0x5BEB, 0x8C91},{0x5BEC, 0x8C92},
- {0x5BED, 0x8C93},{0x5BEE, 0xE5BC},{0x5BEF, 0x8C94},{0x5BF0, 0xE5BE},{0x5BF1, 0x8C95},{0x5BF2, 0x8C96},{0x5BF3, 0x8C97},{0x5BF4, 0x8C98},
- {0x5BF5, 0x8C99},{0x5BF6, 0x8C9A},{0x5BF7, 0x8C9B},{0x5BF8, 0xB4E7},{0x5BF9, 0xB6D4},{0x5BFA, 0xCBC2},{0x5BFB, 0xD1B0},{0x5BFC, 0xB5BC},
- {0x5BFD, 0x8C9C},{0x5BFE, 0x8C9D},{0x5BFF, 0xCAD9},{0x5C00, 0x8C9E},{0x5C01, 0xB7E2},{0x5C02, 0x8C9F},{0x5C03, 0x8CA0},{0x5C04, 0xC9E4},
- {0x5C05, 0x8CA1},{0x5C06, 0xBDAB},{0x5C07, 0x8CA2},{0x5C08, 0x8CA3},{0x5C09, 0xCEBE},{0x5C0A, 0xD7F0},{0x5C0B, 0x8CA4},{0x5C0C, 0x8CA5},
- {0x5C0D, 0x8CA6},{0x5C0E, 0x8CA7},{0x5C0F, 0xD0A1},{0x5C10, 0x8CA8},{0x5C11, 0xC9D9},{0x5C12, 0x8CA9},{0x5C13, 0x8CAA},{0x5C14, 0xB6FB},
- {0x5C15, 0xE6D8},{0x5C16, 0xBCE2},{0x5C17, 0x8CAB},{0x5C18, 0xB3BE},{0x5C19, 0x8CAC},{0x5C1A, 0xC9D0},{0x5C1B, 0x8CAD},{0x5C1C, 0xE6D9},
- {0x5C1D, 0xB3A2},{0x5C1E, 0x8CAE},{0x5C1F, 0x8CAF},{0x5C20, 0x8CB0},{0x5C21, 0x8CB1},{0x5C22, 0xDECC},{0x5C23, 0x8CB2},{0x5C24, 0xD3C8},
- {0x5C25, 0xDECD},{0x5C26, 0x8CB3},{0x5C27, 0xD2A2},{0x5C28, 0x8CB4},{0x5C29, 0x8CB5},{0x5C2A, 0x8CB6},{0x5C2B, 0x8CB7},{0x5C2C, 0xDECE},
- {0x5C2D, 0x8CB8},{0x5C2E, 0x8CB9},{0x5C2F, 0x8CBA},{0x5C30, 0x8CBB},{0x5C31, 0xBECD},{0x5C32, 0x8CBC},{0x5C33, 0x8CBD},{0x5C34, 0xDECF},
- {0x5C35, 0x8CBE},{0x5C36, 0x8CBF},{0x5C37, 0x8CC0},{0x5C38, 0xCAAC},{0x5C39, 0xD2FC},{0x5C3A, 0xB3DF},{0x5C3B, 0xE5EA},{0x5C3C, 0xC4E1},
- {0x5C3D, 0xBEA1},{0x5C3E, 0xCEB2},{0x5C3F, 0xC4F2},{0x5C40, 0xBED6},{0x5C41, 0xC6A8},{0x5C42, 0xB2E3},{0x5C43, 0x8CC1},{0x5C44, 0x8CC2},
- {0x5C45, 0xBED3},{0x5C46, 0x8CC3},{0x5C47, 0x8CC4},{0x5C48, 0xC7FC},{0x5C49, 0xCCEB},{0x5C4A, 0xBDEC},{0x5C4B, 0xCEDD},{0x5C4C, 0x8CC5},
- {0x5C4D, 0x8CC6},{0x5C4E, 0xCABA},{0x5C4F, 0xC6C1},{0x5C50, 0xE5EC},{0x5C51, 0xD0BC},{0x5C52, 0x8CC7},{0x5C53, 0x8CC8},{0x5C54, 0x8CC9},
- {0x5C55, 0xD5B9},{0x5C56, 0x8CCA},{0x5C57, 0x8CCB},{0x5C58, 0x8CCC},{0x5C59, 0xE5ED},{0x5C5A, 0x8CCD},{0x5C5B, 0x8CCE},{0x5C5C, 0x8CCF},
- {0x5C5D, 0x8CD0},{0x5C5E, 0xCAF4},{0x5C5F, 0x8CD1},{0x5C60, 0xCDC0},{0x5C61, 0xC2C5},{0x5C62, 0x8CD2},{0x5C63, 0xE5EF},{0x5C64, 0x8CD3},
- {0x5C65, 0xC2C4},{0x5C66, 0xE5F0},{0x5C67, 0x8CD4},{0x5C68, 0x8CD5},{0x5C69, 0x8CD6},{0x5C6A, 0x8CD7},{0x5C6B, 0x8CD8},{0x5C6C, 0x8CD9},
- {0x5C6D, 0x8CDA},{0x5C6E, 0xE5F8},{0x5C6F, 0xCDCD},{0x5C70, 0x8CDB},{0x5C71, 0xC9BD},{0x5C72, 0x8CDC},{0x5C73, 0x8CDD},{0x5C74, 0x8CDE},
- {0x5C75, 0x8CDF},{0x5C76, 0x8CE0},{0x5C77, 0x8CE1},{0x5C78, 0x8CE2},{0x5C79, 0xD2D9},{0x5C7A, 0xE1A8},{0x5C7B, 0x8CE3},{0x5C7C, 0x8CE4},
- {0x5C7D, 0x8CE5},{0x5C7E, 0x8CE6},{0x5C7F, 0xD3EC},{0x5C80, 0x8CE7},{0x5C81, 0xCBEA},{0x5C82, 0xC6F1},{0x5C83, 0x8CE8},{0x5C84, 0x8CE9},
- {0x5C85, 0x8CEA},{0x5C86, 0x8CEB},{0x5C87, 0x8CEC},{0x5C88, 0xE1AC},{0x5C89, 0x8CED},{0x5C8A, 0x8CEE},{0x5C8B, 0x8CEF},{0x5C8C, 0xE1A7},
- {0x5C8D, 0xE1A9},{0x5C8E, 0x8CF0},{0x5C8F, 0x8CF1},{0x5C90, 0xE1AA},{0x5C91, 0xE1AF},{0x5C92, 0x8CF2},{0x5C93, 0x8CF3},{0x5C94, 0xB2ED},
- {0x5C95, 0x8CF4},{0x5C96, 0xE1AB},{0x5C97, 0xB8DA},{0x5C98, 0xE1AD},{0x5C99, 0xE1AE},{0x5C9A, 0xE1B0},{0x5C9B, 0xB5BA},{0x5C9C, 0xE1B1},
- {0x5C9D, 0x8CF5},{0x5C9E, 0x8CF6},{0x5C9F, 0x8CF7},{0x5CA0, 0x8CF8},{0x5CA1, 0x8CF9},{0x5CA2, 0xE1B3},{0x5CA3, 0xE1B8},{0x5CA4, 0x8CFA},
- {0x5CA5, 0x8CFB},{0x5CA6, 0x8CFC},{0x5CA7, 0x8CFD},{0x5CA8, 0x8CFE},{0x5CA9, 0xD1D2},{0x5CAA, 0x8D40},{0x5CAB, 0xE1B6},{0x5CAC, 0xE1B5},
- {0x5CAD, 0xC1EB},{0x5CAE, 0x8D41},{0x5CAF, 0x8D42},{0x5CB0, 0x8D43},{0x5CB1, 0xE1B7},{0x5CB2, 0x8D44},{0x5CB3, 0xD4C0},{0x5CB4, 0x8D45},
- {0x5CB5, 0xE1B2},{0x5CB6, 0x8D46},{0x5CB7, 0xE1BA},{0x5CB8, 0xB0B6},{0x5CB9, 0x8D47},{0x5CBA, 0x8D48},{0x5CBB, 0x8D49},{0x5CBC, 0x8D4A},
- {0x5CBD, 0xE1B4},{0x5CBE, 0x8D4B},{0x5CBF, 0xBFF9},{0x5CC0, 0x8D4C},{0x5CC1, 0xE1B9},{0x5CC2, 0x8D4D},{0x5CC3, 0x8D4E},{0x5CC4, 0xE1BB},
- {0x5CC5, 0x8D4F},{0x5CC6, 0x8D50},{0x5CC7, 0x8D51},{0x5CC8, 0x8D52},{0x5CC9, 0x8D53},{0x5CCA, 0x8D54},{0x5CCB, 0xE1BE},{0x5CCC, 0x8D55},
- {0x5CCD, 0x8D56},{0x5CCE, 0x8D57},{0x5CCF, 0x8D58},{0x5CD0, 0x8D59},{0x5CD1, 0x8D5A},{0x5CD2, 0xE1BC},{0x5CD3, 0x8D5B},{0x5CD4, 0x8D5C},
- {0x5CD5, 0x8D5D},{0x5CD6, 0x8D5E},{0x5CD7, 0x8D5F},{0x5CD8, 0x8D60},{0x5CD9, 0xD6C5},{0x5CDA, 0x8D61},{0x5CDB, 0x8D62},{0x5CDC, 0x8D63},
- {0x5CDD, 0x8D64},{0x5CDE, 0x8D65},{0x5CDF, 0x8D66},{0x5CE0, 0x8D67},{0x5CE1, 0xCFBF},{0x5CE2, 0x8D68},{0x5CE3, 0x8D69},{0x5CE4, 0xE1BD},
- {0x5CE5, 0xE1BF},{0x5CE6, 0xC2CD},{0x5CE7, 0x8D6A},{0x5CE8, 0xB6EB},{0x5CE9, 0x8D6B},{0x5CEA, 0xD3F8},{0x5CEB, 0x8D6C},{0x5CEC, 0x8D6D},
- {0x5CED, 0xC7CD},{0x5CEE, 0x8D6E},{0x5CEF, 0x8D6F},{0x5CF0, 0xB7E5},{0x5CF1, 0x8D70},{0x5CF2, 0x8D71},{0x5CF3, 0x8D72},{0x5CF4, 0x8D73},
- {0x5CF5, 0x8D74},{0x5CF6, 0x8D75},{0x5CF7, 0x8D76},{0x5CF8, 0x8D77},{0x5CF9, 0x8D78},{0x5CFA, 0x8D79},{0x5CFB, 0xBEFE},{0x5CFC, 0x8D7A},
- {0x5CFD, 0x8D7B},{0x5CFE, 0x8D7C},{0x5CFF, 0x8D7D},{0x5D00, 0x8D7E},{0x5D01, 0x8D80},{0x5D02, 0xE1C0},{0x5D03, 0xE1C1},{0x5D04, 0x8D81},
- {0x5D05, 0x8D82},{0x5D06, 0xE1C7},{0x5D07, 0xB3E7},{0x5D08, 0x8D83},{0x5D09, 0x8D84},{0x5D0A, 0x8D85},{0x5D0B, 0x8D86},{0x5D0C, 0x8D87},
- {0x5D0D, 0x8D88},{0x5D0E, 0xC6E9},{0x5D0F, 0x8D89},{0x5D10, 0x8D8A},{0x5D11, 0x8D8B},{0x5D12, 0x8D8C},{0x5D13, 0x8D8D},{0x5D14, 0xB4DE},
- {0x5D15, 0x8D8E},{0x5D16, 0xD1C2},{0x5D17, 0x8D8F},{0x5D18, 0x8D90},{0x5D19, 0x8D91},{0x5D1A, 0x8D92},{0x5D1B, 0xE1C8},{0x5D1C, 0x8D93},
- {0x5D1D, 0x8D94},{0x5D1E, 0xE1C6},{0x5D1F, 0x8D95},{0x5D20, 0x8D96},{0x5D21, 0x8D97},{0x5D22, 0x8D98},{0x5D23, 0x8D99},{0x5D24, 0xE1C5},
- {0x5D25, 0x8D9A},{0x5D26, 0xE1C3},{0x5D27, 0xE1C2},{0x5D28, 0x8D9B},{0x5D29, 0xB1C0},{0x5D2A, 0x8D9C},{0x5D2B, 0x8D9D},{0x5D2C, 0x8D9E},
- {0x5D2D, 0xD5B8},{0x5D2E, 0xE1C4},{0x5D2F, 0x8D9F},{0x5D30, 0x8DA0},{0x5D31, 0x8DA1},{0x5D32, 0x8DA2},{0x5D33, 0x8DA3},{0x5D34, 0xE1CB},
- {0x5D35, 0x8DA4},{0x5D36, 0x8DA5},{0x5D37, 0x8DA6},{0x5D38, 0x8DA7},{0x5D39, 0x8DA8},{0x5D3A, 0x8DA9},{0x5D3B, 0x8DAA},{0x5D3C, 0x8DAB},
- {0x5D3D, 0xE1CC},{0x5D3E, 0xE1CA},{0x5D3F, 0x8DAC},{0x5D40, 0x8DAD},{0x5D41, 0x8DAE},{0x5D42, 0x8DAF},{0x5D43, 0x8DB0},{0x5D44, 0x8DB1},
- {0x5D45, 0x8DB2},{0x5D46, 0x8DB3},{0x5D47, 0xEFFA},{0x5D48, 0x8DB4},{0x5D49, 0x8DB5},{0x5D4A, 0xE1D3},{0x5D4B, 0xE1D2},{0x5D4C, 0xC7B6},
- {0x5D4D, 0x8DB6},{0x5D4E, 0x8DB7},{0x5D4F, 0x8DB8},{0x5D50, 0x8DB9},{0x5D51, 0x8DBA},{0x5D52, 0x8DBB},{0x5D53, 0x8DBC},{0x5D54, 0x8DBD},
- {0x5D55, 0x8DBE},{0x5D56, 0x8DBF},{0x5D57, 0x8DC0},{0x5D58, 0xE1C9},{0x5D59, 0x8DC1},{0x5D5A, 0x8DC2},{0x5D5B, 0xE1CE},{0x5D5C, 0x8DC3},
- {0x5D5D, 0xE1D0},{0x5D5E, 0x8DC4},{0x5D5F, 0x8DC5},{0x5D60, 0x8DC6},{0x5D61, 0x8DC7},{0x5D62, 0x8DC8},{0x5D63, 0x8DC9},{0x5D64, 0x8DCA},
- {0x5D65, 0x8DCB},{0x5D66, 0x8DCC},{0x5D67, 0x8DCD},{0x5D68, 0x8DCE},{0x5D69, 0xE1D4},{0x5D6A, 0x8DCF},{0x5D6B, 0xE1D1},{0x5D6C, 0xE1CD},
- {0x5D6D, 0x8DD0},{0x5D6E, 0x8DD1},{0x5D6F, 0xE1CF},{0x5D70, 0x8DD2},{0x5D71, 0x8DD3},{0x5D72, 0x8DD4},{0x5D73, 0x8DD5},{0x5D74, 0xE1D5},
- {0x5D75, 0x8DD6},{0x5D76, 0x8DD7},{0x5D77, 0x8DD8},{0x5D78, 0x8DD9},{0x5D79, 0x8DDA},{0x5D7A, 0x8DDB},{0x5D7B, 0x8DDC},{0x5D7C, 0x8DDD},
- {0x5D7D, 0x8DDE},{0x5D7E, 0x8DDF},{0x5D7F, 0x8DE0},{0x5D80, 0x8DE1},{0x5D81, 0x8DE2},{0x5D82, 0xE1D6},{0x5D83, 0x8DE3},{0x5D84, 0x8DE4},
- {0x5D85, 0x8DE5},{0x5D86, 0x8DE6},{0x5D87, 0x8DE7},{0x5D88, 0x8DE8},{0x5D89, 0x8DE9},{0x5D8A, 0x8DEA},{0x5D8B, 0x8DEB},{0x5D8C, 0x8DEC},
- {0x5D8D, 0x8DED},{0x5D8E, 0x8DEE},{0x5D8F, 0x8DEF},{0x5D90, 0x8DF0},{0x5D91, 0x8DF1},{0x5D92, 0x8DF2},{0x5D93, 0x8DF3},{0x5D94, 0x8DF4},
- {0x5D95, 0x8DF5},{0x5D96, 0x8DF6},{0x5D97, 0x8DF7},{0x5D98, 0x8DF8},{0x5D99, 0xE1D7},{0x5D9A, 0x8DF9},{0x5D9B, 0x8DFA},{0x5D9C, 0x8DFB},
- {0x5D9D, 0xE1D8},{0x5D9E, 0x8DFC},{0x5D9F, 0x8DFD},{0x5DA0, 0x8DFE},{0x5DA1, 0x8E40},{0x5DA2, 0x8E41},{0x5DA3, 0x8E42},{0x5DA4, 0x8E43},
- {0x5DA5, 0x8E44},{0x5DA6, 0x8E45},{0x5DA7, 0x8E46},{0x5DA8, 0x8E47},{0x5DA9, 0x8E48},{0x5DAA, 0x8E49},{0x5DAB, 0x8E4A},{0x5DAC, 0x8E4B},
- {0x5DAD, 0x8E4C},{0x5DAE, 0x8E4D},{0x5DAF, 0x8E4E},{0x5DB0, 0x8E4F},{0x5DB1, 0x8E50},{0x5DB2, 0x8E51},{0x5DB3, 0x8E52},{0x5DB4, 0x8E53},
- {0x5DB5, 0x8E54},{0x5DB6, 0x8E55},{0x5DB7, 0xE1DA},{0x5DB8, 0x8E56},{0x5DB9, 0x8E57},{0x5DBA, 0x8E58},{0x5DBB, 0x8E59},{0x5DBC, 0x8E5A},
- {0x5DBD, 0x8E5B},{0x5DBE, 0x8E5C},{0x5DBF, 0x8E5D},{0x5DC0, 0x8E5E},{0x5DC1, 0x8E5F},{0x5DC2, 0x8E60},{0x5DC3, 0x8E61},{0x5DC4, 0x8E62},
- {0x5DC5, 0xE1DB},{0x5DC6, 0x8E63},{0x5DC7, 0x8E64},{0x5DC8, 0x8E65},{0x5DC9, 0x8E66},{0x5DCA, 0x8E67},{0x5DCB, 0x8E68},{0x5DCC, 0x8E69},
- {0x5DCD, 0xCEA1},{0x5DCE, 0x8E6A},{0x5DCF, 0x8E6B},{0x5DD0, 0x8E6C},{0x5DD1, 0x8E6D},{0x5DD2, 0x8E6E},{0x5DD3, 0x8E6F},{0x5DD4, 0x8E70},
- {0x5DD5, 0x8E71},{0x5DD6, 0x8E72},{0x5DD7, 0x8E73},{0x5DD8, 0x8E74},{0x5DD9, 0x8E75},{0x5DDA, 0x8E76},{0x5DDB, 0xE7DD},{0x5DDC, 0x8E77},
- {0x5DDD, 0xB4A8},{0x5DDE, 0xD6DD},{0x5DDF, 0x8E78},{0x5DE0, 0x8E79},{0x5DE1, 0xD1B2},{0x5DE2, 0xB3B2},{0x5DE3, 0x8E7A},{0x5DE4, 0x8E7B},
- {0x5DE5, 0xB9A4},{0x5DE6, 0xD7F3},{0x5DE7, 0xC7C9},{0x5DE8, 0xBEDE},{0x5DE9, 0xB9AE},{0x5DEA, 0x8E7C},{0x5DEB, 0xCED7},{0x5DEC, 0x8E7D},
- {0x5DED, 0x8E7E},{0x5DEE, 0xB2EE},{0x5DEF, 0xDBCF},{0x5DF0, 0x8E80},{0x5DF1, 0xBCBA},{0x5DF2, 0xD2D1},{0x5DF3, 0xCBC8},{0x5DF4, 0xB0CD},
- {0x5DF5, 0x8E81},{0x5DF6, 0x8E82},{0x5DF7, 0xCFEF},{0x5DF8, 0x8E83},{0x5DF9, 0x8E84},{0x5DFA, 0x8E85},{0x5DFB, 0x8E86},{0x5DFC, 0x8E87},
- {0x5DFD, 0xD9E3},{0x5DFE, 0xBDED},{0x5DFF, 0x8E88},{0x5E00, 0x8E89},{0x5E01, 0xB1D2},{0x5E02, 0xCAD0},{0x5E03, 0xB2BC},{0x5E04, 0x8E8A},
- {0x5E05, 0xCBA7},{0x5E06, 0xB7AB},{0x5E07, 0x8E8B},{0x5E08, 0xCAA6},{0x5E09, 0x8E8C},{0x5E0A, 0x8E8D},{0x5E0B, 0x8E8E},{0x5E0C, 0xCFA3},
- {0x5E0D, 0x8E8F},{0x5E0E, 0x8E90},{0x5E0F, 0xE0F8},{0x5E10, 0xD5CA},{0x5E11, 0xE0FB},{0x5E12, 0x8E91},{0x5E13, 0x8E92},{0x5E14, 0xE0FA},
- {0x5E15, 0xC5C1},{0x5E16, 0xCCFB},{0x5E17, 0x8E93},{0x5E18, 0xC1B1},{0x5E19, 0xE0F9},{0x5E1A, 0xD6E3},{0x5E1B, 0xB2AF},{0x5E1C, 0xD6C4},
- {0x5E1D, 0xB5DB},{0x5E1E, 0x8E94},{0x5E1F, 0x8E95},{0x5E20, 0x8E96},{0x5E21, 0x8E97},{0x5E22, 0x8E98},{0x5E23, 0x8E99},{0x5E24, 0x8E9A},
- {0x5E25, 0x8E9B},{0x5E26, 0xB4F8},{0x5E27, 0xD6A1},{0x5E28, 0x8E9C},{0x5E29, 0x8E9D},{0x5E2A, 0x8E9E},{0x5E2B, 0x8E9F},{0x5E2C, 0x8EA0},
- {0x5E2D, 0xCFAF},{0x5E2E, 0xB0EF},{0x5E2F, 0x8EA1},{0x5E30, 0x8EA2},{0x5E31, 0xE0FC},{0x5E32, 0x8EA3},{0x5E33, 0x8EA4},{0x5E34, 0x8EA5},
- {0x5E35, 0x8EA6},{0x5E36, 0x8EA7},{0x5E37, 0xE1A1},{0x5E38, 0xB3A3},{0x5E39, 0x8EA8},{0x5E3A, 0x8EA9},{0x5E3B, 0xE0FD},{0x5E3C, 0xE0FE},
- {0x5E3D, 0xC3B1},{0x5E3E, 0x8EAA},{0x5E3F, 0x8EAB},{0x5E40, 0x8EAC},{0x5E41, 0x8EAD},{0x5E42, 0xC3DD},{0x5E43, 0x8EAE},{0x5E44, 0xE1A2},
- {0x5E45, 0xB7F9},{0x5E46, 0x8EAF},{0x5E47, 0x8EB0},{0x5E48, 0x8EB1},{0x5E49, 0x8EB2},{0x5E4A, 0x8EB3},{0x5E4B, 0x8EB4},{0x5E4C, 0xBBCF},
- {0x5E4D, 0x8EB5},{0x5E4E, 0x8EB6},{0x5E4F, 0x8EB7},{0x5E50, 0x8EB8},{0x5E51, 0x8EB9},{0x5E52, 0x8EBA},{0x5E53, 0x8EBB},{0x5E54, 0xE1A3},
- {0x5E55, 0xC4BB},{0x5E56, 0x8EBC},{0x5E57, 0x8EBD},{0x5E58, 0x8EBE},{0x5E59, 0x8EBF},{0x5E5A, 0x8EC0},{0x5E5B, 0xE1A4},{0x5E5C, 0x8EC1},
- {0x5E5D, 0x8EC2},{0x5E5E, 0xE1A5},{0x5E5F, 0x8EC3},{0x5E60, 0x8EC4},{0x5E61, 0xE1A6},{0x5E62, 0xB4B1},{0x5E63, 0x8EC5},{0x5E64, 0x8EC6},
- {0x5E65, 0x8EC7},{0x5E66, 0x8EC8},{0x5E67, 0x8EC9},{0x5E68, 0x8ECA},{0x5E69, 0x8ECB},{0x5E6A, 0x8ECC},{0x5E6B, 0x8ECD},{0x5E6C, 0x8ECE},
- {0x5E6D, 0x8ECF},{0x5E6E, 0x8ED0},{0x5E6F, 0x8ED1},{0x5E70, 0x8ED2},{0x5E71, 0x8ED3},{0x5E72, 0xB8C9},{0x5E73, 0xC6BD},{0x5E74, 0xC4EA},
- {0x5E75, 0x8ED4},{0x5E76, 0xB2A2},{0x5E77, 0x8ED5},{0x5E78, 0xD0D2},{0x5E79, 0x8ED6},{0x5E7A, 0xE7DB},{0x5E7B, 0xBBC3},{0x5E7C, 0xD3D7},
- {0x5E7D, 0xD3C4},{0x5E7E, 0x8ED7},{0x5E7F, 0xB9E3},{0x5E80, 0xE2CF},{0x5E81, 0x8ED8},{0x5E82, 0x8ED9},{0x5E83, 0x8EDA},{0x5E84, 0xD7AF},
- {0x5E85, 0x8EDB},{0x5E86, 0xC7EC},{0x5E87, 0xB1D3},{0x5E88, 0x8EDC},{0x5E89, 0x8EDD},{0x5E8A, 0xB4B2},{0x5E8B, 0xE2D1},{0x5E8C, 0x8EDE},
- {0x5E8D, 0x8EDF},{0x5E8E, 0x8EE0},{0x5E8F, 0xD0F2},{0x5E90, 0xC2AE},{0x5E91, 0xE2D0},{0x5E92, 0x8EE1},{0x5E93, 0xBFE2},{0x5E94, 0xD3A6},
- {0x5E95, 0xB5D7},{0x5E96, 0xE2D2},{0x5E97, 0xB5EA},{0x5E98, 0x8EE2},{0x5E99, 0xC3ED},{0x5E9A, 0xB8FD},{0x5E9B, 0x8EE3},{0x5E9C, 0xB8AE},
- {0x5E9D, 0x8EE4},{0x5E9E, 0xC5D3},{0x5E9F, 0xB7CF},{0x5EA0, 0xE2D4},{0x5EA1, 0x8EE5},{0x5EA2, 0x8EE6},{0x5EA3, 0x8EE7},{0x5EA4, 0x8EE8},
- {0x5EA5, 0xE2D3},{0x5EA6, 0xB6C8},{0x5EA7, 0xD7F9},{0x5EA8, 0x8EE9},{0x5EA9, 0x8EEA},{0x5EAA, 0x8EEB},{0x5EAB, 0x8EEC},{0x5EAC, 0x8EED},
- {0x5EAD, 0xCDA5},{0x5EAE, 0x8EEE},{0x5EAF, 0x8EEF},{0x5EB0, 0x8EF0},{0x5EB1, 0x8EF1},{0x5EB2, 0x8EF2},{0x5EB3, 0xE2D8},{0x5EB4, 0x8EF3},
- {0x5EB5, 0xE2D6},{0x5EB6, 0xCAFC},{0x5EB7, 0xBFB5},{0x5EB8, 0xD3B9},{0x5EB9, 0xE2D5},{0x5EBA, 0x8EF4},{0x5EBB, 0x8EF5},{0x5EBC, 0x8EF6},
- {0x5EBD, 0x8EF7},{0x5EBE, 0xE2D7},{0x5EBF, 0x8EF8},{0x5EC0, 0x8EF9},{0x5EC1, 0x8EFA},{0x5EC2, 0x8EFB},{0x5EC3, 0x8EFC},{0x5EC4, 0x8EFD},
- {0x5EC5, 0x8EFE},{0x5EC6, 0x8F40},{0x5EC7, 0x8F41},{0x5EC8, 0x8F42},{0x5EC9, 0xC1AE},{0x5ECA, 0xC0C8},{0x5ECB, 0x8F43},{0x5ECC, 0x8F44},
- {0x5ECD, 0x8F45},{0x5ECE, 0x8F46},{0x5ECF, 0x8F47},{0x5ED0, 0x8F48},{0x5ED1, 0xE2DB},{0x5ED2, 0xE2DA},{0x5ED3, 0xC0AA},{0x5ED4, 0x8F49},
- {0x5ED5, 0x8F4A},{0x5ED6, 0xC1CE},{0x5ED7, 0x8F4B},{0x5ED8, 0x8F4C},{0x5ED9, 0x8F4D},{0x5EDA, 0x8F4E},{0x5EDB, 0xE2DC},{0x5EDC, 0x8F4F},
- {0x5EDD, 0x8F50},{0x5EDE, 0x8F51},{0x5EDF, 0x8F52},{0x5EE0, 0x8F53},{0x5EE1, 0x8F54},{0x5EE2, 0x8F55},{0x5EE3, 0x8F56},{0x5EE4, 0x8F57},
- {0x5EE5, 0x8F58},{0x5EE6, 0x8F59},{0x5EE7, 0x8F5A},{0x5EE8, 0xE2DD},{0x5EE9, 0x8F5B},{0x5EEA, 0xE2DE},{0x5EEB, 0x8F5C},{0x5EEC, 0x8F5D},
- {0x5EED, 0x8F5E},{0x5EEE, 0x8F5F},{0x5EEF, 0x8F60},{0x5EF0, 0x8F61},{0x5EF1, 0x8F62},{0x5EF2, 0x8F63},{0x5EF3, 0x8F64},{0x5EF4, 0xDBC8},
- {0x5EF5, 0x8F65},{0x5EF6, 0xD1D3},{0x5EF7, 0xCDA2},{0x5EF8, 0x8F66},{0x5EF9, 0x8F67},{0x5EFA, 0xBDA8},{0x5EFB, 0x8F68},{0x5EFC, 0x8F69},
- {0x5EFD, 0x8F6A},{0x5EFE, 0xDEC3},{0x5EFF, 0xD8A5},{0x5F00, 0xBFAA},{0x5F01, 0xDBCD},{0x5F02, 0xD2EC},{0x5F03, 0xC6FA},{0x5F04, 0xC5AA},
- {0x5F05, 0x8F6B},{0x5F06, 0x8F6C},{0x5F07, 0x8F6D},{0x5F08, 0xDEC4},{0x5F09, 0x8F6E},{0x5F0A, 0xB1D7},{0x5F0B, 0xDFAE},{0x5F0C, 0x8F6F},
- {0x5F0D, 0x8F70},{0x5F0E, 0x8F71},{0x5F0F, 0xCABD},{0x5F10, 0x8F72},{0x5F11, 0xDFB1},{0x5F12, 0x8F73},{0x5F13, 0xB9AD},{0x5F14, 0x8F74},
- {0x5F15, 0xD2FD},{0x5F16, 0x8F75},{0x5F17, 0xB8A5},{0x5F18, 0xBAEB},{0x5F19, 0x8F76},{0x5F1A, 0x8F77},{0x5F1B, 0xB3DA},{0x5F1C, 0x8F78},
- {0x5F1D, 0x8F79},{0x5F1E, 0x8F7A},{0x5F1F, 0xB5DC},{0x5F20, 0xD5C5},{0x5F21, 0x8F7B},{0x5F22, 0x8F7C},{0x5F23, 0x8F7D},{0x5F24, 0x8F7E},
- {0x5F25, 0xC3D6},{0x5F26, 0xCFD2},{0x5F27, 0xBBA1},{0x5F28, 0x8F80},{0x5F29, 0xE5F3},{0x5F2A, 0xE5F2},{0x5F2B, 0x8F81},{0x5F2C, 0x8F82},
- {0x5F2D, 0xE5F4},{0x5F2E, 0x8F83},{0x5F2F, 0xCDE4},{0x5F30, 0x8F84},{0x5F31, 0xC8F5},{0x5F32, 0x8F85},{0x5F33, 0x8F86},{0x5F34, 0x8F87},
- {0x5F35, 0x8F88},{0x5F36, 0x8F89},{0x5F37, 0x8F8A},{0x5F38, 0x8F8B},{0x5F39, 0xB5AF},{0x5F3A, 0xC7BF},{0x5F3B, 0x8F8C},{0x5F3C, 0xE5F6},
- {0x5F3D, 0x8F8D},{0x5F3E, 0x8F8E},{0x5F3F, 0x8F8F},{0x5F40, 0xECB0},{0x5F41, 0x8F90},{0x5F42, 0x8F91},{0x5F43, 0x8F92},{0x5F44, 0x8F93},
- {0x5F45, 0x8F94},{0x5F46, 0x8F95},{0x5F47, 0x8F96},{0x5F48, 0x8F97},{0x5F49, 0x8F98},{0x5F4A, 0x8F99},{0x5F4B, 0x8F9A},{0x5F4C, 0x8F9B},
- {0x5F4D, 0x8F9C},{0x5F4E, 0x8F9D},{0x5F4F, 0x8F9E},{0x5F50, 0xE5E6},{0x5F51, 0x8F9F},{0x5F52, 0xB9E9},{0x5F53, 0xB5B1},{0x5F54, 0x8FA0},
- {0x5F55, 0xC2BC},{0x5F56, 0xE5E8},{0x5F57, 0xE5E7},{0x5F58, 0xE5E9},{0x5F59, 0x8FA1},{0x5F5A, 0x8FA2},{0x5F5B, 0x8FA3},{0x5F5C, 0x8FA4},
- {0x5F5D, 0xD2CD},{0x5F5E, 0x8FA5},{0x5F5F, 0x8FA6},{0x5F60, 0x8FA7},{0x5F61, 0xE1EA},{0x5F62, 0xD0CE},{0x5F63, 0x8FA8},{0x5F64, 0xCDAE},
- {0x5F65, 0x8FA9},{0x5F66, 0xD1E5},{0x5F67, 0x8FAA},{0x5F68, 0x8FAB},{0x5F69, 0xB2CA},{0x5F6A, 0xB1EB},{0x5F6B, 0x8FAC},{0x5F6C, 0xB1F2},
- {0x5F6D, 0xC5ED},{0x5F6E, 0x8FAD},{0x5F6F, 0x8FAE},{0x5F70, 0xD5C3},{0x5F71, 0xD3B0},{0x5F72, 0x8FAF},{0x5F73, 0xE1DC},{0x5F74, 0x8FB0},
- {0x5F75, 0x8FB1},{0x5F76, 0x8FB2},{0x5F77, 0xE1DD},{0x5F78, 0x8FB3},{0x5F79, 0xD2DB},{0x5F7A, 0x8FB4},{0x5F7B, 0xB3B9},{0x5F7C, 0xB1CB},
- {0x5F7D, 0x8FB5},{0x5F7E, 0x8FB6},{0x5F7F, 0x8FB7},{0x5F80, 0xCDF9},{0x5F81, 0xD5F7},{0x5F82, 0xE1DE},{0x5F83, 0x8FB8},{0x5F84, 0xBEB6},
- {0x5F85, 0xB4FD},{0x5F86, 0x8FB9},{0x5F87, 0xE1DF},{0x5F88, 0xBADC},{0x5F89, 0xE1E0},{0x5F8A, 0xBBB2},{0x5F8B, 0xC2C9},{0x5F8C, 0xE1E1},
- {0x5F8D, 0x8FBA},{0x5F8E, 0x8FBB},{0x5F8F, 0x8FBC},{0x5F90, 0xD0EC},{0x5F91, 0x8FBD},{0x5F92, 0xCDBD},{0x5F93, 0x8FBE},{0x5F94, 0x8FBF},
- {0x5F95, 0xE1E2},{0x5F96, 0x8FC0},{0x5F97, 0xB5C3},{0x5F98, 0xC5C7},{0x5F99, 0xE1E3},{0x5F9A, 0x8FC1},{0x5F9B, 0x8FC2},{0x5F9C, 0xE1E4},
- {0x5F9D, 0x8FC3},{0x5F9E, 0x8FC4},{0x5F9F, 0x8FC5},{0x5FA0, 0x8FC6},{0x5FA1, 0xD3F9},{0x5FA2, 0x8FC7},{0x5FA3, 0x8FC8},{0x5FA4, 0x8FC9},
- {0x5FA5, 0x8FCA},{0x5FA6, 0x8FCB},{0x5FA7, 0x8FCC},{0x5FA8, 0xE1E5},{0x5FA9, 0x8FCD},{0x5FAA, 0xD1AD},{0x5FAB, 0x8FCE},{0x5FAC, 0x8FCF},
- {0x5FAD, 0xE1E6},{0x5FAE, 0xCEA2},{0x5FAF, 0x8FD0},{0x5FB0, 0x8FD1},{0x5FB1, 0x8FD2},{0x5FB2, 0x8FD3},{0x5FB3, 0x8FD4},{0x5FB4, 0x8FD5},
- {0x5FB5, 0xE1E7},{0x5FB6, 0x8FD6},{0x5FB7, 0xB5C2},{0x5FB8, 0x8FD7},{0x5FB9, 0x8FD8},{0x5FBA, 0x8FD9},{0x5FBB, 0x8FDA},{0x5FBC, 0xE1E8},
- {0x5FBD, 0xBBD5},{0x5FBE, 0x8FDB},{0x5FBF, 0x8FDC},{0x5FC0, 0x8FDD},{0x5FC1, 0x8FDE},{0x5FC2, 0x8FDF},{0x5FC3, 0xD0C4},{0x5FC4, 0xE2E0},
- {0x5FC5, 0xB1D8},{0x5FC6, 0xD2E4},{0x5FC7, 0x8FE0},{0x5FC8, 0x8FE1},{0x5FC9, 0xE2E1},{0x5FCA, 0x8FE2},{0x5FCB, 0x8FE3},{0x5FCC, 0xBCC9},
- {0x5FCD, 0xC8CC},{0x5FCE, 0x8FE4},{0x5FCF, 0xE2E3},{0x5FD0, 0xECFE},{0x5FD1, 0xECFD},{0x5FD2, 0xDFAF},{0x5FD3, 0x8FE5},{0x5FD4, 0x8FE6},
- {0x5FD5, 0x8FE7},{0x5FD6, 0xE2E2},{0x5FD7, 0xD6BE},{0x5FD8, 0xCDFC},{0x5FD9, 0xC3A6},{0x5FDA, 0x8FE8},{0x5FDB, 0x8FE9},{0x5FDC, 0x8FEA},
- {0x5FDD, 0xE3C3},{0x5FDE, 0x8FEB},{0x5FDF, 0x8FEC},{0x5FE0, 0xD6D2},{0x5FE1, 0xE2E7},{0x5FE2, 0x8FED},{0x5FE3, 0x8FEE},{0x5FE4, 0xE2E8},
- {0x5FE5, 0x8FEF},{0x5FE6, 0x8FF0},{0x5FE7, 0xD3C7},{0x5FE8, 0x8FF1},{0x5FE9, 0x8FF2},{0x5FEA, 0xE2EC},{0x5FEB, 0xBFEC},{0x5FEC, 0x8FF3},
- {0x5FED, 0xE2ED},{0x5FEE, 0xE2E5},{0x5FEF, 0x8FF4},{0x5FF0, 0x8FF5},{0x5FF1, 0xB3C0},{0x5FF2, 0x8FF6},{0x5FF3, 0x8FF7},{0x5FF4, 0x8FF8},
- {0x5FF5, 0xC4EE},{0x5FF6, 0x8FF9},{0x5FF7, 0x8FFA},{0x5FF8, 0xE2EE},{0x5FF9, 0x8FFB},{0x5FFA, 0x8FFC},{0x5FFB, 0xD0C3},{0x5FFC, 0x8FFD},
- {0x5FFD, 0xBAF6},{0x5FFE, 0xE2E9},{0x5FFF, 0xB7DE},{0x6000, 0xBBB3},{0x6001, 0xCCAC},{0x6002, 0xCBCB},{0x6003, 0xE2E4},{0x6004, 0xE2E6},
- {0x6005, 0xE2EA},{0x6006, 0xE2EB},{0x6007, 0x8FFE},{0x6008, 0x9040},{0x6009, 0x9041},{0x600A, 0xE2F7},{0x600B, 0x9042},{0x600C, 0x9043},
- {0x600D, 0xE2F4},{0x600E, 0xD4F5},{0x600F, 0xE2F3},{0x6010, 0x9044},{0x6011, 0x9045},{0x6012, 0xC5AD},{0x6013, 0x9046},{0x6014, 0xD5FA},
- {0x6015, 0xC5C2},{0x6016, 0xB2C0},{0x6017, 0x9047},{0x6018, 0x9048},{0x6019, 0xE2EF},{0x601A, 0x9049},{0x601B, 0xE2F2},{0x601C, 0xC1AF},
- {0x601D, 0xCBBC},{0x601E, 0x904A},{0x601F, 0x904B},{0x6020, 0xB5A1},{0x6021, 0xE2F9},{0x6022, 0x904C},{0x6023, 0x904D},{0x6024, 0x904E},
- {0x6025, 0xBCB1},{0x6026, 0xE2F1},{0x6027, 0xD0D4},{0x6028, 0xD4B9},{0x6029, 0xE2F5},{0x602A, 0xB9D6},{0x602B, 0xE2F6},{0x602C, 0x904F},
- {0x602D, 0x9050},{0x602E, 0x9051},{0x602F, 0xC7D3},{0x6030, 0x9052},{0x6031, 0x9053},{0x6032, 0x9054},{0x6033, 0x9055},{0x6034, 0x9056},
- {0x6035, 0xE2F0},{0x6036, 0x9057},{0x6037, 0x9058},{0x6038, 0x9059},{0x6039, 0x905A},{0x603A, 0x905B},{0x603B, 0xD7DC},{0x603C, 0xEDA1},
- {0x603D, 0x905C},{0x603E, 0x905D},{0x603F, 0xE2F8},{0x6040, 0x905E},{0x6041, 0xEDA5},{0x6042, 0xE2FE},{0x6043, 0xCAD1},{0x6044, 0x905F},
- {0x6045, 0x9060},{0x6046, 0x9061},{0x6047, 0x9062},{0x6048, 0x9063},{0x6049, 0x9064},{0x604A, 0x9065},{0x604B, 0xC1B5},{0x604C, 0x9066},
- {0x604D, 0xBBD0},{0x604E, 0x9067},{0x604F, 0x9068},{0x6050, 0xBFD6},{0x6051, 0x9069},{0x6052, 0xBAE3},{0x6053, 0x906A},{0x6054, 0x906B},
- {0x6055, 0xCBA1},{0x6056, 0x906C},{0x6057, 0x906D},{0x6058, 0x906E},{0x6059, 0xEDA6},{0x605A, 0xEDA3},{0x605B, 0x906F},{0x605C, 0x9070},
- {0x605D, 0xEDA2},{0x605E, 0x9071},{0x605F, 0x9072},{0x6060, 0x9073},{0x6061, 0x9074},{0x6062, 0xBBD6},{0x6063, 0xEDA7},{0x6064, 0xD0F4},
- {0x6065, 0x9075},{0x6066, 0x9076},{0x6067, 0xEDA4},{0x6068, 0xBADE},{0x6069, 0xB6F7},{0x606A, 0xE3A1},{0x606B, 0xB6B2},{0x606C, 0xCCF1},
- {0x606D, 0xB9A7},{0x606E, 0x9077},{0x606F, 0xCFA2},{0x6070, 0xC7A1},{0x6071, 0x9078},{0x6072, 0x9079},{0x6073, 0xBFD2},{0x6074, 0x907A},
- {0x6075, 0x907B},{0x6076, 0xB6F1},{0x6077, 0x907C},{0x6078, 0xE2FA},{0x6079, 0xE2FB},{0x607A, 0xE2FD},{0x607B, 0xE2FC},{0x607C, 0xC4D5},
- {0x607D, 0xE3A2},{0x607E, 0x907D},{0x607F, 0xD3C1},{0x6080, 0x907E},{0x6081, 0x9080},{0x6082, 0x9081},{0x6083, 0xE3A7},{0x6084, 0xC7C4},
- {0x6085, 0x9082},{0x6086, 0x9083},{0x6087, 0x9084},{0x6088, 0x9085},{0x6089, 0xCFA4},{0x608A, 0x9086},{0x608B, 0x9087},{0x608C, 0xE3A9},
- {0x608D, 0xBAB7},{0x608E, 0x9088},{0x608F, 0x9089},{0x6090, 0x908A},{0x6091, 0x908B},{0x6092, 0xE3A8},{0x6093, 0x908C},{0x6094, 0xBBDA},
- {0x6095, 0x908D},{0x6096, 0xE3A3},{0x6097, 0x908E},{0x6098, 0x908F},{0x6099, 0x9090},{0x609A, 0xE3A4},{0x609B, 0xE3AA},{0x609C, 0x9091},
- {0x609D, 0xE3A6},{0x609E, 0x9092},{0x609F, 0xCEF2},{0x60A0, 0xD3C6},{0x60A1, 0x9093},{0x60A2, 0x9094},{0x60A3, 0xBBBC},{0x60A4, 0x9095},
- {0x60A5, 0x9096},{0x60A6, 0xD4C3},{0x60A7, 0x9097},{0x60A8, 0xC4FA},{0x60A9, 0x9098},{0x60AA, 0x9099},{0x60AB, 0xEDA8},{0x60AC, 0xD0FC},
- {0x60AD, 0xE3A5},{0x60AE, 0x909A},{0x60AF, 0xC3F5},{0x60B0, 0x909B},{0x60B1, 0xE3AD},{0x60B2, 0xB1AF},{0x60B3, 0x909C},{0x60B4, 0xE3B2},
- {0x60B5, 0x909D},{0x60B6, 0x909E},{0x60B7, 0x909F},{0x60B8, 0xBCC2},{0x60B9, 0x90A0},{0x60BA, 0x90A1},{0x60BB, 0xE3AC},{0x60BC, 0xB5BF},
- {0x60BD, 0x90A2},{0x60BE, 0x90A3},{0x60BF, 0x90A4},{0x60C0, 0x90A5},{0x60C1, 0x90A6},{0x60C2, 0x90A7},{0x60C3, 0x90A8},{0x60C4, 0x90A9},
- {0x60C5, 0xC7E9},{0x60C6, 0xE3B0},{0x60C7, 0x90AA},{0x60C8, 0x90AB},{0x60C9, 0x90AC},{0x60CA, 0xBEAA},{0x60CB, 0xCDEF},{0x60CC, 0x90AD},
- {0x60CD, 0x90AE},{0x60CE, 0x90AF},{0x60CF, 0x90B0},{0x60D0, 0x90B1},{0x60D1, 0xBBF3},{0x60D2, 0x90B2},{0x60D3, 0x90B3},{0x60D4, 0x90B4},
- {0x60D5, 0xCCE8},{0x60D6, 0x90B5},{0x60D7, 0x90B6},{0x60D8, 0xE3AF},{0x60D9, 0x90B7},{0x60DA, 0xE3B1},{0x60DB, 0x90B8},{0x60DC, 0xCFA7},
- {0x60DD, 0xE3AE},{0x60DE, 0x90B9},{0x60DF, 0xCEA9},{0x60E0, 0xBBDD},{0x60E1, 0x90BA},{0x60E2, 0x90BB},{0x60E3, 0x90BC},{0x60E4, 0x90BD},
- {0x60E5, 0x90BE},{0x60E6, 0xB5EB},{0x60E7, 0xBEE5},{0x60E8, 0xB2D2},{0x60E9, 0xB3CD},{0x60EA, 0x90BF},{0x60EB, 0xB1B9},{0x60EC, 0xE3AB},
- {0x60ED, 0xB2D1},{0x60EE, 0xB5AC},{0x60EF, 0xB9DF},{0x60F0, 0xB6E8},{0x60F1, 0x90C0},{0x60F2, 0x90C1},{0x60F3, 0xCFEB},{0x60F4, 0xE3B7},
- {0x60F5, 0x90C2},{0x60F6, 0xBBCC},{0x60F7, 0x90C3},{0x60F8, 0x90C4},{0x60F9, 0xC8C7},{0x60FA, 0xD0CA},{0x60FB, 0x90C5},{0x60FC, 0x90C6},
- {0x60FD, 0x90C7},{0x60FE, 0x90C8},{0x60FF, 0x90C9},{0x6100, 0xE3B8},{0x6101, 0xB3EE},{0x6102, 0x90CA},{0x6103, 0x90CB},{0x6104, 0x90CC},
- {0x6105, 0x90CD},{0x6106, 0xEDA9},{0x6107, 0x90CE},{0x6108, 0xD3FA},{0x6109, 0xD3E4},{0x610A, 0x90CF},{0x610B, 0x90D0},{0x610C, 0x90D1},
- {0x610D, 0xEDAA},{0x610E, 0xE3B9},{0x610F, 0xD2E2},{0x6110, 0x90D2},{0x6111, 0x90D3},{0x6112, 0x90D4},{0x6113, 0x90D5},{0x6114, 0x90D6},
- {0x6115, 0xE3B5},{0x6116, 0x90D7},{0x6117, 0x90D8},{0x6118, 0x90D9},{0x6119, 0x90DA},{0x611A, 0xD3DE},{0x611B, 0x90DB},{0x611C, 0x90DC},
- {0x611D, 0x90DD},{0x611E, 0x90DE},{0x611F, 0xB8D0},{0x6120, 0xE3B3},{0x6121, 0x90DF},{0x6122, 0x90E0},{0x6123, 0xE3B6},{0x6124, 0xB7DF},
- {0x6125, 0x90E1},{0x6126, 0xE3B4},{0x6127, 0xC0A2},{0x6128, 0x90E2},{0x6129, 0x90E3},{0x612A, 0x90E4},{0x612B, 0xE3BA},{0x612C, 0x90E5},
- {0x612D, 0x90E6},{0x612E, 0x90E7},{0x612F, 0x90E8},{0x6130, 0x90E9},{0x6131, 0x90EA},{0x6132, 0x90EB},{0x6133, 0x90EC},{0x6134, 0x90ED},
- {0x6135, 0x90EE},{0x6136, 0x90EF},{0x6137, 0x90F0},{0x6138, 0x90F1},{0x6139, 0x90F2},{0x613A, 0x90F3},{0x613B, 0x90F4},{0x613C, 0x90F5},
- {0x613D, 0x90F6},{0x613E, 0x90F7},{0x613F, 0xD4B8},{0x6140, 0x90F8},{0x6141, 0x90F9},{0x6142, 0x90FA},{0x6143, 0x90FB},{0x6144, 0x90FC},
- {0x6145, 0x90FD},{0x6146, 0x90FE},{0x6147, 0x9140},{0x6148, 0xB4C8},{0x6149, 0x9141},{0x614A, 0xE3BB},{0x614B, 0x9142},{0x614C, 0xBBC5},
- {0x614D, 0x9143},{0x614E, 0xC9F7},{0x614F, 0x9144},{0x6150, 0x9145},{0x6151, 0xC9E5},{0x6152, 0x9146},{0x6153, 0x9147},{0x6154, 0x9148},
- {0x6155, 0xC4BD},{0x6156, 0x9149},{0x6157, 0x914A},{0x6158, 0x914B},{0x6159, 0x914C},{0x615A, 0x914D},{0x615B, 0x914E},{0x615C, 0x914F},
- {0x615D, 0xEDAB},{0x615E, 0x9150},{0x615F, 0x9151},{0x6160, 0x9152},{0x6161, 0x9153},{0x6162, 0xC2FD},{0x6163, 0x9154},{0x6164, 0x9155},
- {0x6165, 0x9156},{0x6166, 0x9157},{0x6167, 0xBBDB},{0x6168, 0xBFAE},{0x6169, 0x9158},{0x616A, 0x9159},{0x616B, 0x915A},{0x616C, 0x915B},
- {0x616D, 0x915C},{0x616E, 0x915D},{0x616F, 0x915E},{0x6170, 0xCEBF},{0x6171, 0x915F},{0x6172, 0x9160},{0x6173, 0x9161},{0x6174, 0x9162},
- {0x6175, 0xE3BC},{0x6176, 0x9163},{0x6177, 0xBFB6},{0x6178, 0x9164},{0x6179, 0x9165},{0x617A, 0x9166},{0x617B, 0x9167},{0x617C, 0x9168},
- {0x617D, 0x9169},{0x617E, 0x916A},{0x617F, 0x916B},{0x6180, 0x916C},{0x6181, 0x916D},{0x6182, 0x916E},{0x6183, 0x916F},{0x6184, 0x9170},
- {0x6185, 0x9171},{0x6186, 0x9172},{0x6187, 0x9173},{0x6188, 0x9174},{0x6189, 0x9175},{0x618A, 0x9176},{0x618B, 0xB1EF},{0x618C, 0x9177},
- {0x618D, 0x9178},{0x618E, 0xD4F7},{0x618F, 0x9179},{0x6190, 0x917A},{0x6191, 0x917B},{0x6192, 0x917C},{0x6193, 0x917D},{0x6194, 0xE3BE},
- {0x6195, 0x917E},{0x6196, 0x9180},{0x6197, 0x9181},{0x6198, 0x9182},{0x6199, 0x9183},{0x619A, 0x9184},{0x619B, 0x9185},{0x619C, 0x9186},
- {0x619D, 0xEDAD},{0x619E, 0x9187},{0x619F, 0x9188},{0x61A0, 0x9189},{0x61A1, 0x918A},{0x61A2, 0x918B},{0x61A3, 0x918C},{0x61A4, 0x918D},
- {0x61A5, 0x918E},{0x61A6, 0x918F},{0x61A7, 0xE3BF},{0x61A8, 0xBAA9},{0x61A9, 0xEDAC},{0x61AA, 0x9190},{0x61AB, 0x9191},{0x61AC, 0xE3BD},
- {0x61AD, 0x9192},{0x61AE, 0x9193},{0x61AF, 0x9194},{0x61B0, 0x9195},{0x61B1, 0x9196},{0x61B2, 0x9197},{0x61B3, 0x9198},{0x61B4, 0x9199},
- {0x61B5, 0x919A},{0x61B6, 0x919B},{0x61B7, 0xE3C0},{0x61B8, 0x919C},{0x61B9, 0x919D},{0x61BA, 0x919E},{0x61BB, 0x919F},{0x61BC, 0x91A0},
- {0x61BD, 0x91A1},{0x61BE, 0xBAB6},{0x61BF, 0x91A2},{0x61C0, 0x91A3},{0x61C1, 0x91A4},{0x61C2, 0xB6AE},{0x61C3, 0x91A5},{0x61C4, 0x91A6},
- {0x61C5, 0x91A7},{0x61C6, 0x91A8},{0x61C7, 0x91A9},{0x61C8, 0xD0B8},{0x61C9, 0x91AA},{0x61CA, 0xB0C3},{0x61CB, 0xEDAE},{0x61CC, 0x91AB},
- {0x61CD, 0x91AC},{0x61CE, 0x91AD},{0x61CF, 0x91AE},{0x61D0, 0x91AF},{0x61D1, 0xEDAF},{0x61D2, 0xC0C1},{0x61D3, 0x91B0},{0x61D4, 0xE3C1},
- {0x61D5, 0x91B1},{0x61D6, 0x91B2},{0x61D7, 0x91B3},{0x61D8, 0x91B4},{0x61D9, 0x91B5},{0x61DA, 0x91B6},{0x61DB, 0x91B7},{0x61DC, 0x91B8},
- {0x61DD, 0x91B9},{0x61DE, 0x91BA},{0x61DF, 0x91BB},{0x61E0, 0x91BC},{0x61E1, 0x91BD},{0x61E2, 0x91BE},{0x61E3, 0x91BF},{0x61E4, 0x91C0},
- {0x61E5, 0x91C1},{0x61E6, 0xC5B3},{0x61E7, 0x91C2},{0x61E8, 0x91C3},{0x61E9, 0x91C4},{0x61EA, 0x91C5},{0x61EB, 0x91C6},{0x61EC, 0x91C7},
- {0x61ED, 0x91C8},{0x61EE, 0x91C9},{0x61EF, 0x91CA},{0x61F0, 0x91CB},{0x61F1, 0x91CC},{0x61F2, 0x91CD},{0x61F3, 0x91CE},{0x61F4, 0x91CF},
- {0x61F5, 0xE3C2},{0x61F6, 0x91D0},{0x61F7, 0x91D1},{0x61F8, 0x91D2},{0x61F9, 0x91D3},{0x61FA, 0x91D4},{0x61FB, 0x91D5},{0x61FC, 0x91D6},
- {0x61FD, 0x91D7},{0x61FE, 0x91D8},{0x61FF, 0xDCB2},{0x6200, 0x91D9},{0x6201, 0x91DA},{0x6202, 0x91DB},{0x6203, 0x91DC},{0x6204, 0x91DD},
- {0x6205, 0x91DE},{0x6206, 0xEDB0},{0x6207, 0x91DF},{0x6208, 0xB8EA},{0x6209, 0x91E0},{0x620A, 0xCEEC},{0x620B, 0xEAA7},{0x620C, 0xD0E7},
- {0x620D, 0xCAF9},{0x620E, 0xC8D6},{0x620F, 0xCFB7},{0x6210, 0xB3C9},{0x6211, 0xCED2},{0x6212, 0xBDE4},{0x6213, 0x91E1},{0x6214, 0x91E2},
- {0x6215, 0xE3DE},{0x6216, 0xBBF2},{0x6217, 0xEAA8},{0x6218, 0xD5BD},{0x6219, 0x91E3},{0x621A, 0xC6DD},{0x621B, 0xEAA9},{0x621C, 0x91E4},
- {0x621D, 0x91E5},{0x621E, 0x91E6},{0x621F, 0xEAAA},{0x6220, 0x91E7},{0x6221, 0xEAAC},{0x6222, 0xEAAB},{0x6223, 0x91E8},{0x6224, 0xEAAE},
- {0x6225, 0xEAAD},{0x6226, 0x91E9},{0x6227, 0x91EA},{0x6228, 0x91EB},{0x6229, 0x91EC},{0x622A, 0xBDD8},{0x622B, 0x91ED},{0x622C, 0xEAAF},
- {0x622D, 0x91EE},{0x622E, 0xC2BE},{0x622F, 0x91EF},{0x6230, 0x91F0},{0x6231, 0x91F1},{0x6232, 0x91F2},{0x6233, 0xB4C1},{0x6234, 0xB4F7},
- {0x6235, 0x91F3},{0x6236, 0x91F4},{0x6237, 0xBBA7},{0x6238, 0x91F5},{0x6239, 0x91F6},{0x623A, 0x91F7},{0x623B, 0x91F8},{0x623C, 0x91F9},
- {0x623D, 0xECE6},{0x623E, 0xECE5},{0x623F, 0xB7BF},{0x6240, 0xCBF9},{0x6241, 0xB1E2},{0x6242, 0x91FA},{0x6243, 0xECE7},{0x6244, 0x91FB},
- {0x6245, 0x91FC},{0x6246, 0x91FD},{0x6247, 0xC9C8},{0x6248, 0xECE8},{0x6249, 0xECE9},{0x624A, 0x91FE},{0x624B, 0xCAD6},{0x624C, 0xDED0},
- {0x624D, 0xB2C5},{0x624E, 0xD4FA},{0x624F, 0x9240},{0x6250, 0x9241},{0x6251, 0xC6CB},{0x6252, 0xB0C7},{0x6253, 0xB4F2},{0x6254, 0xC8D3},
- {0x6255, 0x9242},{0x6256, 0x9243},{0x6257, 0x9244},{0x6258, 0xCDD0},{0x6259, 0x9245},{0x625A, 0x9246},{0x625B, 0xBFB8},{0x625C, 0x9247},
- {0x625D, 0x9248},{0x625E, 0x9249},{0x625F, 0x924A},{0x6260, 0x924B},{0x6261, 0x924C},{0x6262, 0x924D},{0x6263, 0xBFDB},{0x6264, 0x924E},
- {0x6265, 0x924F},{0x6266, 0xC7A4},{0x6267, 0xD6B4},{0x6268, 0x9250},{0x6269, 0xC0A9},{0x626A, 0xDED1},{0x626B, 0xC9A8},{0x626C, 0xD1EF},
- {0x626D, 0xC5A4},{0x626E, 0xB0E7},{0x626F, 0xB3B6},{0x6270, 0xC8C5},{0x6271, 0x9251},{0x6272, 0x9252},{0x6273, 0xB0E2},{0x6274, 0x9253},
- {0x6275, 0x9254},{0x6276, 0xB7F6},{0x6277, 0x9255},{0x6278, 0x9256},{0x6279, 0xC5FA},{0x627A, 0x9257},{0x627B, 0x9258},{0x627C, 0xB6F3},
- {0x627D, 0x9259},{0x627E, 0xD5D2},{0x627F, 0xB3D0},{0x6280, 0xBCBC},{0x6281, 0x925A},{0x6282, 0x925B},{0x6283, 0x925C},{0x6284, 0xB3AD},
- {0x6285, 0x925D},{0x6286, 0x925E},{0x6287, 0x925F},{0x6288, 0x9260},{0x6289, 0xBEF1},{0x628A, 0xB0D1},{0x628B, 0x9261},{0x628C, 0x9262},
- {0x628D, 0x9263},{0x628E, 0x9264},{0x628F, 0x9265},{0x6290, 0x9266},{0x6291, 0xD2D6},{0x6292, 0xCAE3},{0x6293, 0xD7A5},{0x6294, 0x9267},
- {0x6295, 0xCDB6},{0x6296, 0xB6B6},{0x6297, 0xBFB9},{0x6298, 0xD5DB},{0x6299, 0x9268},{0x629A, 0xB8A7},{0x629B, 0xC5D7},{0x629C, 0x9269},
- {0x629D, 0x926A},{0x629E, 0x926B},{0x629F, 0xDED2},{0x62A0, 0xBFD9},{0x62A1, 0xC2D5},{0x62A2, 0xC7C0},{0x62A3, 0x926C},{0x62A4, 0xBBA4},
- {0x62A5, 0xB1A8},{0x62A6, 0x926D},{0x62A7, 0x926E},{0x62A8, 0xC5EA},{0x62A9, 0x926F},{0x62AA, 0x9270},{0x62AB, 0xC5FB},{0x62AC, 0xCCA7},
- {0x62AD, 0x9271},{0x62AE, 0x9272},{0x62AF, 0x9273},{0x62B0, 0x9274},{0x62B1, 0xB1A7},{0x62B2, 0x9275},{0x62B3, 0x9276},{0x62B4, 0x9277},
- {0x62B5, 0xB5D6},{0x62B6, 0x9278},{0x62B7, 0x9279},{0x62B8, 0x927A},{0x62B9, 0xC4A8},{0x62BA, 0x927B},{0x62BB, 0xDED3},{0x62BC, 0xD1BA},
- {0x62BD, 0xB3E9},{0x62BE, 0x927C},{0x62BF, 0xC3F2},{0x62C0, 0x927D},{0x62C1, 0x927E},{0x62C2, 0xB7F7},{0x62C3, 0x9280},{0x62C4, 0xD6F4},
- {0x62C5, 0xB5A3},{0x62C6, 0xB2F0},{0x62C7, 0xC4B4},{0x62C8, 0xC4E9},{0x62C9, 0xC0AD},{0x62CA, 0xDED4},{0x62CB, 0x9281},{0x62CC, 0xB0E8},
- {0x62CD, 0xC5C4},{0x62CE, 0xC1E0},{0x62CF, 0x9282},{0x62D0, 0xB9D5},{0x62D1, 0x9283},{0x62D2, 0xBEDC},{0x62D3, 0xCDD8},{0x62D4, 0xB0CE},
- {0x62D5, 0x9284},{0x62D6, 0xCDCF},{0x62D7, 0xDED6},{0x62D8, 0xBED0},{0x62D9, 0xD7BE},{0x62DA, 0xDED5},{0x62DB, 0xD5D0},{0x62DC, 0xB0DD},
- {0x62DD, 0x9285},{0x62DE, 0x9286},{0x62DF, 0xC4E2},{0x62E0, 0x9287},{0x62E1, 0x9288},{0x62E2, 0xC2A3},{0x62E3, 0xBCF0},{0x62E4, 0x9289},
- {0x62E5, 0xD3B5},{0x62E6, 0xC0B9},{0x62E7, 0xC5A1},{0x62E8, 0xB2A6},{0x62E9, 0xD4F1},{0x62EA, 0x928A},{0x62EB, 0x928B},{0x62EC, 0xC0A8},
- {0x62ED, 0xCAC3},{0x62EE, 0xDED7},{0x62EF, 0xD5FC},{0x62F0, 0x928C},{0x62F1, 0xB9B0},{0x62F2, 0x928D},{0x62F3, 0xC8AD},{0x62F4, 0xCBA9},
- {0x62F5, 0x928E},{0x62F6, 0xDED9},{0x62F7, 0xBFBD},{0x62F8, 0x928F},{0x62F9, 0x9290},{0x62FA, 0x9291},{0x62FB, 0x9292},{0x62FC, 0xC6B4},
- {0x62FD, 0xD7A7},{0x62FE, 0xCAB0},{0x62FF, 0xC4C3},{0x6300, 0x9293},{0x6301, 0xB3D6},{0x6302, 0xB9D2},{0x6303, 0x9294},{0x6304, 0x9295},
- {0x6305, 0x9296},{0x6306, 0x9297},{0x6307, 0xD6B8},{0x6308, 0xEAFC},{0x6309, 0xB0B4},{0x630A, 0x9298},{0x630B, 0x9299},{0x630C, 0x929A},
- {0x630D, 0x929B},{0x630E, 0xBFE6},{0x630F, 0x929C},{0x6310, 0x929D},{0x6311, 0xCCF4},{0x6312, 0x929E},{0x6313, 0x929F},{0x6314, 0x92A0},
- {0x6315, 0x92A1},{0x6316, 0xCDDA},{0x6317, 0x92A2},{0x6318, 0x92A3},{0x6319, 0x92A4},{0x631A, 0xD6BF},{0x631B, 0xC2CE},{0x631C, 0x92A5},
- {0x631D, 0xCECE},{0x631E, 0xCCA2},{0x631F, 0xD0AE},{0x6320, 0xC4D3},{0x6321, 0xB5B2},{0x6322, 0xDED8},{0x6323, 0xD5F5},{0x6324, 0xBCB7},
- {0x6325, 0xBBD3},{0x6326, 0x92A6},{0x6327, 0x92A7},{0x6328, 0xB0A4},{0x6329, 0x92A8},{0x632A, 0xC5B2},{0x632B, 0xB4EC},{0x632C, 0x92A9},
- {0x632D, 0x92AA},{0x632E, 0x92AB},{0x632F, 0xD5F1},{0x6330, 0x92AC},{0x6331, 0x92AD},{0x6332, 0xEAFD},{0x6333, 0x92AE},{0x6334, 0x92AF},
- {0x6335, 0x92B0},{0x6336, 0x92B1},{0x6337, 0x92B2},{0x6338, 0x92B3},{0x6339, 0xDEDA},{0x633A, 0xCDA6},{0x633B, 0x92B4},{0x633C, 0x92B5},
- {0x633D, 0xCDEC},{0x633E, 0x92B6},{0x633F, 0x92B7},{0x6340, 0x92B8},{0x6341, 0x92B9},{0x6342, 0xCEE6},{0x6343, 0xDEDC},{0x6344, 0x92BA},
- {0x6345, 0xCDB1},{0x6346, 0xC0A6},{0x6347, 0x92BB},{0x6348, 0x92BC},{0x6349, 0xD7BD},{0x634A, 0x92BD},{0x634B, 0xDEDB},{0x634C, 0xB0C6},
- {0x634D, 0xBAB4},{0x634E, 0xC9D3},{0x634F, 0xC4F3},{0x6350, 0xBEE8},{0x6351, 0x92BE},{0x6352, 0x92BF},{0x6353, 0x92C0},{0x6354, 0x92C1},
- {0x6355, 0xB2B6},{0x6356, 0x92C2},{0x6357, 0x92C3},{0x6358, 0x92C4},{0x6359, 0x92C5},{0x635A, 0x92C6},{0x635B, 0x92C7},{0x635C, 0x92C8},
- {0x635D, 0x92C9},{0x635E, 0xC0CC},{0x635F, 0xCBF0},{0x6360, 0x92CA},{0x6361, 0xBCF1},{0x6362, 0xBBBB},{0x6363, 0xB5B7},{0x6364, 0x92CB},
- {0x6365, 0x92CC},{0x6366, 0x92CD},{0x6367, 0xC5F5},{0x6368, 0x92CE},{0x6369, 0xDEE6},{0x636A, 0x92CF},{0x636B, 0x92D0},{0x636C, 0x92D1},
- {0x636D, 0xDEE3},{0x636E, 0xBEDD},{0x636F, 0x92D2},{0x6370, 0x92D3},{0x6371, 0xDEDF},{0x6372, 0x92D4},{0x6373, 0x92D5},{0x6374, 0x92D6},
- {0x6375, 0x92D7},{0x6376, 0xB4B7},{0x6377, 0xBDDD},{0x6378, 0x92D8},{0x6379, 0x92D9},{0x637A, 0xDEE0},{0x637B, 0xC4ED},{0x637C, 0x92DA},
- {0x637D, 0x92DB},{0x637E, 0x92DC},{0x637F, 0x92DD},{0x6380, 0xCFC6},{0x6381, 0x92DE},{0x6382, 0xB5E0},{0x6383, 0x92DF},{0x6384, 0x92E0},
- {0x6385, 0x92E1},{0x6386, 0x92E2},{0x6387, 0xB6DE},{0x6388, 0xCADA},{0x6389, 0xB5F4},{0x638A, 0xDEE5},{0x638B, 0x92E3},{0x638C, 0xD5C6},
- {0x638D, 0x92E4},{0x638E, 0xDEE1},{0x638F, 0xCCCD},{0x6390, 0xC6FE},{0x6391, 0x92E5},{0x6392, 0xC5C5},{0x6393, 0x92E6},{0x6394, 0x92E7},
- {0x6395, 0x92E8},{0x6396, 0xD2B4},{0x6397, 0x92E9},{0x6398, 0xBEF2},{0x6399, 0x92EA},{0x639A, 0x92EB},{0x639B, 0x92EC},{0x639C, 0x92ED},
- {0x639D, 0x92EE},{0x639E, 0x92EF},{0x639F, 0x92F0},{0x63A0, 0xC2D3},{0x63A1, 0x92F1},{0x63A2, 0xCCBD},{0x63A3, 0xB3B8},{0x63A4, 0x92F2},
- {0x63A5, 0xBDD3},{0x63A6, 0x92F3},{0x63A7, 0xBFD8},{0x63A8, 0xCDC6},{0x63A9, 0xD1DA},{0x63AA, 0xB4EB},{0x63AB, 0x92F4},{0x63AC, 0xDEE4},
- {0x63AD, 0xDEDD},{0x63AE, 0xDEE7},{0x63AF, 0x92F5},{0x63B0, 0xEAFE},{0x63B1, 0x92F6},{0x63B2, 0x92F7},{0x63B3, 0xC2B0},{0x63B4, 0xDEE2},
- {0x63B5, 0x92F8},{0x63B6, 0x92F9},{0x63B7, 0xD6C0},{0x63B8, 0xB5A7},{0x63B9, 0x92FA},{0x63BA, 0xB2F4},{0x63BB, 0x92FB},{0x63BC, 0xDEE8},
- {0x63BD, 0x92FC},{0x63BE, 0xDEF2},{0x63BF, 0x92FD},{0x63C0, 0x92FE},{0x63C1, 0x9340},{0x63C2, 0x9341},{0x63C3, 0x9342},{0x63C4, 0xDEED},
- {0x63C5, 0x9343},{0x63C6, 0xDEF1},{0x63C7, 0x9344},{0x63C8, 0x9345},{0x63C9, 0xC8E0},{0x63CA, 0x9346},{0x63CB, 0x9347},{0x63CC, 0x9348},
- {0x63CD, 0xD7E1},{0x63CE, 0xDEEF},{0x63CF, 0xC3E8},{0x63D0, 0xCCE1},{0x63D1, 0x9349},{0x63D2, 0xB2E5},{0x63D3, 0x934A},{0x63D4, 0x934B},
- {0x63D5, 0x934C},{0x63D6, 0xD2BE},{0x63D7, 0x934D},{0x63D8, 0x934E},{0x63D9, 0x934F},{0x63DA, 0x9350},{0x63DB, 0x9351},{0x63DC, 0x9352},
- {0x63DD, 0x9353},{0x63DE, 0xDEEE},{0x63DF, 0x9354},{0x63E0, 0xDEEB},{0x63E1, 0xCED5},{0x63E2, 0x9355},{0x63E3, 0xB4A7},{0x63E4, 0x9356},
- {0x63E5, 0x9357},{0x63E6, 0x9358},{0x63E7, 0x9359},{0x63E8, 0x935A},{0x63E9, 0xBFAB},{0x63EA, 0xBEBE},{0x63EB, 0x935B},{0x63EC, 0x935C},
- {0x63ED, 0xBDD2},{0x63EE, 0x935D},{0x63EF, 0x935E},{0x63F0, 0x935F},{0x63F1, 0x9360},{0x63F2, 0xDEE9},{0x63F3, 0x9361},{0x63F4, 0xD4AE},
- {0x63F5, 0x9362},{0x63F6, 0xDEDE},{0x63F7, 0x9363},{0x63F8, 0xDEEA},{0x63F9, 0x9364},{0x63FA, 0x9365},{0x63FB, 0x9366},{0x63FC, 0x9367},
- {0x63FD, 0xC0BF},{0x63FE, 0x9368},{0x63FF, 0xDEEC},{0x6400, 0xB2F3},{0x6401, 0xB8E9},{0x6402, 0xC2A7},{0x6403, 0x9369},{0x6404, 0x936A},
- {0x6405, 0xBDC1},{0x6406, 0x936B},{0x6407, 0x936C},{0x6408, 0x936D},{0x6409, 0x936E},{0x640A, 0x936F},{0x640B, 0xDEF5},{0x640C, 0xDEF8},
- {0x640D, 0x9370},{0x640E, 0x9371},{0x640F, 0xB2AB},{0x6410, 0xB4A4},{0x6411, 0x9372},{0x6412, 0x9373},{0x6413, 0xB4EA},{0x6414, 0xC9A6},
- {0x6415, 0x9374},{0x6416, 0x9375},{0x6417, 0x9376},{0x6418, 0x9377},{0x6419, 0x9378},{0x641A, 0x9379},{0x641B, 0xDEF6},{0x641C, 0xCBD1},
- {0x641D, 0x937A},{0x641E, 0xB8E3},{0x641F, 0x937B},{0x6420, 0xDEF7},{0x6421, 0xDEFA},{0x6422, 0x937C},{0x6423, 0x937D},{0x6424, 0x937E},
- {0x6425, 0x9380},{0x6426, 0xDEF9},{0x6427, 0x9381},{0x6428, 0x9382},{0x6429, 0x9383},{0x642A, 0xCCC2},{0x642B, 0x9384},{0x642C, 0xB0E1},
- {0x642D, 0xB4EE},{0x642E, 0x9385},{0x642F, 0x9386},{0x6430, 0x9387},{0x6431, 0x9388},{0x6432, 0x9389},{0x6433, 0x938A},{0x6434, 0xE5BA},
- {0x6435, 0x938B},{0x6436, 0x938C},{0x6437, 0x938D},{0x6438, 0x938E},{0x6439, 0x938F},{0x643A, 0xD0AF},{0x643B, 0x9390},{0x643C, 0x9391},
- {0x643D, 0xB2EB},{0x643E, 0x9392},{0x643F, 0xEBA1},{0x6440, 0x9393},{0x6441, 0xDEF4},{0x6442, 0x9394},{0x6443, 0x9395},{0x6444, 0xC9E3},
- {0x6445, 0xDEF3},{0x6446, 0xB0DA},{0x6447, 0xD2A1},{0x6448, 0xB1F7},{0x6449, 0x9396},{0x644A, 0xCCAF},{0x644B, 0x9397},{0x644C, 0x9398},
- {0x644D, 0x9399},{0x644E, 0x939A},{0x644F, 0x939B},{0x6450, 0x939C},{0x6451, 0x939D},{0x6452, 0xDEF0},{0x6453, 0x939E},{0x6454, 0xCBA4},
- {0x6455, 0x939F},{0x6456, 0x93A0},{0x6457, 0x93A1},{0x6458, 0xD5AA},{0x6459, 0x93A2},{0x645A, 0x93A3},{0x645B, 0x93A4},{0x645C, 0x93A5},
- {0x645D, 0x93A6},{0x645E, 0xDEFB},{0x645F, 0x93A7},{0x6460, 0x93A8},{0x6461, 0x93A9},{0x6462, 0x93AA},{0x6463, 0x93AB},{0x6464, 0x93AC},
- {0x6465, 0x93AD},{0x6466, 0x93AE},{0x6467, 0xB4DD},{0x6468, 0x93AF},{0x6469, 0xC4A6},{0x646A, 0x93B0},{0x646B, 0x93B1},{0x646C, 0x93B2},
- {0x646D, 0xDEFD},{0x646E, 0x93B3},{0x646F, 0x93B4},{0x6470, 0x93B5},{0x6471, 0x93B6},{0x6472, 0x93B7},{0x6473, 0x93B8},{0x6474, 0x93B9},
- {0x6475, 0x93BA},{0x6476, 0x93BB},{0x6477, 0x93BC},{0x6478, 0xC3FE},{0x6479, 0xC4A1},{0x647A, 0xDFA1},{0x647B, 0x93BD},{0x647C, 0x93BE},
- {0x647D, 0x93BF},{0x647E, 0x93C0},{0x647F, 0x93C1},{0x6480, 0x93C2},{0x6481, 0x93C3},{0x6482, 0xC1CC},{0x6483, 0x93C4},{0x6484, 0xDEFC},
- {0x6485, 0xBEEF},{0x6486, 0x93C5},{0x6487, 0xC6B2},{0x6488, 0x93C6},{0x6489, 0x93C7},{0x648A, 0x93C8},{0x648B, 0x93C9},{0x648C, 0x93CA},
- {0x648D, 0x93CB},{0x648E, 0x93CC},{0x648F, 0x93CD},{0x6490, 0x93CE},{0x6491, 0xB3C5},{0x6492, 0xC8F6},{0x6493, 0x93CF},{0x6494, 0x93D0},
- {0x6495, 0xCBBA},{0x6496, 0xDEFE},{0x6497, 0x93D1},{0x6498, 0x93D2},{0x6499, 0xDFA4},{0x649A, 0x93D3},{0x649B, 0x93D4},{0x649C, 0x93D5},
- {0x649D, 0x93D6},{0x649E, 0xD7B2},{0x649F, 0x93D7},{0x64A0, 0x93D8},{0x64A1, 0x93D9},{0x64A2, 0x93DA},{0x64A3, 0x93DB},{0x64A4, 0xB3B7},
- {0x64A5, 0x93DC},{0x64A6, 0x93DD},{0x64A7, 0x93DE},{0x64A8, 0x93DF},{0x64A9, 0xC1C3},{0x64AA, 0x93E0},{0x64AB, 0x93E1},{0x64AC, 0xC7CB},
- {0x64AD, 0xB2A5},{0x64AE, 0xB4E9},{0x64AF, 0x93E2},{0x64B0, 0xD7AB},{0x64B1, 0x93E3},{0x64B2, 0x93E4},{0x64B3, 0x93E5},{0x64B4, 0x93E6},
- {0x64B5, 0xC4EC},{0x64B6, 0x93E7},{0x64B7, 0xDFA2},{0x64B8, 0xDFA3},{0x64B9, 0x93E8},{0x64BA, 0xDFA5},{0x64BB, 0x93E9},{0x64BC, 0xBAB3},
- {0x64BD, 0x93EA},{0x64BE, 0x93EB},{0x64BF, 0x93EC},{0x64C0, 0xDFA6},{0x64C1, 0x93ED},{0x64C2, 0xC0DE},{0x64C3, 0x93EE},{0x64C4, 0x93EF},
- {0x64C5, 0xC9C3},{0x64C6, 0x93F0},{0x64C7, 0x93F1},{0x64C8, 0x93F2},{0x64C9, 0x93F3},{0x64CA, 0x93F4},{0x64CB, 0x93F5},{0x64CC, 0x93F6},
- {0x64CD, 0xB2D9},{0x64CE, 0xC7E6},{0x64CF, 0x93F7},{0x64D0, 0xDFA7},{0x64D1, 0x93F8},{0x64D2, 0xC7DC},{0x64D3, 0x93F9},{0x64D4, 0x93FA},
- {0x64D5, 0x93FB},{0x64D6, 0x93FC},{0x64D7, 0xDFA8},{0x64D8, 0xEBA2},{0x64D9, 0x93FD},{0x64DA, 0x93FE},{0x64DB, 0x9440},{0x64DC, 0x9441},
- {0x64DD, 0x9442},{0x64DE, 0xCBD3},{0x64DF, 0x9443},{0x64E0, 0x9444},{0x64E1, 0x9445},{0x64E2, 0xDFAA},{0x64E3, 0x9446},{0x64E4, 0xDFA9},
- {0x64E5, 0x9447},{0x64E6, 0xB2C1},{0x64E7, 0x9448},{0x64E8, 0x9449},{0x64E9, 0x944A},{0x64EA, 0x944B},{0x64EB, 0x944C},{0x64EC, 0x944D},
- {0x64ED, 0x944E},{0x64EE, 0x944F},{0x64EF, 0x9450},{0x64F0, 0x9451},{0x64F1, 0x9452},{0x64F2, 0x9453},{0x64F3, 0x9454},{0x64F4, 0x9455},
- {0x64F5, 0x9456},{0x64F6, 0x9457},{0x64F7, 0x9458},{0x64F8, 0x9459},{0x64F9, 0x945A},{0x64FA, 0x945B},{0x64FB, 0x945C},{0x64FC, 0x945D},
- {0x64FD, 0x945E},{0x64FE, 0x945F},{0x64FF, 0x9460},{0x6500, 0xC5CA},{0x6501, 0x9461},{0x6502, 0x9462},{0x6503, 0x9463},{0x6504, 0x9464},
- {0x6505, 0x9465},{0x6506, 0x9466},{0x6507, 0x9467},{0x6508, 0x9468},{0x6509, 0xDFAB},{0x650A, 0x9469},{0x650B, 0x946A},{0x650C, 0x946B},
- {0x650D, 0x946C},{0x650E, 0x946D},{0x650F, 0x946E},{0x6510, 0x946F},{0x6511, 0x9470},{0x6512, 0xD4DC},{0x6513, 0x9471},{0x6514, 0x9472},
- {0x6515, 0x9473},{0x6516, 0x9474},{0x6517, 0x9475},{0x6518, 0xC8C1},{0x6519, 0x9476},{0x651A, 0x9477},{0x651B, 0x9478},{0x651C, 0x9479},
- {0x651D, 0x947A},{0x651E, 0x947B},{0x651F, 0x947C},{0x6520, 0x947D},{0x6521, 0x947E},{0x6522, 0x9480},{0x6523, 0x9481},{0x6524, 0x9482},
- {0x6525, 0xDFAC},{0x6526, 0x9483},{0x6527, 0x9484},{0x6528, 0x9485},{0x6529, 0x9486},{0x652A, 0x9487},{0x652B, 0xBEF0},{0x652C, 0x9488},
- {0x652D, 0x9489},{0x652E, 0xDFAD},{0x652F, 0xD6A7},{0x6530, 0x948A},{0x6531, 0x948B},{0x6532, 0x948C},{0x6533, 0x948D},{0x6534, 0xEAB7},
- {0x6535, 0xEBB6},{0x6536, 0xCAD5},{0x6537, 0x948E},{0x6538, 0xD8FC},{0x6539, 0xB8C4},{0x653A, 0x948F},{0x653B, 0xB9A5},{0x653C, 0x9490},
- {0x653D, 0x9491},{0x653E, 0xB7C5},{0x653F, 0xD5FE},{0x6540, 0x9492},{0x6541, 0x9493},{0x6542, 0x9494},{0x6543, 0x9495},{0x6544, 0x9496},
- {0x6545, 0xB9CA},{0x6546, 0x9497},{0x6547, 0x9498},{0x6548, 0xD0A7},{0x6549, 0xF4CD},{0x654A, 0x9499},{0x654B, 0x949A},{0x654C, 0xB5D0},
- {0x654D, 0x949B},{0x654E, 0x949C},{0x654F, 0xC3F4},{0x6550, 0x949D},{0x6551, 0xBEC8},{0x6552, 0x949E},{0x6553, 0x949F},{0x6554, 0x94A0},
- {0x6555, 0xEBB7},{0x6556, 0xB0BD},{0x6557, 0x94A1},{0x6558, 0x94A2},{0x6559, 0xBDCC},{0x655A, 0x94A3},{0x655B, 0xC1B2},{0x655C, 0x94A4},
- {0x655D, 0xB1D6},{0x655E, 0xB3A8},{0x655F, 0x94A5},{0x6560, 0x94A6},{0x6561, 0x94A7},{0x6562, 0xB8D2},{0x6563, 0xC9A2},{0x6564, 0x94A8},
- {0x6565, 0x94A9},{0x6566, 0xB6D8},{0x6567, 0x94AA},{0x6568, 0x94AB},{0x6569, 0x94AC},{0x656A, 0x94AD},{0x656B, 0xEBB8},{0x656C, 0xBEB4},
- {0x656D, 0x94AE},{0x656E, 0x94AF},{0x656F, 0x94B0},{0x6570, 0xCAFD},{0x6571, 0x94B1},{0x6572, 0xC7C3},{0x6573, 0x94B2},{0x6574, 0xD5FB},
- {0x6575, 0x94B3},{0x6576, 0x94B4},{0x6577, 0xB7F3},{0x6578, 0x94B5},{0x6579, 0x94B6},{0x657A, 0x94B7},{0x657B, 0x94B8},{0x657C, 0x94B9},
- {0x657D, 0x94BA},{0x657E, 0x94BB},{0x657F, 0x94BC},{0x6580, 0x94BD},{0x6581, 0x94BE},{0x6582, 0x94BF},{0x6583, 0x94C0},{0x6584, 0x94C1},
- {0x6585, 0x94C2},{0x6586, 0x94C3},{0x6587, 0xCEC4},{0x6588, 0x94C4},{0x6589, 0x94C5},{0x658A, 0x94C6},{0x658B, 0xD5AB},{0x658C, 0xB1F3},
- {0x658D, 0x94C7},{0x658E, 0x94C8},{0x658F, 0x94C9},{0x6590, 0xECB3},{0x6591, 0xB0DF},{0x6592, 0x94CA},{0x6593, 0xECB5},{0x6594, 0x94CB},
- {0x6595, 0x94CC},{0x6596, 0x94CD},{0x6597, 0xB6B7},{0x6598, 0x94CE},{0x6599, 0xC1CF},{0x659A, 0x94CF},{0x659B, 0xF5FA},{0x659C, 0xD0B1},
- {0x659D, 0x94D0},{0x659E, 0x94D1},{0x659F, 0xD5E5},{0x65A0, 0x94D2},{0x65A1, 0xCED3},{0x65A2, 0x94D3},{0x65A3, 0x94D4},{0x65A4, 0xBDEF},
- {0x65A5, 0xB3E2},{0x65A6, 0x94D5},{0x65A7, 0xB8AB},{0x65A8, 0x94D6},{0x65A9, 0xD5B6},{0x65AA, 0x94D7},{0x65AB, 0xEDBD},{0x65AC, 0x94D8},
- {0x65AD, 0xB6CF},{0x65AE, 0x94D9},{0x65AF, 0xCBB9},{0x65B0, 0xD0C2},{0x65B1, 0x94DA},{0x65B2, 0x94DB},{0x65B3, 0x94DC},{0x65B4, 0x94DD},
- {0x65B5, 0x94DE},{0x65B6, 0x94DF},{0x65B7, 0x94E0},{0x65B8, 0x94E1},{0x65B9, 0xB7BD},{0x65BA, 0x94E2},{0x65BB, 0x94E3},{0x65BC, 0xECB6},
- {0x65BD, 0xCAA9},{0x65BE, 0x94E4},{0x65BF, 0x94E5},{0x65C0, 0x94E6},{0x65C1, 0xC5D4},{0x65C2, 0x94E7},{0x65C3, 0xECB9},{0x65C4, 0xECB8},
- {0x65C5, 0xC2C3},{0x65C6, 0xECB7},{0x65C7, 0x94E8},{0x65C8, 0x94E9},{0x65C9, 0x94EA},{0x65CA, 0x94EB},{0x65CB, 0xD0FD},{0x65CC, 0xECBA},
- {0x65CD, 0x94EC},{0x65CE, 0xECBB},{0x65CF, 0xD7E5},{0x65D0, 0x94ED},{0x65D1, 0x94EE},{0x65D2, 0xECBC},{0x65D3, 0x94EF},{0x65D4, 0x94F0},
- {0x65D5, 0x94F1},{0x65D6, 0xECBD},{0x65D7, 0xC6EC},{0x65D8, 0x94F2},{0x65D9, 0x94F3},{0x65DA, 0x94F4},{0x65DB, 0x94F5},{0x65DC, 0x94F6},
- {0x65DD, 0x94F7},{0x65DE, 0x94F8},{0x65DF, 0x94F9},{0x65E0, 0xCEDE},{0x65E1, 0x94FA},{0x65E2, 0xBCC8},{0x65E3, 0x94FB},{0x65E4, 0x94FC},
- {0x65E5, 0xC8D5},{0x65E6, 0xB5A9},{0x65E7, 0xBEC9},{0x65E8, 0xD6BC},{0x65E9, 0xD4E7},{0x65EA, 0x94FD},{0x65EB, 0x94FE},{0x65EC, 0xD1AE},
- {0x65ED, 0xD0F1},{0x65EE, 0xEAB8},{0x65EF, 0xEAB9},{0x65F0, 0xEABA},{0x65F1, 0xBAB5},{0x65F2, 0x9540},{0x65F3, 0x9541},{0x65F4, 0x9542},
- {0x65F5, 0x9543},{0x65F6, 0xCAB1},{0x65F7, 0xBFF5},{0x65F8, 0x9544},{0x65F9, 0x9545},{0x65FA, 0xCDFA},{0x65FB, 0x9546},{0x65FC, 0x9547},
- {0x65FD, 0x9548},{0x65FE, 0x9549},{0x65FF, 0x954A},{0x6600, 0xEAC0},{0x6601, 0x954B},{0x6602, 0xB0BA},{0x6603, 0xEABE},{0x6604, 0x954C},
- {0x6605, 0x954D},{0x6606, 0xC0A5},{0x6607, 0x954E},{0x6608, 0x954F},{0x6609, 0x9550},{0x660A, 0xEABB},{0x660B, 0x9551},{0x660C, 0xB2FD},
- {0x660D, 0x9552},{0x660E, 0xC3F7},{0x660F, 0xBBE8},{0x6610, 0x9553},{0x6611, 0x9554},{0x6612, 0x9555},{0x6613, 0xD2D7},{0x6614, 0xCEF4},
- {0x6615, 0xEABF},{0x6616, 0x9556},{0x6617, 0x9557},{0x6618, 0x9558},{0x6619, 0xEABC},{0x661A, 0x9559},{0x661B, 0x955A},{0x661C, 0x955B},
- {0x661D, 0xEAC3},{0x661E, 0x955C},{0x661F, 0xD0C7},{0x6620, 0xD3B3},{0x6621, 0x955D},{0x6622, 0x955E},{0x6623, 0x955F},{0x6624, 0x9560},
- {0x6625, 0xB4BA},{0x6626, 0x9561},{0x6627, 0xC3C1},{0x6628, 0xD7F2},{0x6629, 0x9562},{0x662A, 0x9563},{0x662B, 0x9564},{0x662C, 0x9565},
- {0x662D, 0xD5D1},{0x662E, 0x9566},{0x662F, 0xCAC7},{0x6630, 0x9567},{0x6631, 0xEAC5},{0x6632, 0x9568},{0x6633, 0x9569},{0x6634, 0xEAC4},
- {0x6635, 0xEAC7},{0x6636, 0xEAC6},{0x6637, 0x956A},{0x6638, 0x956B},{0x6639, 0x956C},{0x663A, 0x956D},{0x663B, 0x956E},{0x663C, 0xD6E7},
- {0x663D, 0x956F},{0x663E, 0xCFD4},{0x663F, 0x9570},{0x6640, 0x9571},{0x6641, 0xEACB},{0x6642, 0x9572},{0x6643, 0xBBCE},{0x6644, 0x9573},
- {0x6645, 0x9574},{0x6646, 0x9575},{0x6647, 0x9576},{0x6648, 0x9577},{0x6649, 0x9578},{0x664A, 0x9579},{0x664B, 0xBDFA},{0x664C, 0xC9CE},
- {0x664D, 0x957A},{0x664E, 0x957B},{0x664F, 0xEACC},{0x6650, 0x957C},{0x6651, 0x957D},{0x6652, 0xC9B9},{0x6653, 0xCFFE},{0x6654, 0xEACA},
- {0x6655, 0xD4CE},{0x6656, 0xEACD},{0x6657, 0xEACF},{0x6658, 0x957E},{0x6659, 0x9580},{0x665A, 0xCDED},{0x665B, 0x9581},{0x665C, 0x9582},
- {0x665D, 0x9583},{0x665E, 0x9584},{0x665F, 0xEAC9},{0x6660, 0x9585},{0x6661, 0xEACE},{0x6662, 0x9586},{0x6663, 0x9587},{0x6664, 0xCEEE},
- {0x6665, 0x9588},{0x6666, 0xBBDE},{0x6667, 0x9589},{0x6668, 0xB3BF},{0x6669, 0x958A},{0x666A, 0x958B},{0x666B, 0x958C},{0x666C, 0x958D},
- {0x666D, 0x958E},{0x666E, 0xC6D5},{0x666F, 0xBEB0},{0x6670, 0xCEFA},{0x6671, 0x958F},{0x6672, 0x9590},{0x6673, 0x9591},{0x6674, 0xC7E7},
- {0x6675, 0x9592},{0x6676, 0xBEA7},{0x6677, 0xEAD0},{0x6678, 0x9593},{0x6679, 0x9594},{0x667A, 0xD6C7},{0x667B, 0x9595},{0x667C, 0x9596},
- {0x667D, 0x9597},{0x667E, 0xC1C0},{0x667F, 0x9598},{0x6680, 0x9599},{0x6681, 0x959A},{0x6682, 0xD4DD},{0x6683, 0x959B},{0x6684, 0xEAD1},
- {0x6685, 0x959C},{0x6686, 0x959D},{0x6687, 0xCFBE},{0x6688, 0x959E},{0x6689, 0x959F},{0x668A, 0x95A0},{0x668B, 0x95A1},{0x668C, 0xEAD2},
- {0x668D, 0x95A2},{0x668E, 0x95A3},{0x668F, 0x95A4},{0x6690, 0x95A5},{0x6691, 0xCAEE},{0x6692, 0x95A6},{0x6693, 0x95A7},{0x6694, 0x95A8},
- {0x6695, 0x95A9},{0x6696, 0xC5AF},{0x6697, 0xB0B5},{0x6698, 0x95AA},{0x6699, 0x95AB},{0x669A, 0x95AC},{0x669B, 0x95AD},{0x669C, 0x95AE},
- {0x669D, 0xEAD4},{0x669E, 0x95AF},{0x669F, 0x95B0},{0x66A0, 0x95B1},{0x66A1, 0x95B2},{0x66A2, 0x95B3},{0x66A3, 0x95B4},{0x66A4, 0x95B5},
- {0x66A5, 0x95B6},{0x66A6, 0x95B7},{0x66A7, 0xEAD3},{0x66A8, 0xF4DF},{0x66A9, 0x95B8},{0x66AA, 0x95B9},{0x66AB, 0x95BA},{0x66AC, 0x95BB},
- {0x66AD, 0x95BC},{0x66AE, 0xC4BA},{0x66AF, 0x95BD},{0x66B0, 0x95BE},{0x66B1, 0x95BF},{0x66B2, 0x95C0},{0x66B3, 0x95C1},{0x66B4, 0xB1A9},
- {0x66B5, 0x95C2},{0x66B6, 0x95C3},{0x66B7, 0x95C4},{0x66B8, 0x95C5},{0x66B9, 0xE5DF},{0x66BA, 0x95C6},{0x66BB, 0x95C7},{0x66BC, 0x95C8},
- {0x66BD, 0x95C9},{0x66BE, 0xEAD5},{0x66BF, 0x95CA},{0x66C0, 0x95CB},{0x66C1, 0x95CC},{0x66C2, 0x95CD},{0x66C3, 0x95CE},{0x66C4, 0x95CF},
- {0x66C5, 0x95D0},{0x66C6, 0x95D1},{0x66C7, 0x95D2},{0x66C8, 0x95D3},{0x66C9, 0x95D4},{0x66CA, 0x95D5},{0x66CB, 0x95D6},{0x66CC, 0x95D7},
- {0x66CD, 0x95D8},{0x66CE, 0x95D9},{0x66CF, 0x95DA},{0x66D0, 0x95DB},{0x66D1, 0x95DC},{0x66D2, 0x95DD},{0x66D3, 0x95DE},{0x66D4, 0x95DF},
- {0x66D5, 0x95E0},{0x66D6, 0x95E1},{0x66D7, 0x95E2},{0x66D8, 0x95E3},{0x66D9, 0xCAEF},{0x66DA, 0x95E4},{0x66DB, 0xEAD6},{0x66DC, 0xEAD7},
- {0x66DD, 0xC6D8},{0x66DE, 0x95E5},{0x66DF, 0x95E6},{0x66E0, 0x95E7},{0x66E1, 0x95E8},{0x66E2, 0x95E9},{0x66E3, 0x95EA},{0x66E4, 0x95EB},
- {0x66E5, 0x95EC},{0x66E6, 0xEAD8},{0x66E7, 0x95ED},{0x66E8, 0x95EE},{0x66E9, 0xEAD9},{0x66EA, 0x95EF},{0x66EB, 0x95F0},{0x66EC, 0x95F1},
- {0x66ED, 0x95F2},{0x66EE, 0x95F3},{0x66EF, 0x95F4},{0x66F0, 0xD4BB},{0x66F1, 0x95F5},{0x66F2, 0xC7FA},{0x66F3, 0xD2B7},{0x66F4, 0xB8FC},
- {0x66F5, 0x95F6},{0x66F6, 0x95F7},{0x66F7, 0xEAC2},{0x66F8, 0x95F8},{0x66F9, 0xB2DC},{0x66FA, 0x95F9},{0x66FB, 0x95FA},{0x66FC, 0xC2FC},
- {0x66FD, 0x95FB},{0x66FE, 0xD4F8},{0x66FF, 0xCCE6},{0x6700, 0xD7EE},{0x6701, 0x95FC},{0x6702, 0x95FD},{0x6703, 0x95FE},{0x6704, 0x9640},
- {0x6705, 0x9641},{0x6706, 0x9642},{0x6707, 0x9643},{0x6708, 0xD4C2},{0x6709, 0xD3D0},{0x670A, 0xEBC3},{0x670B, 0xC5F3},{0x670C, 0x9644},
- {0x670D, 0xB7FE},{0x670E, 0x9645},{0x670F, 0x9646},{0x6710, 0xEBD4},{0x6711, 0x9647},{0x6712, 0x9648},{0x6713, 0x9649},{0x6714, 0xCBB7},
- {0x6715, 0xEBDE},{0x6716, 0x964A},{0x6717, 0xC0CA},{0x6718, 0x964B},{0x6719, 0x964C},{0x671A, 0x964D},{0x671B, 0xCDFB},{0x671C, 0x964E},
- {0x671D, 0xB3AF},{0x671E, 0x964F},{0x671F, 0xC6DA},{0x6720, 0x9650},{0x6721, 0x9651},{0x6722, 0x9652},{0x6723, 0x9653},{0x6724, 0x9654},
- {0x6725, 0x9655},{0x6726, 0xEBFC},{0x6727, 0x9656},{0x6728, 0xC4BE},{0x6729, 0x9657},{0x672A, 0xCEB4},{0x672B, 0xC4A9},{0x672C, 0xB1BE},
- {0x672D, 0xD4FD},{0x672E, 0x9658},{0x672F, 0xCAF5},{0x6730, 0x9659},{0x6731, 0xD6EC},{0x6732, 0x965A},{0x6733, 0x965B},{0x6734, 0xC6D3},
- {0x6735, 0xB6E4},{0x6736, 0x965C},{0x6737, 0x965D},{0x6738, 0x965E},{0x6739, 0x965F},{0x673A, 0xBBFA},{0x673B, 0x9660},{0x673C, 0x9661},
- {0x673D, 0xD0E0},{0x673E, 0x9662},{0x673F, 0x9663},{0x6740, 0xC9B1},{0x6741, 0x9664},{0x6742, 0xD4D3},{0x6743, 0xC8A8},{0x6744, 0x9665},
- {0x6745, 0x9666},{0x6746, 0xB8CB},{0x6747, 0x9667},{0x6748, 0xE8BE},{0x6749, 0xC9BC},{0x674A, 0x9668},{0x674B, 0x9669},{0x674C, 0xE8BB},
- {0x674D, 0x966A},{0x674E, 0xC0EE},{0x674F, 0xD0D3},{0x6750, 0xB2C4},{0x6751, 0xB4E5},{0x6752, 0x966B},{0x6753, 0xE8BC},{0x6754, 0x966C},
- {0x6755, 0x966D},{0x6756, 0xD5C8},{0x6757, 0x966E},{0x6758, 0x966F},{0x6759, 0x9670},{0x675A, 0x9671},{0x675B, 0x9672},{0x675C, 0xB6C5},
- {0x675D, 0x9673},{0x675E, 0xE8BD},{0x675F, 0xCAF8},{0x6760, 0xB8DC},{0x6761, 0xCCF5},{0x6762, 0x9674},{0x6763, 0x9675},{0x6764, 0x9676},
- {0x6765, 0xC0B4},{0x6766, 0x9677},{0x6767, 0x9678},{0x6768, 0xD1EE},{0x6769, 0xE8BF},{0x676A, 0xE8C2},{0x676B, 0x9679},{0x676C, 0x967A},
- {0x676D, 0xBABC},{0x676E, 0x967B},{0x676F, 0xB1AD},{0x6770, 0xBDDC},{0x6771, 0x967C},{0x6772, 0xEABD},{0x6773, 0xE8C3},{0x6774, 0x967D},
- {0x6775, 0xE8C6},{0x6776, 0x967E},{0x6777, 0xE8CB},{0x6778, 0x9680},{0x6779, 0x9681},{0x677A, 0x9682},{0x677B, 0x9683},{0x677C, 0xE8CC},
- {0x677D, 0x9684},{0x677E, 0xCBC9},{0x677F, 0xB0E5},{0x6780, 0x9685},{0x6781, 0xBCAB},{0x6782, 0x9686},{0x6783, 0x9687},{0x6784, 0xB9B9},
- {0x6785, 0x9688},{0x6786, 0x9689},{0x6787, 0xE8C1},{0x6788, 0x968A},{0x6789, 0xCDF7},{0x678A, 0x968B},{0x678B, 0xE8CA},{0x678C, 0x968C},
- {0x678D, 0x968D},{0x678E, 0x968E},{0x678F, 0x968F},{0x6790, 0xCEF6},{0x6791, 0x9690},{0x6792, 0x9691},{0x6793, 0x9692},{0x6794, 0x9693},
- {0x6795, 0xD5ED},{0x6796, 0x9694},{0x6797, 0xC1D6},{0x6798, 0xE8C4},{0x6799, 0x9695},{0x679A, 0xC3B6},{0x679B, 0x9696},{0x679C, 0xB9FB},
- {0x679D, 0xD6A6},{0x679E, 0xE8C8},{0x679F, 0x9697},{0x67A0, 0x9698},{0x67A1, 0x9699},{0x67A2, 0xCAE0},{0x67A3, 0xD4E6},{0x67A4, 0x969A},
- {0x67A5, 0xE8C0},{0x67A6, 0x969B},{0x67A7, 0xE8C5},{0x67A8, 0xE8C7},{0x67A9, 0x969C},{0x67AA, 0xC7B9},{0x67AB, 0xB7E3},{0x67AC, 0x969D},
- {0x67AD, 0xE8C9},{0x67AE, 0x969E},{0x67AF, 0xBFDD},{0x67B0, 0xE8D2},{0x67B1, 0x969F},{0x67B2, 0x96A0},{0x67B3, 0xE8D7},{0x67B4, 0x96A1},
- {0x67B5, 0xE8D5},{0x67B6, 0xBCDC},{0x67B7, 0xBCCF},{0x67B8, 0xE8DB},{0x67B9, 0x96A2},{0x67BA, 0x96A3},{0x67BB, 0x96A4},{0x67BC, 0x96A5},
- {0x67BD, 0x96A6},{0x67BE, 0x96A7},{0x67BF, 0x96A8},{0x67C0, 0x96A9},{0x67C1, 0xE8DE},{0x67C2, 0x96AA},{0x67C3, 0xE8DA},{0x67C4, 0xB1FA},
- {0x67C5, 0x96AB},{0x67C6, 0x96AC},{0x67C7, 0x96AD},{0x67C8, 0x96AE},{0x67C9, 0x96AF},{0x67CA, 0x96B0},{0x67CB, 0x96B1},{0x67CC, 0x96B2},
- {0x67CD, 0x96B3},{0x67CE, 0x96B4},{0x67CF, 0xB0D8},{0x67D0, 0xC4B3},{0x67D1, 0xB8CC},{0x67D2, 0xC6E2},{0x67D3, 0xC8BE},{0x67D4, 0xC8E1},
- {0x67D5, 0x96B5},{0x67D6, 0x96B6},{0x67D7, 0x96B7},{0x67D8, 0xE8CF},{0x67D9, 0xE8D4},{0x67DA, 0xE8D6},{0x67DB, 0x96B8},{0x67DC, 0xB9F1},
- {0x67DD, 0xE8D8},{0x67DE, 0xD7F5},{0x67DF, 0x96B9},{0x67E0, 0xC4FB},{0x67E1, 0x96BA},{0x67E2, 0xE8DC},{0x67E3, 0x96BB},{0x67E4, 0x96BC},
- {0x67E5, 0xB2E9},{0x67E6, 0x96BD},{0x67E7, 0x96BE},{0x67E8, 0x96BF},{0x67E9, 0xE8D1},{0x67EA, 0x96C0},{0x67EB, 0x96C1},{0x67EC, 0xBCED},
- {0x67ED, 0x96C2},{0x67EE, 0x96C3},{0x67EF, 0xBFC2},{0x67F0, 0xE8CD},{0x67F1, 0xD6F9},{0x67F2, 0x96C4},{0x67F3, 0xC1F8},{0x67F4, 0xB2F1},
- {0x67F5, 0x96C5},{0x67F6, 0x96C6},{0x67F7, 0x96C7},{0x67F8, 0x96C8},{0x67F9, 0x96C9},{0x67FA, 0x96CA},{0x67FB, 0x96CB},{0x67FC, 0x96CC},
- {0x67FD, 0xE8DF},{0x67FE, 0x96CD},{0x67FF, 0xCAC1},{0x6800, 0xE8D9},{0x6801, 0x96CE},{0x6802, 0x96CF},{0x6803, 0x96D0},{0x6804, 0x96D1},
- {0x6805, 0xD5A4},{0x6806, 0x96D2},{0x6807, 0xB1EA},{0x6808, 0xD5BB},{0x6809, 0xE8CE},{0x680A, 0xE8D0},{0x680B, 0xB6B0},{0x680C, 0xE8D3},
- {0x680D, 0x96D3},{0x680E, 0xE8DD},{0x680F, 0xC0B8},{0x6810, 0x96D4},{0x6811, 0xCAF7},{0x6812, 0x96D5},{0x6813, 0xCBA8},{0x6814, 0x96D6},
- {0x6815, 0x96D7},{0x6816, 0xC6DC},{0x6817, 0xC0F5},{0x6818, 0x96D8},{0x6819, 0x96D9},{0x681A, 0x96DA},{0x681B, 0x96DB},{0x681C, 0x96DC},
- {0x681D, 0xE8E9},{0x681E, 0x96DD},{0x681F, 0x96DE},{0x6820, 0x96DF},{0x6821, 0xD0A3},{0x6822, 0x96E0},{0x6823, 0x96E1},{0x6824, 0x96E2},
- {0x6825, 0x96E3},{0x6826, 0x96E4},{0x6827, 0x96E5},{0x6828, 0x96E6},{0x6829, 0xE8F2},{0x682A, 0xD6EA},{0x682B, 0x96E7},{0x682C, 0x96E8},
- {0x682D, 0x96E9},{0x682E, 0x96EA},{0x682F, 0x96EB},{0x6830, 0x96EC},{0x6831, 0x96ED},{0x6832, 0xE8E0},{0x6833, 0xE8E1},{0x6834, 0x96EE},
- {0x6835, 0x96EF},{0x6836, 0x96F0},{0x6837, 0xD1F9},{0x6838, 0xBACB},{0x6839, 0xB8F9},{0x683A, 0x96F1},{0x683B, 0x96F2},{0x683C, 0xB8F1},
- {0x683D, 0xD4D4},{0x683E, 0xE8EF},{0x683F, 0x96F3},{0x6840, 0xE8EE},{0x6841, 0xE8EC},{0x6842, 0xB9F0},{0x6843, 0xCCD2},{0x6844, 0xE8E6},
- {0x6845, 0xCEA6},{0x6846, 0xBFF2},{0x6847, 0x96F4},{0x6848, 0xB0B8},{0x6849, 0xE8F1},{0x684A, 0xE8F0},{0x684B, 0x96F5},{0x684C, 0xD7C0},
- {0x684D, 0x96F6},{0x684E, 0xE8E4},{0x684F, 0x96F7},{0x6850, 0xCDA9},{0x6851, 0xC9A3},{0x6852, 0x96F8},{0x6853, 0xBBB8},{0x6854, 0xBDDB},
- {0x6855, 0xE8EA},{0x6856, 0x96F9},{0x6857, 0x96FA},{0x6858, 0x96FB},{0x6859, 0x96FC},{0x685A, 0x96FD},{0x685B, 0x96FE},{0x685C, 0x9740},
- {0x685D, 0x9741},{0x685E, 0x9742},{0x685F, 0x9743},{0x6860, 0xE8E2},{0x6861, 0xE8E3},{0x6862, 0xE8E5},{0x6863, 0xB5B5},{0x6864, 0xE8E7},
- {0x6865, 0xC7C5},{0x6866, 0xE8EB},{0x6867, 0xE8ED},{0x6868, 0xBDB0},{0x6869, 0xD7AE},{0x686A, 0x9744},{0x686B, 0xE8F8},{0x686C, 0x9745},
- {0x686D, 0x9746},{0x686E, 0x9747},{0x686F, 0x9748},{0x6870, 0x9749},{0x6871, 0x974A},{0x6872, 0x974B},{0x6873, 0x974C},{0x6874, 0xE8F5},
- {0x6875, 0x974D},{0x6876, 0xCDB0},{0x6877, 0xE8F6},{0x6878, 0x974E},{0x6879, 0x974F},{0x687A, 0x9750},{0x687B, 0x9751},{0x687C, 0x9752},
- {0x687D, 0x9753},{0x687E, 0x9754},{0x687F, 0x9755},{0x6880, 0x9756},{0x6881, 0xC1BA},{0x6882, 0x9757},{0x6883, 0xE8E8},{0x6884, 0x9758},
- {0x6885, 0xC3B7},{0x6886, 0xB0F0},{0x6887, 0x9759},{0x6888, 0x975A},{0x6889, 0x975B},{0x688A, 0x975C},{0x688B, 0x975D},{0x688C, 0x975E},
- {0x688D, 0x975F},{0x688E, 0x9760},{0x688F, 0xE8F4},{0x6890, 0x9761},{0x6891, 0x9762},{0x6892, 0x9763},{0x6893, 0xE8F7},{0x6894, 0x9764},
- {0x6895, 0x9765},{0x6896, 0x9766},{0x6897, 0xB9A3},{0x6898, 0x9767},{0x6899, 0x9768},{0x689A, 0x9769},{0x689B, 0x976A},{0x689C, 0x976B},
- {0x689D, 0x976C},{0x689E, 0x976D},{0x689F, 0x976E},{0x68A0, 0x976F},{0x68A1, 0x9770},{0x68A2, 0xC9D2},{0x68A3, 0x9771},{0x68A4, 0x9772},
- {0x68A5, 0x9773},{0x68A6, 0xC3CE},{0x68A7, 0xCEE0},{0x68A8, 0xC0E6},{0x68A9, 0x9774},{0x68AA, 0x9775},{0x68AB, 0x9776},{0x68AC, 0x9777},
- {0x68AD, 0xCBF3},{0x68AE, 0x9778},{0x68AF, 0xCCDD},{0x68B0, 0xD0B5},{0x68B1, 0x9779},{0x68B2, 0x977A},{0x68B3, 0xCAE1},{0x68B4, 0x977B},
- {0x68B5, 0xE8F3},{0x68B6, 0x977C},{0x68B7, 0x977D},{0x68B8, 0x977E},{0x68B9, 0x9780},{0x68BA, 0x9781},{0x68BB, 0x9782},{0x68BC, 0x9783},
- {0x68BD, 0x9784},{0x68BE, 0x9785},{0x68BF, 0x9786},{0x68C0, 0xBCEC},{0x68C1, 0x9787},{0x68C2, 0xE8F9},{0x68C3, 0x9788},{0x68C4, 0x9789},
- {0x68C5, 0x978A},{0x68C6, 0x978B},{0x68C7, 0x978C},{0x68C8, 0x978D},{0x68C9, 0xC3DE},{0x68CA, 0x978E},{0x68CB, 0xC6E5},{0x68CC, 0x978F},
- {0x68CD, 0xB9F7},{0x68CE, 0x9790},{0x68CF, 0x9791},{0x68D0, 0x9792},{0x68D1, 0x9793},{0x68D2, 0xB0F4},{0x68D3, 0x9794},{0x68D4, 0x9795},
- {0x68D5, 0xD7D8},{0x68D6, 0x9796},{0x68D7, 0x9797},{0x68D8, 0xBCAC},{0x68D9, 0x9798},{0x68DA, 0xC5EF},{0x68DB, 0x9799},{0x68DC, 0x979A},
- {0x68DD, 0x979B},{0x68DE, 0x979C},{0x68DF, 0x979D},{0x68E0, 0xCCC4},{0x68E1, 0x979E},{0x68E2, 0x979F},{0x68E3, 0xE9A6},{0x68E4, 0x97A0},
- {0x68E5, 0x97A1},{0x68E6, 0x97A2},{0x68E7, 0x97A3},{0x68E8, 0x97A4},{0x68E9, 0x97A5},{0x68EA, 0x97A6},{0x68EB, 0x97A7},{0x68EC, 0x97A8},
- {0x68ED, 0x97A9},{0x68EE, 0xC9AD},{0x68EF, 0x97AA},{0x68F0, 0xE9A2},{0x68F1, 0xC0E2},{0x68F2, 0x97AB},{0x68F3, 0x97AC},{0x68F4, 0x97AD},
- {0x68F5, 0xBFC3},{0x68F6, 0x97AE},{0x68F7, 0x97AF},{0x68F8, 0x97B0},{0x68F9, 0xE8FE},{0x68FA, 0xB9D7},{0x68FB, 0x97B1},{0x68FC, 0xE8FB},
- {0x68FD, 0x97B2},{0x68FE, 0x97B3},{0x68FF, 0x97B4},{0x6900, 0x97B5},{0x6901, 0xE9A4},{0x6902, 0x97B6},{0x6903, 0x97B7},{0x6904, 0x97B8},
- {0x6905, 0xD2CE},{0x6906, 0x97B9},{0x6907, 0x97BA},{0x6908, 0x97BB},{0x6909, 0x97BC},{0x690A, 0x97BD},{0x690B, 0xE9A3},{0x690C, 0x97BE},
- {0x690D, 0xD6B2},{0x690E, 0xD7B5},{0x690F, 0x97BF},{0x6910, 0xE9A7},{0x6911, 0x97C0},{0x6912, 0xBDB7},{0x6913, 0x97C1},{0x6914, 0x97C2},
- {0x6915, 0x97C3},{0x6916, 0x97C4},{0x6917, 0x97C5},{0x6918, 0x97C6},{0x6919, 0x97C7},{0x691A, 0x97C8},{0x691B, 0x97C9},{0x691C, 0x97CA},
- {0x691D, 0x97CB},{0x691E, 0x97CC},{0x691F, 0xE8FC},{0x6920, 0xE8FD},{0x6921, 0x97CD},{0x6922, 0x97CE},{0x6923, 0x97CF},{0x6924, 0xE9A1},
- {0x6925, 0x97D0},{0x6926, 0x97D1},{0x6927, 0x97D2},{0x6928, 0x97D3},{0x6929, 0x97D4},{0x692A, 0x97D5},{0x692B, 0x97D6},{0x692C, 0x97D7},
- {0x692D, 0xCDD6},{0x692E, 0x97D8},{0x692F, 0x97D9},{0x6930, 0xD2AC},{0x6931, 0x97DA},{0x6932, 0x97DB},{0x6933, 0x97DC},{0x6934, 0xE9B2},
- {0x6935, 0x97DD},{0x6936, 0x97DE},{0x6937, 0x97DF},{0x6938, 0x97E0},{0x6939, 0xE9A9},{0x693A, 0x97E1},{0x693B, 0x97E2},{0x693C, 0x97E3},
- {0x693D, 0xB4AA},{0x693E, 0x97E4},{0x693F, 0xB4BB},{0x6940, 0x97E5},{0x6941, 0x97E6},{0x6942, 0xE9AB},{0x6943, 0x97E7},{0x6944, 0x97E8},
- {0x6945, 0x97E9},{0x6946, 0x97EA},{0x6947, 0x97EB},{0x6948, 0x97EC},{0x6949, 0x97ED},{0x694A, 0x97EE},{0x694B, 0x97EF},{0x694C, 0x97F0},
- {0x694D, 0x97F1},{0x694E, 0x97F2},{0x694F, 0x97F3},{0x6950, 0x97F4},{0x6951, 0x97F5},{0x6952, 0x97F6},{0x6953, 0x97F7},{0x6954, 0xD0A8},
- {0x6955, 0x97F8},{0x6956, 0x97F9},{0x6957, 0xE9A5},{0x6958, 0x97FA},{0x6959, 0x97FB},{0x695A, 0xB3FE},{0x695B, 0x97FC},{0x695C, 0x97FD},
- {0x695D, 0xE9AC},{0x695E, 0xC0E3},{0x695F, 0x97FE},{0x6960, 0xE9AA},{0x6961, 0x9840},{0x6962, 0x9841},{0x6963, 0xE9B9},{0x6964, 0x9842},
- {0x6965, 0x9843},{0x6966, 0xE9B8},{0x6967, 0x9844},{0x6968, 0x9845},{0x6969, 0x9846},{0x696A, 0x9847},{0x696B, 0xE9AE},{0x696C, 0x9848},
- {0x696D, 0x9849},{0x696E, 0xE8FA},{0x696F, 0x984A},{0x6970, 0x984B},{0x6971, 0xE9A8},{0x6972, 0x984C},{0x6973, 0x984D},{0x6974, 0x984E},
- {0x6975, 0x984F},{0x6976, 0x9850},{0x6977, 0xBFAC},{0x6978, 0xE9B1},{0x6979, 0xE9BA},{0x697A, 0x9851},{0x697B, 0x9852},{0x697C, 0xC2A5},
- {0x697D, 0x9853},{0x697E, 0x9854},{0x697F, 0x9855},{0x6980, 0xE9AF},{0x6981, 0x9856},{0x6982, 0xB8C5},{0x6983, 0x9857},{0x6984, 0xE9AD},
- {0x6985, 0x9858},{0x6986, 0xD3DC},{0x6987, 0xE9B4},{0x6988, 0xE9B5},{0x6989, 0xE9B7},{0x698A, 0x9859},{0x698B, 0x985A},{0x698C, 0x985B},
- {0x698D, 0xE9C7},{0x698E, 0x985C},{0x698F, 0x985D},{0x6990, 0x985E},{0x6991, 0x985F},{0x6992, 0x9860},{0x6993, 0x9861},{0x6994, 0xC0C6},
- {0x6995, 0xE9C5},{0x6996, 0x9862},{0x6997, 0x9863},{0x6998, 0xE9B0},{0x6999, 0x9864},{0x699A, 0x9865},{0x699B, 0xE9BB},{0x699C, 0xB0F1},
- {0x699D, 0x9866},{0x699E, 0x9867},{0x699F, 0x9868},{0x69A0, 0x9869},{0x69A1, 0x986A},{0x69A2, 0x986B},{0x69A3, 0x986C},{0x69A4, 0x986D},
- {0x69A5, 0x986E},{0x69A6, 0x986F},{0x69A7, 0xE9BC},{0x69A8, 0xD5A5},{0x69A9, 0x9870},{0x69AA, 0x9871},{0x69AB, 0xE9BE},{0x69AC, 0x9872},
- {0x69AD, 0xE9BF},{0x69AE, 0x9873},{0x69AF, 0x9874},{0x69B0, 0x9875},{0x69B1, 0xE9C1},{0x69B2, 0x9876},{0x69B3, 0x9877},{0x69B4, 0xC1F1},
- {0x69B5, 0x9878},{0x69B6, 0x9879},{0x69B7, 0xC8B6},{0x69B8, 0x987A},{0x69B9, 0x987B},{0x69BA, 0x987C},{0x69BB, 0xE9BD},{0x69BC, 0x987D},
- {0x69BD, 0x987E},{0x69BE, 0x9880},{0x69BF, 0x9881},{0x69C0, 0x9882},{0x69C1, 0xE9C2},{0x69C2, 0x9883},{0x69C3, 0x9884},{0x69C4, 0x9885},
- {0x69C5, 0x9886},{0x69C6, 0x9887},{0x69C7, 0x9888},{0x69C8, 0x9889},{0x69C9, 0x988A},{0x69CA, 0xE9C3},{0x69CB, 0x988B},{0x69CC, 0xE9B3},
- {0x69CD, 0x988C},{0x69CE, 0xE9B6},{0x69CF, 0x988D},{0x69D0, 0xBBB1},{0x69D1, 0x988E},{0x69D2, 0x988F},{0x69D3, 0x9890},{0x69D4, 0xE9C0},
- {0x69D5, 0x9891},{0x69D6, 0x9892},{0x69D7, 0x9893},{0x69D8, 0x9894},{0x69D9, 0x9895},{0x69DA, 0x9896},{0x69DB, 0xBCF7},{0x69DC, 0x9897},
- {0x69DD, 0x9898},{0x69DE, 0x9899},{0x69DF, 0xE9C4},{0x69E0, 0xE9C6},{0x69E1, 0x989A},{0x69E2, 0x989B},{0x69E3, 0x989C},{0x69E4, 0x989D},
- {0x69E5, 0x989E},{0x69E6, 0x989F},{0x69E7, 0x98A0},{0x69E8, 0x98A1},{0x69E9, 0x98A2},{0x69EA, 0x98A3},{0x69EB, 0x98A4},{0x69EC, 0x98A5},
- {0x69ED, 0xE9CA},{0x69EE, 0x98A6},{0x69EF, 0x98A7},{0x69F0, 0x98A8},{0x69F1, 0x98A9},{0x69F2, 0xE9CE},{0x69F3, 0x98AA},{0x69F4, 0x98AB},
- {0x69F5, 0x98AC},{0x69F6, 0x98AD},{0x69F7, 0x98AE},{0x69F8, 0x98AF},{0x69F9, 0x98B0},{0x69FA, 0x98B1},{0x69FB, 0x98B2},{0x69FC, 0x98B3},
- {0x69FD, 0xB2DB},{0x69FE, 0x98B4},{0x69FF, 0xE9C8},{0x6A00, 0x98B5},{0x6A01, 0x98B6},{0x6A02, 0x98B7},{0x6A03, 0x98B8},{0x6A04, 0x98B9},
- {0x6A05, 0x98BA},{0x6A06, 0x98BB},{0x6A07, 0x98BC},{0x6A08, 0x98BD},{0x6A09, 0x98BE},{0x6A0A, 0xB7AE},{0x6A0B, 0x98BF},{0x6A0C, 0x98C0},
- {0x6A0D, 0x98C1},{0x6A0E, 0x98C2},{0x6A0F, 0x98C3},{0x6A10, 0x98C4},{0x6A11, 0x98C5},{0x6A12, 0x98C6},{0x6A13, 0x98C7},{0x6A14, 0x98C8},
- {0x6A15, 0x98C9},{0x6A16, 0x98CA},{0x6A17, 0xE9CB},{0x6A18, 0xE9CC},{0x6A19, 0x98CB},{0x6A1A, 0x98CC},{0x6A1B, 0x98CD},{0x6A1C, 0x98CE},
- {0x6A1D, 0x98CF},{0x6A1E, 0x98D0},{0x6A1F, 0xD5C1},{0x6A20, 0x98D1},{0x6A21, 0xC4A3},{0x6A22, 0x98D2},{0x6A23, 0x98D3},{0x6A24, 0x98D4},
- {0x6A25, 0x98D5},{0x6A26, 0x98D6},{0x6A27, 0x98D7},{0x6A28, 0xE9D8},{0x6A29, 0x98D8},{0x6A2A, 0xBAE1},{0x6A2B, 0x98D9},{0x6A2C, 0x98DA},
- {0x6A2D, 0x98DB},{0x6A2E, 0x98DC},{0x6A2F, 0xE9C9},{0x6A30, 0x98DD},{0x6A31, 0xD3A3},{0x6A32, 0x98DE},{0x6A33, 0x98DF},{0x6A34, 0x98E0},
- {0x6A35, 0xE9D4},{0x6A36, 0x98E1},{0x6A37, 0x98E2},{0x6A38, 0x98E3},{0x6A39, 0x98E4},{0x6A3A, 0x98E5},{0x6A3B, 0x98E6},{0x6A3C, 0x98E7},
- {0x6A3D, 0xE9D7},{0x6A3E, 0xE9D0},{0x6A3F, 0x98E8},{0x6A40, 0x98E9},{0x6A41, 0x98EA},{0x6A42, 0x98EB},{0x6A43, 0x98EC},{0x6A44, 0xE9CF},
- {0x6A45, 0x98ED},{0x6A46, 0x98EE},{0x6A47, 0xC7C1},{0x6A48, 0x98EF},{0x6A49, 0x98F0},{0x6A4A, 0x98F1},{0x6A4B, 0x98F2},{0x6A4C, 0x98F3},
- {0x6A4D, 0x98F4},{0x6A4E, 0x98F5},{0x6A4F, 0x98F6},{0x6A50, 0xE9D2},{0x6A51, 0x98F7},{0x6A52, 0x98F8},{0x6A53, 0x98F9},{0x6A54, 0x98FA},
- {0x6A55, 0x98FB},{0x6A56, 0x98FC},{0x6A57, 0x98FD},{0x6A58, 0xE9D9},{0x6A59, 0xB3C8},{0x6A5A, 0x98FE},{0x6A5B, 0xE9D3},{0x6A5C, 0x9940},
- {0x6A5D, 0x9941},{0x6A5E, 0x9942},{0x6A5F, 0x9943},{0x6A60, 0x9944},{0x6A61, 0xCFF0},{0x6A62, 0x9945},{0x6A63, 0x9946},{0x6A64, 0x9947},
- {0x6A65, 0xE9CD},{0x6A66, 0x9948},{0x6A67, 0x9949},{0x6A68, 0x994A},{0x6A69, 0x994B},{0x6A6A, 0x994C},{0x6A6B, 0x994D},{0x6A6C, 0x994E},
- {0x6A6D, 0x994F},{0x6A6E, 0x9950},{0x6A6F, 0x9951},{0x6A70, 0x9952},{0x6A71, 0xB3F7},{0x6A72, 0x9953},{0x6A73, 0x9954},{0x6A74, 0x9955},
- {0x6A75, 0x9956},{0x6A76, 0x9957},{0x6A77, 0x9958},{0x6A78, 0x9959},{0x6A79, 0xE9D6},{0x6A7A, 0x995A},{0x6A7B, 0x995B},{0x6A7C, 0xE9DA},
- {0x6A7D, 0x995C},{0x6A7E, 0x995D},{0x6A7F, 0x995E},{0x6A80, 0xCCB4},{0x6A81, 0x995F},{0x6A82, 0x9960},{0x6A83, 0x9961},{0x6A84, 0xCFAD},
- {0x6A85, 0x9962},{0x6A86, 0x9963},{0x6A87, 0x9964},{0x6A88, 0x9965},{0x6A89, 0x9966},{0x6A8A, 0x9967},{0x6A8B, 0x9968},{0x6A8C, 0x9969},
- {0x6A8D, 0x996A},{0x6A8E, 0xE9D5},{0x6A8F, 0x996B},{0x6A90, 0xE9DC},{0x6A91, 0xE9DB},{0x6A92, 0x996C},{0x6A93, 0x996D},{0x6A94, 0x996E},
- {0x6A95, 0x996F},{0x6A96, 0x9970},{0x6A97, 0xE9DE},{0x6A98, 0x9971},{0x6A99, 0x9972},{0x6A9A, 0x9973},{0x6A9B, 0x9974},{0x6A9C, 0x9975},
- {0x6A9D, 0x9976},{0x6A9E, 0x9977},{0x6A9F, 0x9978},{0x6AA0, 0xE9D1},{0x6AA1, 0x9979},{0x6AA2, 0x997A},{0x6AA3, 0x997B},{0x6AA4, 0x997C},
- {0x6AA5, 0x997D},{0x6AA6, 0x997E},{0x6AA7, 0x9980},{0x6AA8, 0x9981},{0x6AA9, 0xE9DD},{0x6AAA, 0x9982},{0x6AAB, 0xE9DF},{0x6AAC, 0xC3CA},
- {0x6AAD, 0x9983},{0x6AAE, 0x9984},{0x6AAF, 0x9985},{0x6AB0, 0x9986},{0x6AB1, 0x9987},{0x6AB2, 0x9988},{0x6AB3, 0x9989},{0x6AB4, 0x998A},
- {0x6AB5, 0x998B},{0x6AB6, 0x998C},{0x6AB7, 0x998D},{0x6AB8, 0x998E},{0x6AB9, 0x998F},{0x6ABA, 0x9990},{0x6ABB, 0x9991},{0x6ABC, 0x9992},
- {0x6ABD, 0x9993},{0x6ABE, 0x9994},{0x6ABF, 0x9995},{0x6AC0, 0x9996},{0x6AC1, 0x9997},{0x6AC2, 0x9998},{0x6AC3, 0x9999},{0x6AC4, 0x999A},
- {0x6AC5, 0x999B},{0x6AC6, 0x999C},{0x6AC7, 0x999D},{0x6AC8, 0x999E},{0x6AC9, 0x999F},{0x6ACA, 0x99A0},{0x6ACB, 0x99A1},{0x6ACC, 0x99A2},
- {0x6ACD, 0x99A3},{0x6ACE, 0x99A4},{0x6ACF, 0x99A5},{0x6AD0, 0x99A6},{0x6AD1, 0x99A7},{0x6AD2, 0x99A8},{0x6AD3, 0x99A9},{0x6AD4, 0x99AA},
- {0x6AD5, 0x99AB},{0x6AD6, 0x99AC},{0x6AD7, 0x99AD},{0x6AD8, 0x99AE},{0x6AD9, 0x99AF},{0x6ADA, 0x99B0},{0x6ADB, 0x99B1},{0x6ADC, 0x99B2},
- {0x6ADD, 0x99B3},{0x6ADE, 0x99B4},{0x6ADF, 0x99B5},{0x6AE0, 0x99B6},{0x6AE1, 0x99B7},{0x6AE2, 0x99B8},{0x6AE3, 0x99B9},{0x6AE4, 0x99BA},
- {0x6AE5, 0x99BB},{0x6AE6, 0x99BC},{0x6AE7, 0x99BD},{0x6AE8, 0x99BE},{0x6AE9, 0x99BF},{0x6AEA, 0x99C0},{0x6AEB, 0x99C1},{0x6AEC, 0x99C2},
- {0x6AED, 0x99C3},{0x6AEE, 0x99C4},{0x6AEF, 0x99C5},{0x6AF0, 0x99C6},{0x6AF1, 0x99C7},{0x6AF2, 0x99C8},{0x6AF3, 0x99C9},{0x6AF4, 0x99CA},
- {0x6AF5, 0x99CB},{0x6AF6, 0x99CC},{0x6AF7, 0x99CD},{0x6AF8, 0x99CE},{0x6AF9, 0x99CF},{0x6AFA, 0x99D0},{0x6AFB, 0x99D1},{0x6AFC, 0x99D2},
- {0x6AFD, 0x99D3},{0x6AFE, 0x99D4},{0x6AFF, 0x99D5},{0x6B00, 0x99D6},{0x6B01, 0x99D7},{0x6B02, 0x99D8},{0x6B03, 0x99D9},{0x6B04, 0x99DA},
- {0x6B05, 0x99DB},{0x6B06, 0x99DC},{0x6B07, 0x99DD},{0x6B08, 0x99DE},{0x6B09, 0x99DF},{0x6B0A, 0x99E0},{0x6B0B, 0x99E1},{0x6B0C, 0x99E2},
- {0x6B0D, 0x99E3},{0x6B0E, 0x99E4},{0x6B0F, 0x99E5},{0x6B10, 0x99E6},{0x6B11, 0x99E7},{0x6B12, 0x99E8},{0x6B13, 0x99E9},{0x6B14, 0x99EA},
- {0x6B15, 0x99EB},{0x6B16, 0x99EC},{0x6B17, 0x99ED},{0x6B18, 0x99EE},{0x6B19, 0x99EF},{0x6B1A, 0x99F0},{0x6B1B, 0x99F1},{0x6B1C, 0x99F2},
- {0x6B1D, 0x99F3},{0x6B1E, 0x99F4},{0x6B1F, 0x99F5},{0x6B20, 0xC7B7},{0x6B21, 0xB4CE},{0x6B22, 0xBBB6},{0x6B23, 0xD0C0},{0x6B24, 0xECA3},
- {0x6B25, 0x99F6},{0x6B26, 0x99F7},{0x6B27, 0xC5B7},{0x6B28, 0x99F8},{0x6B29, 0x99F9},{0x6B2A, 0x99FA},{0x6B2B, 0x99FB},{0x6B2C, 0x99FC},
- {0x6B2D, 0x99FD},{0x6B2E, 0x99FE},{0x6B2F, 0x9A40},{0x6B30, 0x9A41},{0x6B31, 0x9A42},{0x6B32, 0xD3FB},{0x6B33, 0x9A43},{0x6B34, 0x9A44},
- {0x6B35, 0x9A45},{0x6B36, 0x9A46},{0x6B37, 0xECA4},{0x6B38, 0x9A47},{0x6B39, 0xECA5},{0x6B3A, 0xC6DB},{0x6B3B, 0x9A48},{0x6B3C, 0x9A49},
- {0x6B3D, 0x9A4A},{0x6B3E, 0xBFEE},{0x6B3F, 0x9A4B},{0x6B40, 0x9A4C},{0x6B41, 0x9A4D},{0x6B42, 0x9A4E},{0x6B43, 0xECA6},{0x6B44, 0x9A4F},
- {0x6B45, 0x9A50},{0x6B46, 0xECA7},{0x6B47, 0xD0AA},{0x6B48, 0x9A51},{0x6B49, 0xC7B8},{0x6B4A, 0x9A52},{0x6B4B, 0x9A53},{0x6B4C, 0xB8E8},
- {0x6B4D, 0x9A54},{0x6B4E, 0x9A55},{0x6B4F, 0x9A56},{0x6B50, 0x9A57},{0x6B51, 0x9A58},{0x6B52, 0x9A59},{0x6B53, 0x9A5A},{0x6B54, 0x9A5B},
- {0x6B55, 0x9A5C},{0x6B56, 0x9A5D},{0x6B57, 0x9A5E},{0x6B58, 0x9A5F},{0x6B59, 0xECA8},{0x6B5A, 0x9A60},{0x6B5B, 0x9A61},{0x6B5C, 0x9A62},
- {0x6B5D, 0x9A63},{0x6B5E, 0x9A64},{0x6B5F, 0x9A65},{0x6B60, 0x9A66},{0x6B61, 0x9A67},{0x6B62, 0xD6B9},{0x6B63, 0xD5FD},{0x6B64, 0xB4CB},
- {0x6B65, 0xB2BD},{0x6B66, 0xCEE4},{0x6B67, 0xC6E7},{0x6B68, 0x9A68},{0x6B69, 0x9A69},{0x6B6A, 0xCDE1},{0x6B6B, 0x9A6A},{0x6B6C, 0x9A6B},
- {0x6B6D, 0x9A6C},{0x6B6E, 0x9A6D},{0x6B6F, 0x9A6E},{0x6B70, 0x9A6F},{0x6B71, 0x9A70},{0x6B72, 0x9A71},{0x6B73, 0x9A72},{0x6B74, 0x9A73},
- {0x6B75, 0x9A74},{0x6B76, 0x9A75},{0x6B77, 0x9A76},{0x6B78, 0x9A77},{0x6B79, 0xB4F5},{0x6B7A, 0x9A78},{0x6B7B, 0xCBC0},{0x6B7C, 0xBCDF},
- {0x6B7D, 0x9A79},{0x6B7E, 0x9A7A},{0x6B7F, 0x9A7B},{0x6B80, 0x9A7C},{0x6B81, 0xE9E2},{0x6B82, 0xE9E3},{0x6B83, 0xD1EA},{0x6B84, 0xE9E5},
- {0x6B85, 0x9A7D},{0x6B86, 0xB4F9},{0x6B87, 0xE9E4},{0x6B88, 0x9A7E},{0x6B89, 0xD1B3},{0x6B8A, 0xCAE2},{0x6B8B, 0xB2D0},{0x6B8C, 0x9A80},
- {0x6B8D, 0xE9E8},{0x6B8E, 0x9A81},{0x6B8F, 0x9A82},{0x6B90, 0x9A83},{0x6B91, 0x9A84},{0x6B92, 0xE9E6},{0x6B93, 0xE9E7},{0x6B94, 0x9A85},
- {0x6B95, 0x9A86},{0x6B96, 0xD6B3},{0x6B97, 0x9A87},{0x6B98, 0x9A88},{0x6B99, 0x9A89},{0x6B9A, 0xE9E9},{0x6B9B, 0xE9EA},{0x6B9C, 0x9A8A},
- {0x6B9D, 0x9A8B},{0x6B9E, 0x9A8C},{0x6B9F, 0x9A8D},{0x6BA0, 0x9A8E},{0x6BA1, 0xE9EB},{0x6BA2, 0x9A8F},{0x6BA3, 0x9A90},{0x6BA4, 0x9A91},
- {0x6BA5, 0x9A92},{0x6BA6, 0x9A93},{0x6BA7, 0x9A94},{0x6BA8, 0x9A95},{0x6BA9, 0x9A96},{0x6BAA, 0xE9EC},{0x6BAB, 0x9A97},{0x6BAC, 0x9A98},
- {0x6BAD, 0x9A99},{0x6BAE, 0x9A9A},{0x6BAF, 0x9A9B},{0x6BB0, 0x9A9C},{0x6BB1, 0x9A9D},{0x6BB2, 0x9A9E},{0x6BB3, 0xECAF},{0x6BB4, 0xC5B9},
- {0x6BB5, 0xB6CE},{0x6BB6, 0x9A9F},{0x6BB7, 0xD2F3},{0x6BB8, 0x9AA0},{0x6BB9, 0x9AA1},{0x6BBA, 0x9AA2},{0x6BBB, 0x9AA3},{0x6BBC, 0x9AA4},
- {0x6BBD, 0x9AA5},{0x6BBE, 0x9AA6},{0x6BBF, 0xB5EE},{0x6BC0, 0x9AA7},{0x6BC1, 0xBBD9},{0x6BC2, 0xECB1},{0x6BC3, 0x9AA8},{0x6BC4, 0x9AA9},
- {0x6BC5, 0xD2E3},{0x6BC6, 0x9AAA},{0x6BC7, 0x9AAB},{0x6BC8, 0x9AAC},{0x6BC9, 0x9AAD},{0x6BCA, 0x9AAE},{0x6BCB, 0xCEE3},{0x6BCC, 0x9AAF},
- {0x6BCD, 0xC4B8},{0x6BCE, 0x9AB0},{0x6BCF, 0xC3BF},{0x6BD0, 0x9AB1},{0x6BD1, 0x9AB2},{0x6BD2, 0xB6BE},{0x6BD3, 0xD8B9},{0x6BD4, 0xB1C8},
- {0x6BD5, 0xB1CF},{0x6BD6, 0xB1D1},{0x6BD7, 0xC5FE},{0x6BD8, 0x9AB3},{0x6BD9, 0xB1D0},{0x6BDA, 0x9AB4},{0x6BDB, 0xC3AB},{0x6BDC, 0x9AB5},
- {0x6BDD, 0x9AB6},{0x6BDE, 0x9AB7},{0x6BDF, 0x9AB8},{0x6BE0, 0x9AB9},{0x6BE1, 0xD5B1},{0x6BE2, 0x9ABA},{0x6BE3, 0x9ABB},{0x6BE4, 0x9ABC},
- {0x6BE5, 0x9ABD},{0x6BE6, 0x9ABE},{0x6BE7, 0x9ABF},{0x6BE8, 0x9AC0},{0x6BE9, 0x9AC1},{0x6BEA, 0xEBA4},{0x6BEB, 0xBAC1},{0x6BEC, 0x9AC2},
- {0x6BED, 0x9AC3},{0x6BEE, 0x9AC4},{0x6BEF, 0xCCBA},{0x6BF0, 0x9AC5},{0x6BF1, 0x9AC6},{0x6BF2, 0x9AC7},{0x6BF3, 0xEBA5},{0x6BF4, 0x9AC8},
- {0x6BF5, 0xEBA7},{0x6BF6, 0x9AC9},{0x6BF7, 0x9ACA},{0x6BF8, 0x9ACB},{0x6BF9, 0xEBA8},{0x6BFA, 0x9ACC},{0x6BFB, 0x9ACD},{0x6BFC, 0x9ACE},
- {0x6BFD, 0xEBA6},{0x6BFE, 0x9ACF},{0x6BFF, 0x9AD0},{0x6C00, 0x9AD1},{0x6C01, 0x9AD2},{0x6C02, 0x9AD3},{0x6C03, 0x9AD4},{0x6C04, 0x9AD5},
- {0x6C05, 0xEBA9},{0x6C06, 0xEBAB},{0x6C07, 0xEBAA},{0x6C08, 0x9AD6},{0x6C09, 0x9AD7},{0x6C0A, 0x9AD8},{0x6C0B, 0x9AD9},{0x6C0C, 0x9ADA},
- {0x6C0D, 0xEBAC},{0x6C0E, 0x9ADB},{0x6C0F, 0xCACF},{0x6C10, 0xD8B5},{0x6C11, 0xC3F1},{0x6C12, 0x9ADC},{0x6C13, 0xC3A5},{0x6C14, 0xC6F8},
- {0x6C15, 0xEBAD},{0x6C16, 0xC4CA},{0x6C17, 0x9ADD},{0x6C18, 0xEBAE},{0x6C19, 0xEBAF},{0x6C1A, 0xEBB0},{0x6C1B, 0xB7D5},{0x6C1C, 0x9ADE},
- {0x6C1D, 0x9ADF},{0x6C1E, 0x9AE0},{0x6C1F, 0xB7FA},{0x6C20, 0x9AE1},{0x6C21, 0xEBB1},{0x6C22, 0xC7E2},{0x6C23, 0x9AE2},{0x6C24, 0xEBB3},
- {0x6C25, 0x9AE3},{0x6C26, 0xBAA4},{0x6C27, 0xD1F5},{0x6C28, 0xB0B1},{0x6C29, 0xEBB2},{0x6C2A, 0xEBB4},{0x6C2B, 0x9AE4},{0x6C2C, 0x9AE5},
- {0x6C2D, 0x9AE6},{0x6C2E, 0xB5AA},{0x6C2F, 0xC2C8},{0x6C30, 0xC7E8},{0x6C31, 0x9AE7},{0x6C32, 0xEBB5},{0x6C33, 0x9AE8},{0x6C34, 0xCBAE},
- {0x6C35, 0xE3DF},{0x6C36, 0x9AE9},{0x6C37, 0x9AEA},{0x6C38, 0xD3C0},{0x6C39, 0x9AEB},{0x6C3A, 0x9AEC},{0x6C3B, 0x9AED},{0x6C3C, 0x9AEE},
- {0x6C3D, 0xD9DB},{0x6C3E, 0x9AEF},{0x6C3F, 0x9AF0},{0x6C40, 0xCDA1},{0x6C41, 0xD6AD},{0x6C42, 0xC7F3},{0x6C43, 0x9AF1},{0x6C44, 0x9AF2},
- {0x6C45, 0x9AF3},{0x6C46, 0xD9E0},{0x6C47, 0xBBE3},{0x6C48, 0x9AF4},{0x6C49, 0xBABA},{0x6C4A, 0xE3E2},{0x6C4B, 0x9AF5},{0x6C4C, 0x9AF6},
- {0x6C4D, 0x9AF7},{0x6C4E, 0x9AF8},{0x6C4F, 0x9AF9},{0x6C50, 0xCFAB},{0x6C51, 0x9AFA},{0x6C52, 0x9AFB},{0x6C53, 0x9AFC},{0x6C54, 0xE3E0},
- {0x6C55, 0xC9C7},{0x6C56, 0x9AFD},{0x6C57, 0xBAB9},{0x6C58, 0x9AFE},{0x6C59, 0x9B40},{0x6C5A, 0x9B41},{0x6C5B, 0xD1B4},{0x6C5C, 0xE3E1},
- {0x6C5D, 0xC8EA},{0x6C5E, 0xB9AF},{0x6C5F, 0xBDAD},{0x6C60, 0xB3D8},{0x6C61, 0xCEDB},{0x6C62, 0x9B42},{0x6C63, 0x9B43},{0x6C64, 0xCCC0},
- {0x6C65, 0x9B44},{0x6C66, 0x9B45},{0x6C67, 0x9B46},{0x6C68, 0xE3E8},{0x6C69, 0xE3E9},{0x6C6A, 0xCDF4},{0x6C6B, 0x9B47},{0x6C6C, 0x9B48},
- {0x6C6D, 0x9B49},{0x6C6E, 0x9B4A},{0x6C6F, 0x9B4B},{0x6C70, 0xCCAD},{0x6C71, 0x9B4C},{0x6C72, 0xBCB3},{0x6C73, 0x9B4D},{0x6C74, 0xE3EA},
- {0x6C75, 0x9B4E},{0x6C76, 0xE3EB},{0x6C77, 0x9B4F},{0x6C78, 0x9B50},{0x6C79, 0xD0DA},{0x6C7A, 0x9B51},{0x6C7B, 0x9B52},{0x6C7C, 0x9B53},
- {0x6C7D, 0xC6FB},{0x6C7E, 0xB7DA},{0x6C7F, 0x9B54},{0x6C80, 0x9B55},{0x6C81, 0xC7DF},{0x6C82, 0xD2CA},{0x6C83, 0xCED6},{0x6C84, 0x9B56},
- {0x6C85, 0xE3E4},{0x6C86, 0xE3EC},{0x6C87, 0x9B57},{0x6C88, 0xC9F2},{0x6C89, 0xB3C1},{0x6C8A, 0x9B58},{0x6C8B, 0x9B59},{0x6C8C, 0xE3E7},
- {0x6C8D, 0x9B5A},{0x6C8E, 0x9B5B},{0x6C8F, 0xC6E3},{0x6C90, 0xE3E5},{0x6C91, 0x9B5C},{0x6C92, 0x9B5D},{0x6C93, 0xEDB3},{0x6C94, 0xE3E6},
- {0x6C95, 0x9B5E},{0x6C96, 0x9B5F},{0x6C97, 0x9B60},{0x6C98, 0x9B61},{0x6C99, 0xC9B3},{0x6C9A, 0x9B62},{0x6C9B, 0xC5E6},{0x6C9C, 0x9B63},
- {0x6C9D, 0x9B64},{0x6C9E, 0x9B65},{0x6C9F, 0xB9B5},{0x6CA0, 0x9B66},{0x6CA1, 0xC3BB},{0x6CA2, 0x9B67},{0x6CA3, 0xE3E3},{0x6CA4, 0xC5BD},
- {0x6CA5, 0xC1A4},{0x6CA6, 0xC2D9},{0x6CA7, 0xB2D7},{0x6CA8, 0x9B68},{0x6CA9, 0xE3ED},{0x6CAA, 0xBBA6},{0x6CAB, 0xC4AD},{0x6CAC, 0x9B69},
- {0x6CAD, 0xE3F0},{0x6CAE, 0xBEDA},{0x6CAF, 0x9B6A},{0x6CB0, 0x9B6B},{0x6CB1, 0xE3FB},{0x6CB2, 0xE3F5},{0x6CB3, 0xBAD3},{0x6CB4, 0x9B6C},
- {0x6CB5, 0x9B6D},{0x6CB6, 0x9B6E},{0x6CB7, 0x9B6F},{0x6CB8, 0xB7D0},{0x6CB9, 0xD3CD},{0x6CBA, 0x9B70},{0x6CBB, 0xD6CE},{0x6CBC, 0xD5D3},
- {0x6CBD, 0xB9C1},{0x6CBE, 0xD5B4},{0x6CBF, 0xD1D8},{0x6CC0, 0x9B71},{0x6CC1, 0x9B72},{0x6CC2, 0x9B73},{0x6CC3, 0x9B74},{0x6CC4, 0xD0B9},
- {0x6CC5, 0xC7F6},{0x6CC6, 0x9B75},{0x6CC7, 0x9B76},{0x6CC8, 0x9B77},{0x6CC9, 0xC8AA},{0x6CCA, 0xB2B4},{0x6CCB, 0x9B78},{0x6CCC, 0xC3DA},
- {0x6CCD, 0x9B79},{0x6CCE, 0x9B7A},{0x6CCF, 0x9B7B},{0x6CD0, 0xE3EE},{0x6CD1, 0x9B7C},{0x6CD2, 0x9B7D},{0x6CD3, 0xE3FC},{0x6CD4, 0xE3EF},
- {0x6CD5, 0xB7A8},{0x6CD6, 0xE3F7},{0x6CD7, 0xE3F4},{0x6CD8, 0x9B7E},{0x6CD9, 0x9B80},{0x6CDA, 0x9B81},{0x6CDB, 0xB7BA},{0x6CDC, 0x9B82},
- {0x6CDD, 0x9B83},{0x6CDE, 0xC5A2},{0x6CDF, 0x9B84},{0x6CE0, 0xE3F6},{0x6CE1, 0xC5DD},{0x6CE2, 0xB2A8},{0x6CE3, 0xC6FC},{0x6CE4, 0x9B85},
- {0x6CE5, 0xC4E0},{0x6CE6, 0x9B86},{0x6CE7, 0x9B87},{0x6CE8, 0xD7A2},{0x6CE9, 0x9B88},{0x6CEA, 0xC0E1},{0x6CEB, 0xE3F9},{0x6CEC, 0x9B89},
- {0x6CED, 0x9B8A},{0x6CEE, 0xE3FA},{0x6CEF, 0xE3FD},{0x6CF0, 0xCCA9},{0x6CF1, 0xE3F3},{0x6CF2, 0x9B8B},{0x6CF3, 0xD3BE},{0x6CF4, 0x9B8C},
- {0x6CF5, 0xB1C3},{0x6CF6, 0xEDB4},{0x6CF7, 0xE3F1},{0x6CF8, 0xE3F2},{0x6CF9, 0x9B8D},{0x6CFA, 0xE3F8},{0x6CFB, 0xD0BA},{0x6CFC, 0xC6C3},
- {0x6CFD, 0xD4F3},{0x6CFE, 0xE3FE},{0x6CFF, 0x9B8E},{0x6D00, 0x9B8F},{0x6D01, 0xBDE0},{0x6D02, 0x9B90},{0x6D03, 0x9B91},{0x6D04, 0xE4A7},
- {0x6D05, 0x9B92},{0x6D06, 0x9B93},{0x6D07, 0xE4A6},{0x6D08, 0x9B94},{0x6D09, 0x9B95},{0x6D0A, 0x9B96},{0x6D0B, 0xD1F3},{0x6D0C, 0xE4A3},
- {0x6D0D, 0x9B97},{0x6D0E, 0xE4A9},{0x6D0F, 0x9B98},{0x6D10, 0x9B99},{0x6D11, 0x9B9A},{0x6D12, 0xC8F7},{0x6D13, 0x9B9B},{0x6D14, 0x9B9C},
- {0x6D15, 0x9B9D},{0x6D16, 0x9B9E},{0x6D17, 0xCFB4},{0x6D18, 0x9B9F},{0x6D19, 0xE4A8},{0x6D1A, 0xE4AE},{0x6D1B, 0xC2E5},{0x6D1C, 0x9BA0},
- {0x6D1D, 0x9BA1},{0x6D1E, 0xB6B4},{0x6D1F, 0x9BA2},{0x6D20, 0x9BA3},{0x6D21, 0x9BA4},{0x6D22, 0x9BA5},{0x6D23, 0x9BA6},{0x6D24, 0x9BA7},
- {0x6D25, 0xBDF2},{0x6D26, 0x9BA8},{0x6D27, 0xE4A2},{0x6D28, 0x9BA9},{0x6D29, 0x9BAA},{0x6D2A, 0xBAE9},{0x6D2B, 0xE4AA},{0x6D2C, 0x9BAB},
- {0x6D2D, 0x9BAC},{0x6D2E, 0xE4AC},{0x6D2F, 0x9BAD},{0x6D30, 0x9BAE},{0x6D31, 0xB6FD},{0x6D32, 0xD6DE},{0x6D33, 0xE4B2},{0x6D34, 0x9BAF},
- {0x6D35, 0xE4AD},{0x6D36, 0x9BB0},{0x6D37, 0x9BB1},{0x6D38, 0x9BB2},{0x6D39, 0xE4A1},{0x6D3A, 0x9BB3},{0x6D3B, 0xBBEE},{0x6D3C, 0xCDDD},
- {0x6D3D, 0xC7A2},{0x6D3E, 0xC5C9},{0x6D3F, 0x9BB4},{0x6D40, 0x9BB5},{0x6D41, 0xC1F7},{0x6D42, 0x9BB6},{0x6D43, 0xE4A4},{0x6D44, 0x9BB7},
- {0x6D45, 0xC7B3},{0x6D46, 0xBDAC},{0x6D47, 0xBDBD},{0x6D48, 0xE4A5},{0x6D49, 0x9BB8},{0x6D4A, 0xD7C7},{0x6D4B, 0xB2E2},{0x6D4C, 0x9BB9},
- {0x6D4D, 0xE4AB},{0x6D4E, 0xBCC3},{0x6D4F, 0xE4AF},{0x6D50, 0x9BBA},{0x6D51, 0xBBEB},{0x6D52, 0xE4B0},{0x6D53, 0xC5A8},{0x6D54, 0xE4B1},
- {0x6D55, 0x9BBB},{0x6D56, 0x9BBC},{0x6D57, 0x9BBD},{0x6D58, 0x9BBE},{0x6D59, 0xD5E3},{0x6D5A, 0xBFA3},{0x6D5B, 0x9BBF},{0x6D5C, 0xE4BA},
- {0x6D5D, 0x9BC0},{0x6D5E, 0xE4B7},{0x6D5F, 0x9BC1},{0x6D60, 0xE4BB},{0x6D61, 0x9BC2},{0x6D62, 0x9BC3},{0x6D63, 0xE4BD},{0x6D64, 0x9BC4},
- {0x6D65, 0x9BC5},{0x6D66, 0xC6D6},{0x6D67, 0x9BC6},{0x6D68, 0x9BC7},{0x6D69, 0xBAC6},{0x6D6A, 0xC0CB},{0x6D6B, 0x9BC8},{0x6D6C, 0x9BC9},
- {0x6D6D, 0x9BCA},{0x6D6E, 0xB8A1},{0x6D6F, 0xE4B4},{0x6D70, 0x9BCB},{0x6D71, 0x9BCC},{0x6D72, 0x9BCD},{0x6D73, 0x9BCE},{0x6D74, 0xD4A1},
- {0x6D75, 0x9BCF},{0x6D76, 0x9BD0},{0x6D77, 0xBAA3},{0x6D78, 0xBDFE},{0x6D79, 0x9BD1},{0x6D7A, 0x9BD2},{0x6D7B, 0x9BD3},{0x6D7C, 0xE4BC},
- {0x6D7D, 0x9BD4},{0x6D7E, 0x9BD5},{0x6D7F, 0x9BD6},{0x6D80, 0x9BD7},{0x6D81, 0x9BD8},{0x6D82, 0xCDBF},{0x6D83, 0x9BD9},{0x6D84, 0x9BDA},
- {0x6D85, 0xC4F9},{0x6D86, 0x9BDB},{0x6D87, 0x9BDC},{0x6D88, 0xCFFB},{0x6D89, 0xC9E6},{0x6D8A, 0x9BDD},{0x6D8B, 0x9BDE},{0x6D8C, 0xD3BF},
- {0x6D8D, 0x9BDF},{0x6D8E, 0xCFD1},{0x6D8F, 0x9BE0},{0x6D90, 0x9BE1},{0x6D91, 0xE4B3},{0x6D92, 0x9BE2},{0x6D93, 0xE4B8},{0x6D94, 0xE4B9},
- {0x6D95, 0xCCE9},{0x6D96, 0x9BE3},{0x6D97, 0x9BE4},{0x6D98, 0x9BE5},{0x6D99, 0x9BE6},{0x6D9A, 0x9BE7},{0x6D9B, 0xCCCE},{0x6D9C, 0x9BE8},
- {0x6D9D, 0xC0D4},{0x6D9E, 0xE4B5},{0x6D9F, 0xC1B0},{0x6DA0, 0xE4B6},{0x6DA1, 0xCED0},{0x6DA2, 0x9BE9},{0x6DA3, 0xBBC1},{0x6DA4, 0xB5D3},
- {0x6DA5, 0x9BEA},{0x6DA6, 0xC8F3},{0x6DA7, 0xBDA7},{0x6DA8, 0xD5C7},{0x6DA9, 0xC9AC},{0x6DAA, 0xB8A2},{0x6DAB, 0xE4CA},{0x6DAC, 0x9BEB},
- {0x6DAD, 0x9BEC},{0x6DAE, 0xE4CC},{0x6DAF, 0xD1C4},{0x6DB0, 0x9BED},{0x6DB1, 0x9BEE},{0x6DB2, 0xD2BA},{0x6DB3, 0x9BEF},{0x6DB4, 0x9BF0},
- {0x6DB5, 0xBAAD},{0x6DB6, 0x9BF1},{0x6DB7, 0x9BF2},{0x6DB8, 0xBAD4},{0x6DB9, 0x9BF3},{0x6DBA, 0x9BF4},{0x6DBB, 0x9BF5},{0x6DBC, 0x9BF6},
- {0x6DBD, 0x9BF7},{0x6DBE, 0x9BF8},{0x6DBF, 0xE4C3},{0x6DC0, 0xB5ED},{0x6DC1, 0x9BF9},{0x6DC2, 0x9BFA},{0x6DC3, 0x9BFB},{0x6DC4, 0xD7CD},
- {0x6DC5, 0xE4C0},{0x6DC6, 0xCFFD},{0x6DC7, 0xE4BF},{0x6DC8, 0x9BFC},{0x6DC9, 0x9BFD},{0x6DCA, 0x9BFE},{0x6DCB, 0xC1DC},{0x6DCC, 0xCCCA},
- {0x6DCD, 0x9C40},{0x6DCE, 0x9C41},{0x6DCF, 0x9C42},{0x6DD0, 0x9C43},{0x6DD1, 0xCAE7},{0x6DD2, 0x9C44},{0x6DD3, 0x9C45},{0x6DD4, 0x9C46},
- {0x6DD5, 0x9C47},{0x6DD6, 0xC4D7},{0x6DD7, 0x9C48},{0x6DD8, 0xCCD4},{0x6DD9, 0xE4C8},{0x6DDA, 0x9C49},{0x6DDB, 0x9C4A},{0x6DDC, 0x9C4B},
- {0x6DDD, 0xE4C7},{0x6DDE, 0xE4C1},{0x6DDF, 0x9C4C},{0x6DE0, 0xE4C4},{0x6DE1, 0xB5AD},{0x6DE2, 0x9C4D},{0x6DE3, 0x9C4E},{0x6DE4, 0xD3D9},
- {0x6DE5, 0x9C4F},{0x6DE6, 0xE4C6},{0x6DE7, 0x9C50},{0x6DE8, 0x9C51},{0x6DE9, 0x9C52},{0x6DEA, 0x9C53},{0x6DEB, 0xD2F9},{0x6DEC, 0xB4E3},
- {0x6DED, 0x9C54},{0x6DEE, 0xBBB4},{0x6DEF, 0x9C55},{0x6DF0, 0x9C56},{0x6DF1, 0xC9EE},{0x6DF2, 0x9C57},{0x6DF3, 0xB4BE},{0x6DF4, 0x9C58},
- {0x6DF5, 0x9C59},{0x6DF6, 0x9C5A},{0x6DF7, 0xBBEC},{0x6DF8, 0x9C5B},{0x6DF9, 0xD1CD},{0x6DFA, 0x9C5C},{0x6DFB, 0xCCED},{0x6DFC, 0xEDB5},
- {0x6DFD, 0x9C5D},{0x6DFE, 0x9C5E},{0x6DFF, 0x9C5F},{0x6E00, 0x9C60},{0x6E01, 0x9C61},{0x6E02, 0x9C62},{0x6E03, 0x9C63},{0x6E04, 0x9C64},
- {0x6E05, 0xC7E5},{0x6E06, 0x9C65},{0x6E07, 0x9C66},{0x6E08, 0x9C67},{0x6E09, 0x9C68},{0x6E0A, 0xD4A8},{0x6E0B, 0x9C69},{0x6E0C, 0xE4CB},
- {0x6E0D, 0xD7D5},{0x6E0E, 0xE4C2},{0x6E0F, 0x9C6A},{0x6E10, 0xBDA5},{0x6E11, 0xE4C5},{0x6E12, 0x9C6B},{0x6E13, 0x9C6C},{0x6E14, 0xD3E6},
- {0x6E15, 0x9C6D},{0x6E16, 0xE4C9},{0x6E17, 0xC9F8},{0x6E18, 0x9C6E},{0x6E19, 0x9C6F},{0x6E1A, 0xE4BE},{0x6E1B, 0x9C70},{0x6E1C, 0x9C71},
- {0x6E1D, 0xD3E5},{0x6E1E, 0x9C72},{0x6E1F, 0x9C73},{0x6E20, 0xC7FE},{0x6E21, 0xB6C9},{0x6E22, 0x9C74},{0x6E23, 0xD4FC},{0x6E24, 0xB2B3},
- {0x6E25, 0xE4D7},{0x6E26, 0x9C75},{0x6E27, 0x9C76},{0x6E28, 0x9C77},{0x6E29, 0xCEC2},{0x6E2A, 0x9C78},{0x6E2B, 0xE4CD},{0x6E2C, 0x9C79},
- {0x6E2D, 0xCEBC},{0x6E2E, 0x9C7A},{0x6E2F, 0xB8DB},{0x6E30, 0x9C7B},{0x6E31, 0x9C7C},{0x6E32, 0xE4D6},{0x6E33, 0x9C7D},{0x6E34, 0xBFCA},
- {0x6E35, 0x9C7E},{0x6E36, 0x9C80},{0x6E37, 0x9C81},{0x6E38, 0xD3CE},{0x6E39, 0x9C82},{0x6E3A, 0xC3EC},{0x6E3B, 0x9C83},{0x6E3C, 0x9C84},
- {0x6E3D, 0x9C85},{0x6E3E, 0x9C86},{0x6E3F, 0x9C87},{0x6E40, 0x9C88},{0x6E41, 0x9C89},{0x6E42, 0x9C8A},{0x6E43, 0xC5C8},{0x6E44, 0xE4D8},
- {0x6E45, 0x9C8B},{0x6E46, 0x9C8C},{0x6E47, 0x9C8D},{0x6E48, 0x9C8E},{0x6E49, 0x9C8F},{0x6E4A, 0x9C90},{0x6E4B, 0x9C91},{0x6E4C, 0x9C92},
- {0x6E4D, 0xCDC4},{0x6E4E, 0xE4CF},{0x6E4F, 0x9C93},{0x6E50, 0x9C94},{0x6E51, 0x9C95},{0x6E52, 0x9C96},{0x6E53, 0xE4D4},{0x6E54, 0xE4D5},
- {0x6E55, 0x9C97},{0x6E56, 0xBAFE},{0x6E57, 0x9C98},{0x6E58, 0xCFE6},{0x6E59, 0x9C99},{0x6E5A, 0x9C9A},{0x6E5B, 0xD5BF},{0x6E5C, 0x9C9B},
- {0x6E5D, 0x9C9C},{0x6E5E, 0x9C9D},{0x6E5F, 0xE4D2},{0x6E60, 0x9C9E},{0x6E61, 0x9C9F},{0x6E62, 0x9CA0},{0x6E63, 0x9CA1},{0x6E64, 0x9CA2},
- {0x6E65, 0x9CA3},{0x6E66, 0x9CA4},{0x6E67, 0x9CA5},{0x6E68, 0x9CA6},{0x6E69, 0x9CA7},{0x6E6A, 0x9CA8},{0x6E6B, 0xE4D0},{0x6E6C, 0x9CA9},
- {0x6E6D, 0x9CAA},{0x6E6E, 0xE4CE},{0x6E6F, 0x9CAB},{0x6E70, 0x9CAC},{0x6E71, 0x9CAD},{0x6E72, 0x9CAE},{0x6E73, 0x9CAF},{0x6E74, 0x9CB0},
- {0x6E75, 0x9CB1},{0x6E76, 0x9CB2},{0x6E77, 0x9CB3},{0x6E78, 0x9CB4},{0x6E79, 0x9CB5},{0x6E7A, 0x9CB6},{0x6E7B, 0x9CB7},{0x6E7C, 0x9CB8},
- {0x6E7D, 0x9CB9},{0x6E7E, 0xCDE5},{0x6E7F, 0xCAAA},{0x6E80, 0x9CBA},{0x6E81, 0x9CBB},{0x6E82, 0x9CBC},{0x6E83, 0xC0A3},{0x6E84, 0x9CBD},
- {0x6E85, 0xBDA6},{0x6E86, 0xE4D3},{0x6E87, 0x9CBE},{0x6E88, 0x9CBF},{0x6E89, 0xB8C8},{0x6E8A, 0x9CC0},{0x6E8B, 0x9CC1},{0x6E8C, 0x9CC2},
- {0x6E8D, 0x9CC3},{0x6E8E, 0x9CC4},{0x6E8F, 0xE4E7},{0x6E90, 0xD4B4},{0x6E91, 0x9CC5},{0x6E92, 0x9CC6},{0x6E93, 0x9CC7},{0x6E94, 0x9CC8},
- {0x6E95, 0x9CC9},{0x6E96, 0x9CCA},{0x6E97, 0x9CCB},{0x6E98, 0xE4DB},{0x6E99, 0x9CCC},{0x6E9A, 0x9CCD},{0x6E9B, 0x9CCE},{0x6E9C, 0xC1EF},
- {0x6E9D, 0x9CCF},{0x6E9E, 0x9CD0},{0x6E9F, 0xE4E9},{0x6EA0, 0x9CD1},{0x6EA1, 0x9CD2},{0x6EA2, 0xD2E7},{0x6EA3, 0x9CD3},{0x6EA4, 0x9CD4},
- {0x6EA5, 0xE4DF},{0x6EA6, 0x9CD5},{0x6EA7, 0xE4E0},{0x6EA8, 0x9CD6},{0x6EA9, 0x9CD7},{0x6EAA, 0xCFAA},{0x6EAB, 0x9CD8},{0x6EAC, 0x9CD9},
- {0x6EAD, 0x9CDA},{0x6EAE, 0x9CDB},{0x6EAF, 0xCBDD},{0x6EB0, 0x9CDC},{0x6EB1, 0xE4DA},{0x6EB2, 0xE4D1},{0x6EB3, 0x9CDD},{0x6EB4, 0xE4E5},
- {0x6EB5, 0x9CDE},{0x6EB6, 0xC8DC},{0x6EB7, 0xE4E3},{0x6EB8, 0x9CDF},{0x6EB9, 0x9CE0},{0x6EBA, 0xC4E7},{0x6EBB, 0xE4E2},{0x6EBC, 0x9CE1},
- {0x6EBD, 0xE4E1},{0x6EBE, 0x9CE2},{0x6EBF, 0x9CE3},{0x6EC0, 0x9CE4},{0x6EC1, 0xB3FC},{0x6EC2, 0xE4E8},{0x6EC3, 0x9CE5},{0x6EC4, 0x9CE6},
- {0x6EC5, 0x9CE7},{0x6EC6, 0x9CE8},{0x6EC7, 0xB5E1},{0x6EC8, 0x9CE9},{0x6EC9, 0x9CEA},{0x6ECA, 0x9CEB},{0x6ECB, 0xD7CC},{0x6ECC, 0x9CEC},
- {0x6ECD, 0x9CED},{0x6ECE, 0x9CEE},{0x6ECF, 0xE4E6},{0x6ED0, 0x9CEF},{0x6ED1, 0xBBAC},{0x6ED2, 0x9CF0},{0x6ED3, 0xD7D2},{0x6ED4, 0xCCCF},
- {0x6ED5, 0xEBF8},{0x6ED6, 0x9CF1},{0x6ED7, 0xE4E4},{0x6ED8, 0x9CF2},{0x6ED9, 0x9CF3},{0x6EDA, 0xB9F6},{0x6EDB, 0x9CF4},{0x6EDC, 0x9CF5},
- {0x6EDD, 0x9CF6},{0x6EDE, 0xD6CD},{0x6EDF, 0xE4D9},{0x6EE0, 0xE4DC},{0x6EE1, 0xC2FA},{0x6EE2, 0xE4DE},{0x6EE3, 0x9CF7},{0x6EE4, 0xC2CB},
- {0x6EE5, 0xC0C4},{0x6EE6, 0xC2D0},{0x6EE7, 0x9CF8},{0x6EE8, 0xB1F5},{0x6EE9, 0xCCB2},{0x6EEA, 0x9CF9},{0x6EEB, 0x9CFA},{0x6EEC, 0x9CFB},
- {0x6EED, 0x9CFC},{0x6EEE, 0x9CFD},{0x6EEF, 0x9CFE},{0x6EF0, 0x9D40},{0x6EF1, 0x9D41},{0x6EF2, 0x9D42},{0x6EF3, 0x9D43},{0x6EF4, 0xB5CE},
- {0x6EF5, 0x9D44},{0x6EF6, 0x9D45},{0x6EF7, 0x9D46},{0x6EF8, 0x9D47},{0x6EF9, 0xE4EF},{0x6EFA, 0x9D48},{0x6EFB, 0x9D49},{0x6EFC, 0x9D4A},
- {0x6EFD, 0x9D4B},{0x6EFE, 0x9D4C},{0x6EFF, 0x9D4D},{0x6F00, 0x9D4E},{0x6F01, 0x9D4F},{0x6F02, 0xC6AF},{0x6F03, 0x9D50},{0x6F04, 0x9D51},
- {0x6F05, 0x9D52},{0x6F06, 0xC6E1},{0x6F07, 0x9D53},{0x6F08, 0x9D54},{0x6F09, 0xE4F5},{0x6F0A, 0x9D55},{0x6F0B, 0x9D56},{0x6F0C, 0x9D57},
- {0x6F0D, 0x9D58},{0x6F0E, 0x9D59},{0x6F0F, 0xC2A9},{0x6F10, 0x9D5A},{0x6F11, 0x9D5B},{0x6F12, 0x9D5C},{0x6F13, 0xC0EC},{0x6F14, 0xD1DD},
- {0x6F15, 0xE4EE},{0x6F16, 0x9D5D},{0x6F17, 0x9D5E},{0x6F18, 0x9D5F},{0x6F19, 0x9D60},{0x6F1A, 0x9D61},{0x6F1B, 0x9D62},{0x6F1C, 0x9D63},
- {0x6F1D, 0x9D64},{0x6F1E, 0x9D65},{0x6F1F, 0x9D66},{0x6F20, 0xC4AE},{0x6F21, 0x9D67},{0x6F22, 0x9D68},{0x6F23, 0x9D69},{0x6F24, 0xE4ED},
- {0x6F25, 0x9D6A},{0x6F26, 0x9D6B},{0x6F27, 0x9D6C},{0x6F28, 0x9D6D},{0x6F29, 0xE4F6},{0x6F2A, 0xE4F4},{0x6F2B, 0xC2FE},{0x6F2C, 0x9D6E},
- {0x6F2D, 0xE4DD},{0x6F2E, 0x9D6F},{0x6F2F, 0xE4F0},{0x6F30, 0x9D70},{0x6F31, 0xCAFE},{0x6F32, 0x9D71},{0x6F33, 0xD5C4},{0x6F34, 0x9D72},
- {0x6F35, 0x9D73},{0x6F36, 0xE4F1},{0x6F37, 0x9D74},{0x6F38, 0x9D75},{0x6F39, 0x9D76},{0x6F3A, 0x9D77},{0x6F3B, 0x9D78},{0x6F3C, 0x9D79},
- {0x6F3D, 0x9D7A},{0x6F3E, 0xD1FA},{0x6F3F, 0x9D7B},{0x6F40, 0x9D7C},{0x6F41, 0x9D7D},{0x6F42, 0x9D7E},{0x6F43, 0x9D80},{0x6F44, 0x9D81},
- {0x6F45, 0x9D82},{0x6F46, 0xE4EB},{0x6F47, 0xE4EC},{0x6F48, 0x9D83},{0x6F49, 0x9D84},{0x6F4A, 0x9D85},{0x6F4B, 0xE4F2},{0x6F4C, 0x9D86},
- {0x6F4D, 0xCEAB},{0x6F4E, 0x9D87},{0x6F4F, 0x9D88},{0x6F50, 0x9D89},{0x6F51, 0x9D8A},{0x6F52, 0x9D8B},{0x6F53, 0x9D8C},{0x6F54, 0x9D8D},
- {0x6F55, 0x9D8E},{0x6F56, 0x9D8F},{0x6F57, 0x9D90},{0x6F58, 0xC5CB},{0x6F59, 0x9D91},{0x6F5A, 0x9D92},{0x6F5B, 0x9D93},{0x6F5C, 0xC7B1},
- {0x6F5D, 0x9D94},{0x6F5E, 0xC2BA},{0x6F5F, 0x9D95},{0x6F60, 0x9D96},{0x6F61, 0x9D97},{0x6F62, 0xE4EA},{0x6F63, 0x9D98},{0x6F64, 0x9D99},
- {0x6F65, 0x9D9A},{0x6F66, 0xC1CA},{0x6F67, 0x9D9B},{0x6F68, 0x9D9C},{0x6F69, 0x9D9D},{0x6F6A, 0x9D9E},{0x6F6B, 0x9D9F},{0x6F6C, 0x9DA0},
- {0x6F6D, 0xCCB6},{0x6F6E, 0xB3B1},{0x6F6F, 0x9DA1},{0x6F70, 0x9DA2},{0x6F71, 0x9DA3},{0x6F72, 0xE4FB},{0x6F73, 0x9DA4},{0x6F74, 0xE4F3},
- {0x6F75, 0x9DA5},{0x6F76, 0x9DA6},{0x6F77, 0x9DA7},{0x6F78, 0xE4FA},{0x6F79, 0x9DA8},{0x6F7A, 0xE4FD},{0x6F7B, 0x9DA9},{0x6F7C, 0xE4FC},
- {0x6F7D, 0x9DAA},{0x6F7E, 0x9DAB},{0x6F7F, 0x9DAC},{0x6F80, 0x9DAD},{0x6F81, 0x9DAE},{0x6F82, 0x9DAF},{0x6F83, 0x9DB0},{0x6F84, 0xB3CE},
- {0x6F85, 0x9DB1},{0x6F86, 0x9DB2},{0x6F87, 0x9DB3},{0x6F88, 0xB3BA},{0x6F89, 0xE4F7},{0x6F8A, 0x9DB4},{0x6F8B, 0x9DB5},{0x6F8C, 0xE4F9},
- {0x6F8D, 0xE4F8},{0x6F8E, 0xC5EC},{0x6F8F, 0x9DB6},{0x6F90, 0x9DB7},{0x6F91, 0x9DB8},{0x6F92, 0x9DB9},{0x6F93, 0x9DBA},{0x6F94, 0x9DBB},
- {0x6F95, 0x9DBC},{0x6F96, 0x9DBD},{0x6F97, 0x9DBE},{0x6F98, 0x9DBF},{0x6F99, 0x9DC0},{0x6F9A, 0x9DC1},{0x6F9B, 0x9DC2},{0x6F9C, 0xC0BD},
- {0x6F9D, 0x9DC3},{0x6F9E, 0x9DC4},{0x6F9F, 0x9DC5},{0x6FA0, 0x9DC6},{0x6FA1, 0xD4E8},{0x6FA2, 0x9DC7},{0x6FA3, 0x9DC8},{0x6FA4, 0x9DC9},
- {0x6FA5, 0x9DCA},{0x6FA6, 0x9DCB},{0x6FA7, 0xE5A2},{0x6FA8, 0x9DCC},{0x6FA9, 0x9DCD},{0x6FAA, 0x9DCE},{0x6FAB, 0x9DCF},{0x6FAC, 0x9DD0},
- {0x6FAD, 0x9DD1},{0x6FAE, 0x9DD2},{0x6FAF, 0x9DD3},{0x6FB0, 0x9DD4},{0x6FB1, 0x9DD5},{0x6FB2, 0x9DD6},{0x6FB3, 0xB0C4},{0x6FB4, 0x9DD7},
- {0x6FB5, 0x9DD8},{0x6FB6, 0xE5A4},{0x6FB7, 0x9DD9},{0x6FB8, 0x9DDA},{0x6FB9, 0xE5A3},{0x6FBA, 0x9DDB},{0x6FBB, 0x9DDC},{0x6FBC, 0x9DDD},
- {0x6FBD, 0x9DDE},{0x6FBE, 0x9DDF},{0x6FBF, 0x9DE0},{0x6FC0, 0xBCA4},{0x6FC1, 0x9DE1},{0x6FC2, 0xE5A5},{0x6FC3, 0x9DE2},{0x6FC4, 0x9DE3},
- {0x6FC5, 0x9DE4},{0x6FC6, 0x9DE5},{0x6FC7, 0x9DE6},{0x6FC8, 0x9DE7},{0x6FC9, 0xE5A1},{0x6FCA, 0x9DE8},{0x6FCB, 0x9DE9},{0x6FCC, 0x9DEA},
- {0x6FCD, 0x9DEB},{0x6FCE, 0x9DEC},{0x6FCF, 0x9DED},{0x6FD0, 0x9DEE},{0x6FD1, 0xE4FE},{0x6FD2, 0xB1F4},{0x6FD3, 0x9DEF},{0x6FD4, 0x9DF0},
- {0x6FD5, 0x9DF1},{0x6FD6, 0x9DF2},{0x6FD7, 0x9DF3},{0x6FD8, 0x9DF4},{0x6FD9, 0x9DF5},{0x6FDA, 0x9DF6},{0x6FDB, 0x9DF7},{0x6FDC, 0x9DF8},
- {0x6FDD, 0x9DF9},{0x6FDE, 0xE5A8},{0x6FDF, 0x9DFA},{0x6FE0, 0xE5A9},{0x6FE1, 0xE5A6},{0x6FE2, 0x9DFB},{0x6FE3, 0x9DFC},{0x6FE4, 0x9DFD},
- {0x6FE5, 0x9DFE},{0x6FE6, 0x9E40},{0x6FE7, 0x9E41},{0x6FE8, 0x9E42},{0x6FE9, 0x9E43},{0x6FEA, 0x9E44},{0x6FEB, 0x9E45},{0x6FEC, 0x9E46},
- {0x6FED, 0x9E47},{0x6FEE, 0xE5A7},{0x6FEF, 0xE5AA},{0x6FF0, 0x9E48},{0x6FF1, 0x9E49},{0x6FF2, 0x9E4A},{0x6FF3, 0x9E4B},{0x6FF4, 0x9E4C},
- {0x6FF5, 0x9E4D},{0x6FF6, 0x9E4E},{0x6FF7, 0x9E4F},{0x6FF8, 0x9E50},{0x6FF9, 0x9E51},{0x6FFA, 0x9E52},{0x6FFB, 0x9E53},{0x6FFC, 0x9E54},
- {0x6FFD, 0x9E55},{0x6FFE, 0x9E56},{0x6FFF, 0x9E57},{0x7000, 0x9E58},{0x7001, 0x9E59},{0x7002, 0x9E5A},{0x7003, 0x9E5B},{0x7004, 0x9E5C},
- {0x7005, 0x9E5D},{0x7006, 0x9E5E},{0x7007, 0x9E5F},{0x7008, 0x9E60},{0x7009, 0x9E61},{0x700A, 0x9E62},{0x700B, 0x9E63},{0x700C, 0x9E64},
- {0x700D, 0x9E65},{0x700E, 0x9E66},{0x700F, 0x9E67},{0x7010, 0x9E68},{0x7011, 0xC6D9},{0x7012, 0x9E69},{0x7013, 0x9E6A},{0x7014, 0x9E6B},
- {0x7015, 0x9E6C},{0x7016, 0x9E6D},{0x7017, 0x9E6E},{0x7018, 0x9E6F},{0x7019, 0x9E70},{0x701A, 0xE5AB},{0x701B, 0xE5AD},{0x701C, 0x9E71},
- {0x701D, 0x9E72},{0x701E, 0x9E73},{0x701F, 0x9E74},{0x7020, 0x9E75},{0x7021, 0x9E76},{0x7022, 0x9E77},{0x7023, 0xE5AC},{0x7024, 0x9E78},
- {0x7025, 0x9E79},{0x7026, 0x9E7A},{0x7027, 0x9E7B},{0x7028, 0x9E7C},{0x7029, 0x9E7D},{0x702A, 0x9E7E},{0x702B, 0x9E80},{0x702C, 0x9E81},
- {0x702D, 0x9E82},{0x702E, 0x9E83},{0x702F, 0x9E84},{0x7030, 0x9E85},{0x7031, 0x9E86},{0x7032, 0x9E87},{0x7033, 0x9E88},{0x7034, 0x9E89},
- {0x7035, 0xE5AF},{0x7036, 0x9E8A},{0x7037, 0x9E8B},{0x7038, 0x9E8C},{0x7039, 0xE5AE},{0x703A, 0x9E8D},{0x703B, 0x9E8E},{0x703C, 0x9E8F},
- {0x703D, 0x9E90},{0x703E, 0x9E91},{0x703F, 0x9E92},{0x7040, 0x9E93},{0x7041, 0x9E94},{0x7042, 0x9E95},{0x7043, 0x9E96},{0x7044, 0x9E97},
- {0x7045, 0x9E98},{0x7046, 0x9E99},{0x7047, 0x9E9A},{0x7048, 0x9E9B},{0x7049, 0x9E9C},{0x704A, 0x9E9D},{0x704B, 0x9E9E},{0x704C, 0xB9E0},
- {0x704D, 0x9E9F},{0x704E, 0x9EA0},{0x704F, 0xE5B0},{0x7050, 0x9EA1},{0x7051, 0x9EA2},{0x7052, 0x9EA3},{0x7053, 0x9EA4},{0x7054, 0x9EA5},
- {0x7055, 0x9EA6},{0x7056, 0x9EA7},{0x7057, 0x9EA8},{0x7058, 0x9EA9},{0x7059, 0x9EAA},{0x705A, 0x9EAB},{0x705B, 0x9EAC},{0x705C, 0x9EAD},
- {0x705D, 0x9EAE},{0x705E, 0xE5B1},{0x705F, 0x9EAF},{0x7060, 0x9EB0},{0x7061, 0x9EB1},{0x7062, 0x9EB2},{0x7063, 0x9EB3},{0x7064, 0x9EB4},
- {0x7065, 0x9EB5},{0x7066, 0x9EB6},{0x7067, 0x9EB7},{0x7068, 0x9EB8},{0x7069, 0x9EB9},{0x706A, 0x9EBA},{0x706B, 0xBBF0},{0x706C, 0xECE1},
- {0x706D, 0xC3F0},{0x706E, 0x9EBB},{0x706F, 0xB5C6},{0x7070, 0xBBD2},{0x7071, 0x9EBC},{0x7072, 0x9EBD},{0x7073, 0x9EBE},{0x7074, 0x9EBF},
- {0x7075, 0xC1E9},{0x7076, 0xD4EE},{0x7077, 0x9EC0},{0x7078, 0xBEC4},{0x7079, 0x9EC1},{0x707A, 0x9EC2},{0x707B, 0x9EC3},{0x707C, 0xD7C6},
- {0x707D, 0x9EC4},{0x707E, 0xD4D6},{0x707F, 0xB2D3},{0x7080, 0xECBE},{0x7081, 0x9EC5},{0x7082, 0x9EC6},{0x7083, 0x9EC7},{0x7084, 0x9EC8},
- {0x7085, 0xEAC1},{0x7086, 0x9EC9},{0x7087, 0x9ECA},{0x7088, 0x9ECB},{0x7089, 0xC2AF},{0x708A, 0xB4B6},{0x708B, 0x9ECC},{0x708C, 0x9ECD},
- {0x708D, 0x9ECE},{0x708E, 0xD1D7},{0x708F, 0x9ECF},{0x7090, 0x9ED0},{0x7091, 0x9ED1},{0x7092, 0xB3B4},{0x7093, 0x9ED2},{0x7094, 0xC8B2},
- {0x7095, 0xBFBB},{0x7096, 0xECC0},{0x7097, 0x9ED3},{0x7098, 0x9ED4},{0x7099, 0xD6CB},{0x709A, 0x9ED5},{0x709B, 0x9ED6},{0x709C, 0xECBF},
- {0x709D, 0xECC1},{0x709E, 0x9ED7},{0x709F, 0x9ED8},{0x70A0, 0x9ED9},{0x70A1, 0x9EDA},{0x70A2, 0x9EDB},{0x70A3, 0x9EDC},{0x70A4, 0x9EDD},
- {0x70A5, 0x9EDE},{0x70A6, 0x9EDF},{0x70A7, 0x9EE0},{0x70A8, 0x9EE1},{0x70A9, 0x9EE2},{0x70AA, 0x9EE3},{0x70AB, 0xECC5},{0x70AC, 0xBEE6},
- {0x70AD, 0xCCBF},{0x70AE, 0xC5DA},{0x70AF, 0xBEBC},{0x70B0, 0x9EE4},{0x70B1, 0xECC6},{0x70B2, 0x9EE5},{0x70B3, 0xB1FE},{0x70B4, 0x9EE6},
- {0x70B5, 0x9EE7},{0x70B6, 0x9EE8},{0x70B7, 0xECC4},{0x70B8, 0xD5A8},{0x70B9, 0xB5E3},{0x70BA, 0x9EE9},{0x70BB, 0xECC2},{0x70BC, 0xC1B6},
- {0x70BD, 0xB3E3},{0x70BE, 0x9EEA},{0x70BF, 0x9EEB},{0x70C0, 0xECC3},{0x70C1, 0xCBB8},{0x70C2, 0xC0C3},{0x70C3, 0xCCFE},{0x70C4, 0x9EEC},
- {0x70C5, 0x9EED},{0x70C6, 0x9EEE},{0x70C7, 0x9EEF},{0x70C8, 0xC1D2},{0x70C9, 0x9EF0},{0x70CA, 0xECC8},{0x70CB, 0x9EF1},{0x70CC, 0x9EF2},
- {0x70CD, 0x9EF3},{0x70CE, 0x9EF4},{0x70CF, 0x9EF5},{0x70D0, 0x9EF6},{0x70D1, 0x9EF7},{0x70D2, 0x9EF8},{0x70D3, 0x9EF9},{0x70D4, 0x9EFA},
- {0x70D5, 0x9EFB},{0x70D6, 0x9EFC},{0x70D7, 0x9EFD},{0x70D8, 0xBAE6},{0x70D9, 0xC0D3},{0x70DA, 0x9EFE},{0x70DB, 0xD6F2},{0x70DC, 0x9F40},
- {0x70DD, 0x9F41},{0x70DE, 0x9F42},{0x70DF, 0xD1CC},{0x70E0, 0x9F43},{0x70E1, 0x9F44},{0x70E2, 0x9F45},{0x70E3, 0x9F46},{0x70E4, 0xBFBE},
- {0x70E5, 0x9F47},{0x70E6, 0xB7B3},{0x70E7, 0xC9D5},{0x70E8, 0xECC7},{0x70E9, 0xBBE2},{0x70EA, 0x9F48},{0x70EB, 0xCCCC},{0x70EC, 0xBDFD},
- {0x70ED, 0xC8C8},{0x70EE, 0x9F49},{0x70EF, 0xCFA9},{0x70F0, 0x9F4A},{0x70F1, 0x9F4B},{0x70F2, 0x9F4C},{0x70F3, 0x9F4D},{0x70F4, 0x9F4E},
- {0x70F5, 0x9F4F},{0x70F6, 0x9F50},{0x70F7, 0xCDE9},{0x70F8, 0x9F51},{0x70F9, 0xC5EB},{0x70FA, 0x9F52},{0x70FB, 0x9F53},{0x70FC, 0x9F54},
- {0x70FD, 0xB7E9},{0x70FE, 0x9F55},{0x70FF, 0x9F56},{0x7100, 0x9F57},{0x7101, 0x9F58},{0x7102, 0x9F59},{0x7103, 0x9F5A},{0x7104, 0x9F5B},
- {0x7105, 0x9F5C},{0x7106, 0x9F5D},{0x7107, 0x9F5E},{0x7108, 0x9F5F},{0x7109, 0xD1C9},{0x710A, 0xBAB8},{0x710B, 0x9F60},{0x710C, 0x9F61},
- {0x710D, 0x9F62},{0x710E, 0x9F63},{0x710F, 0x9F64},{0x7110, 0xECC9},{0x7111, 0x9F65},{0x7112, 0x9F66},{0x7113, 0xECCA},{0x7114, 0x9F67},
- {0x7115, 0xBBC0},{0x7116, 0xECCB},{0x7117, 0x9F68},{0x7118, 0xECE2},{0x7119, 0xB1BA},{0x711A, 0xB7D9},{0x711B, 0x9F69},{0x711C, 0x9F6A},
- {0x711D, 0x9F6B},{0x711E, 0x9F6C},{0x711F, 0x9F6D},{0x7120, 0x9F6E},{0x7121, 0x9F6F},{0x7122, 0x9F70},{0x7123, 0x9F71},{0x7124, 0x9F72},
- {0x7125, 0x9F73},{0x7126, 0xBDB9},{0x7127, 0x9F74},{0x7128, 0x9F75},{0x7129, 0x9F76},{0x712A, 0x9F77},{0x712B, 0x9F78},{0x712C, 0x9F79},
- {0x712D, 0x9F7A},{0x712E, 0x9F7B},{0x712F, 0xECCC},{0x7130, 0xD1E6},{0x7131, 0xECCD},{0x7132, 0x9F7C},{0x7133, 0x9F7D},{0x7134, 0x9F7E},
- {0x7135, 0x9F80},{0x7136, 0xC8BB},{0x7137, 0x9F81},{0x7138, 0x9F82},{0x7139, 0x9F83},{0x713A, 0x9F84},{0x713B, 0x9F85},{0x713C, 0x9F86},
- {0x713D, 0x9F87},{0x713E, 0x9F88},{0x713F, 0x9F89},{0x7140, 0x9F8A},{0x7141, 0x9F8B},{0x7142, 0x9F8C},{0x7143, 0x9F8D},{0x7144, 0x9F8E},
- {0x7145, 0xECD1},{0x7146, 0x9F8F},{0x7147, 0x9F90},{0x7148, 0x9F91},{0x7149, 0x9F92},{0x714A, 0xECD3},{0x714B, 0x9F93},{0x714C, 0xBBCD},
- {0x714D, 0x9F94},{0x714E, 0xBCE5},{0x714F, 0x9F95},{0x7150, 0x9F96},{0x7151, 0x9F97},{0x7152, 0x9F98},{0x7153, 0x9F99},{0x7154, 0x9F9A},
- {0x7155, 0x9F9B},{0x7156, 0x9F9C},{0x7157, 0x9F9D},{0x7158, 0x9F9E},{0x7159, 0x9F9F},{0x715A, 0x9FA0},{0x715B, 0x9FA1},{0x715C, 0xECCF},
- {0x715D, 0x9FA2},{0x715E, 0xC9B7},{0x715F, 0x9FA3},{0x7160, 0x9FA4},{0x7161, 0x9FA5},{0x7162, 0x9FA6},{0x7163, 0x9FA7},{0x7164, 0xC3BA},
- {0x7165, 0x9FA8},{0x7166, 0xECE3},{0x7167, 0xD5D5},{0x7168, 0xECD0},{0x7169, 0x9FA9},{0x716A, 0x9FAA},{0x716B, 0x9FAB},{0x716C, 0x9FAC},
- {0x716D, 0x9FAD},{0x716E, 0xD6F3},{0x716F, 0x9FAE},{0x7170, 0x9FAF},{0x7171, 0x9FB0},{0x7172, 0xECD2},{0x7173, 0xECCE},{0x7174, 0x9FB1},
- {0x7175, 0x9FB2},{0x7176, 0x9FB3},{0x7177, 0x9FB4},{0x7178, 0xECD4},{0x7179, 0x9FB5},{0x717A, 0xECD5},{0x717B, 0x9FB6},{0x717C, 0x9FB7},
- {0x717D, 0xC9BF},{0x717E, 0x9FB8},{0x717F, 0x9FB9},{0x7180, 0x9FBA},{0x7181, 0x9FBB},{0x7182, 0x9FBC},{0x7183, 0x9FBD},{0x7184, 0xCFA8},
- {0x7185, 0x9FBE},{0x7186, 0x9FBF},{0x7187, 0x9FC0},{0x7188, 0x9FC1},{0x7189, 0x9FC2},{0x718A, 0xD0DC},{0x718B, 0x9FC3},{0x718C, 0x9FC4},
- {0x718D, 0x9FC5},{0x718E, 0x9FC6},{0x718F, 0xD1AC},{0x7190, 0x9FC7},{0x7191, 0x9FC8},{0x7192, 0x9FC9},{0x7193, 0x9FCA},{0x7194, 0xC8DB},
- {0x7195, 0x9FCB},{0x7196, 0x9FCC},{0x7197, 0x9FCD},{0x7198, 0xECD6},{0x7199, 0xCEF5},{0x719A, 0x9FCE},{0x719B, 0x9FCF},{0x719C, 0x9FD0},
- {0x719D, 0x9FD1},{0x719E, 0x9FD2},{0x719F, 0xCAEC},{0x71A0, 0xECDA},{0x71A1, 0x9FD3},{0x71A2, 0x9FD4},{0x71A3, 0x9FD5},{0x71A4, 0x9FD6},
- {0x71A5, 0x9FD7},{0x71A6, 0x9FD8},{0x71A7, 0x9FD9},{0x71A8, 0xECD9},{0x71A9, 0x9FDA},{0x71AA, 0x9FDB},{0x71AB, 0x9FDC},{0x71AC, 0xB0BE},
- {0x71AD, 0x9FDD},{0x71AE, 0x9FDE},{0x71AF, 0x9FDF},{0x71B0, 0x9FE0},{0x71B1, 0x9FE1},{0x71B2, 0x9FE2},{0x71B3, 0xECD7},{0x71B4, 0x9FE3},
- {0x71B5, 0xECD8},{0x71B6, 0x9FE4},{0x71B7, 0x9FE5},{0x71B8, 0x9FE6},{0x71B9, 0xECE4},{0x71BA, 0x9FE7},{0x71BB, 0x9FE8},{0x71BC, 0x9FE9},
- {0x71BD, 0x9FEA},{0x71BE, 0x9FEB},{0x71BF, 0x9FEC},{0x71C0, 0x9FED},{0x71C1, 0x9FEE},{0x71C2, 0x9FEF},{0x71C3, 0xC8BC},{0x71C4, 0x9FF0},
- {0x71C5, 0x9FF1},{0x71C6, 0x9FF2},{0x71C7, 0x9FF3},{0x71C8, 0x9FF4},{0x71C9, 0x9FF5},{0x71CA, 0x9FF6},{0x71CB, 0x9FF7},{0x71CC, 0x9FF8},
- {0x71CD, 0x9FF9},{0x71CE, 0xC1C7},{0x71CF, 0x9FFA},{0x71D0, 0x9FFB},{0x71D1, 0x9FFC},{0x71D2, 0x9FFD},{0x71D3, 0x9FFE},{0x71D4, 0xECDC},
- {0x71D5, 0xD1E0},{0x71D6, 0xA040},{0x71D7, 0xA041},{0x71D8, 0xA042},{0x71D9, 0xA043},{0x71DA, 0xA044},{0x71DB, 0xA045},{0x71DC, 0xA046},
- {0x71DD, 0xA047},{0x71DE, 0xA048},{0x71DF, 0xA049},{0x71E0, 0xECDB},{0x71E1, 0xA04A},{0x71E2, 0xA04B},{0x71E3, 0xA04C},{0x71E4, 0xA04D},
- {0x71E5, 0xD4EF},{0x71E6, 0xA04E},{0x71E7, 0xECDD},{0x71E8, 0xA04F},{0x71E9, 0xA050},{0x71EA, 0xA051},{0x71EB, 0xA052},{0x71EC, 0xA053},
- {0x71ED, 0xA054},{0x71EE, 0xDBC6},{0x71EF, 0xA055},{0x71F0, 0xA056},{0x71F1, 0xA057},{0x71F2, 0xA058},{0x71F3, 0xA059},{0x71F4, 0xA05A},
- {0x71F5, 0xA05B},{0x71F6, 0xA05C},{0x71F7, 0xA05D},{0x71F8, 0xA05E},{0x71F9, 0xECDE},{0x71FA, 0xA05F},{0x71FB, 0xA060},{0x71FC, 0xA061},
- {0x71FD, 0xA062},{0x71FE, 0xA063},{0x71FF, 0xA064},{0x7200, 0xA065},{0x7201, 0xA066},{0x7202, 0xA067},{0x7203, 0xA068},{0x7204, 0xA069},
- {0x7205, 0xA06A},{0x7206, 0xB1AC},{0x7207, 0xA06B},{0x7208, 0xA06C},{0x7209, 0xA06D},{0x720A, 0xA06E},{0x720B, 0xA06F},{0x720C, 0xA070},
- {0x720D, 0xA071},{0x720E, 0xA072},{0x720F, 0xA073},{0x7210, 0xA074},{0x7211, 0xA075},{0x7212, 0xA076},{0x7213, 0xA077},{0x7214, 0xA078},
- {0x7215, 0xA079},{0x7216, 0xA07A},{0x7217, 0xA07B},{0x7218, 0xA07C},{0x7219, 0xA07D},{0x721A, 0xA07E},{0x721B, 0xA080},{0x721C, 0xA081},
- {0x721D, 0xECDF},{0x721E, 0xA082},{0x721F, 0xA083},{0x7220, 0xA084},{0x7221, 0xA085},{0x7222, 0xA086},{0x7223, 0xA087},{0x7224, 0xA088},
- {0x7225, 0xA089},{0x7226, 0xA08A},{0x7227, 0xA08B},{0x7228, 0xECE0},{0x7229, 0xA08C},{0x722A, 0xD7A6},{0x722B, 0xA08D},{0x722C, 0xC5C0},
- {0x722D, 0xA08E},{0x722E, 0xA08F},{0x722F, 0xA090},{0x7230, 0xEBBC},{0x7231, 0xB0AE},{0x7232, 0xA091},{0x7233, 0xA092},{0x7234, 0xA093},
- {0x7235, 0xBEF4},{0x7236, 0xB8B8},{0x7237, 0xD2AF},{0x7238, 0xB0D6},{0x7239, 0xB5F9},{0x723A, 0xA094},{0x723B, 0xD8B3},{0x723C, 0xA095},
- {0x723D, 0xCBAC},{0x723E, 0xA096},{0x723F, 0xE3DD},{0x7240, 0xA097},{0x7241, 0xA098},{0x7242, 0xA099},{0x7243, 0xA09A},{0x7244, 0xA09B},
- {0x7245, 0xA09C},{0x7246, 0xA09D},{0x7247, 0xC6AC},{0x7248, 0xB0E6},{0x7249, 0xA09E},{0x724A, 0xA09F},{0x724B, 0xA0A0},{0x724C, 0xC5C6},
- {0x724D, 0xEBB9},{0x724E, 0xA0A1},{0x724F, 0xA0A2},{0x7250, 0xA0A3},{0x7251, 0xA0A4},{0x7252, 0xEBBA},{0x7253, 0xA0A5},{0x7254, 0xA0A6},
- {0x7255, 0xA0A7},{0x7256, 0xEBBB},{0x7257, 0xA0A8},{0x7258, 0xA0A9},{0x7259, 0xD1C0},{0x725A, 0xA0AA},{0x725B, 0xC5A3},{0x725C, 0xA0AB},
- {0x725D, 0xEAF2},{0x725E, 0xA0AC},{0x725F, 0xC4B2},{0x7260, 0xA0AD},{0x7261, 0xC4B5},{0x7262, 0xC0CE},{0x7263, 0xA0AE},{0x7264, 0xA0AF},
- {0x7265, 0xA0B0},{0x7266, 0xEAF3},{0x7267, 0xC4C1},{0x7268, 0xA0B1},{0x7269, 0xCEEF},{0x726A, 0xA0B2},{0x726B, 0xA0B3},{0x726C, 0xA0B4},
- {0x726D, 0xA0B5},{0x726E, 0xEAF0},{0x726F, 0xEAF4},{0x7270, 0xA0B6},{0x7271, 0xA0B7},{0x7272, 0xC9FC},{0x7273, 0xA0B8},{0x7274, 0xA0B9},
- {0x7275, 0xC7A3},{0x7276, 0xA0BA},{0x7277, 0xA0BB},{0x7278, 0xA0BC},{0x7279, 0xCCD8},{0x727A, 0xCEFE},{0x727B, 0xA0BD},{0x727C, 0xA0BE},
- {0x727D, 0xA0BF},{0x727E, 0xEAF5},{0x727F, 0xEAF6},{0x7280, 0xCFAC},{0x7281, 0xC0E7},{0x7282, 0xA0C0},{0x7283, 0xA0C1},{0x7284, 0xEAF7},
- {0x7285, 0xA0C2},{0x7286, 0xA0C3},{0x7287, 0xA0C4},{0x7288, 0xA0C5},{0x7289, 0xA0C6},{0x728A, 0xB6BF},{0x728B, 0xEAF8},{0x728C, 0xA0C7},
- {0x728D, 0xEAF9},{0x728E, 0xA0C8},{0x728F, 0xEAFA},{0x7290, 0xA0C9},{0x7291, 0xA0CA},{0x7292, 0xEAFB},{0x7293, 0xA0CB},{0x7294, 0xA0CC},
- {0x7295, 0xA0CD},{0x7296, 0xA0CE},{0x7297, 0xA0CF},{0x7298, 0xA0D0},{0x7299, 0xA0D1},{0x729A, 0xA0D2},{0x729B, 0xA0D3},{0x729C, 0xA0D4},
- {0x729D, 0xA0D5},{0x729E, 0xA0D6},{0x729F, 0xEAF1},{0x72A0, 0xA0D7},{0x72A1, 0xA0D8},{0x72A2, 0xA0D9},{0x72A3, 0xA0DA},{0x72A4, 0xA0DB},
- {0x72A5, 0xA0DC},{0x72A6, 0xA0DD},{0x72A7, 0xA0DE},{0x72A8, 0xA0DF},{0x72A9, 0xA0E0},{0x72AA, 0xA0E1},{0x72AB, 0xA0E2},{0x72AC, 0xC8AE},
- {0x72AD, 0xE1EB},{0x72AE, 0xA0E3},{0x72AF, 0xB7B8},{0x72B0, 0xE1EC},{0x72B1, 0xA0E4},{0x72B2, 0xA0E5},{0x72B3, 0xA0E6},{0x72B4, 0xE1ED},
- {0x72B5, 0xA0E7},{0x72B6, 0xD7B4},{0x72B7, 0xE1EE},{0x72B8, 0xE1EF},{0x72B9, 0xD3CC},{0x72BA, 0xA0E8},{0x72BB, 0xA0E9},{0x72BC, 0xA0EA},
- {0x72BD, 0xA0EB},{0x72BE, 0xA0EC},{0x72BF, 0xA0ED},{0x72C0, 0xA0EE},{0x72C1, 0xE1F1},{0x72C2, 0xBFF1},{0x72C3, 0xE1F0},{0x72C4, 0xB5D2},
- {0x72C5, 0xA0EF},{0x72C6, 0xA0F0},{0x72C7, 0xA0F1},{0x72C8, 0xB1B7},{0x72C9, 0xA0F2},{0x72CA, 0xA0F3},{0x72CB, 0xA0F4},{0x72CC, 0xA0F5},
- {0x72CD, 0xE1F3},{0x72CE, 0xE1F2},{0x72CF, 0xA0F6},{0x72D0, 0xBAFC},{0x72D1, 0xA0F7},{0x72D2, 0xE1F4},{0x72D3, 0xA0F8},{0x72D4, 0xA0F9},
- {0x72D5, 0xA0FA},{0x72D6, 0xA0FB},{0x72D7, 0xB9B7},{0x72D8, 0xA0FC},{0x72D9, 0xBED1},{0x72DA, 0xA0FD},{0x72DB, 0xA0FE},{0x72DC, 0xAA40},
- {0x72DD, 0xAA41},{0x72DE, 0xC4FC},{0x72DF, 0xAA42},{0x72E0, 0xBADD},{0x72E1, 0xBDC6},{0x72E2, 0xAA43},{0x72E3, 0xAA44},{0x72E4, 0xAA45},
- {0x72E5, 0xAA46},{0x72E6, 0xAA47},{0x72E7, 0xAA48},{0x72E8, 0xE1F5},{0x72E9, 0xE1F7},{0x72EA, 0xAA49},{0x72EB, 0xAA4A},{0x72EC, 0xB6C0},
- {0x72ED, 0xCFC1},{0x72EE, 0xCAA8},{0x72EF, 0xE1F6},{0x72F0, 0xD5F8},{0x72F1, 0xD3FC},{0x72F2, 0xE1F8},{0x72F3, 0xE1FC},{0x72F4, 0xE1F9},
- {0x72F5, 0xAA4B},{0x72F6, 0xAA4C},{0x72F7, 0xE1FA},{0x72F8, 0xC0EA},{0x72F9, 0xAA4D},{0x72FA, 0xE1FE},{0x72FB, 0xE2A1},{0x72FC, 0xC0C7},
- {0x72FD, 0xAA4E},{0x72FE, 0xAA4F},{0x72FF, 0xAA50},{0x7300, 0xAA51},{0x7301, 0xE1FB},{0x7302, 0xAA52},{0x7303, 0xE1FD},{0x7304, 0xAA53},
- {0x7305, 0xAA54},{0x7306, 0xAA55},{0x7307, 0xAA56},{0x7308, 0xAA57},{0x7309, 0xAA58},{0x730A, 0xE2A5},{0x730B, 0xAA59},{0x730C, 0xAA5A},
- {0x730D, 0xAA5B},{0x730E, 0xC1D4},{0x730F, 0xAA5C},{0x7310, 0xAA5D},{0x7311, 0xAA5E},{0x7312, 0xAA5F},{0x7313, 0xE2A3},{0x7314, 0xAA60},
- {0x7315, 0xE2A8},{0x7316, 0xB2FE},{0x7317, 0xE2A2},{0x7318, 0xAA61},{0x7319, 0xAA62},{0x731A, 0xAA63},{0x731B, 0xC3CD},{0x731C, 0xB2C2},
- {0x731D, 0xE2A7},{0x731E, 0xE2A6},{0x731F, 0xAA64},{0x7320, 0xAA65},{0x7321, 0xE2A4},{0x7322, 0xE2A9},{0x7323, 0xAA66},{0x7324, 0xAA67},
- {0x7325, 0xE2AB},{0x7326, 0xAA68},{0x7327, 0xAA69},{0x7328, 0xAA6A},{0x7329, 0xD0C9},{0x732A, 0xD6ED},{0x732B, 0xC3A8},{0x732C, 0xE2AC},
- {0x732D, 0xAA6B},{0x732E, 0xCFD7},{0x732F, 0xAA6C},{0x7330, 0xAA6D},{0x7331, 0xE2AE},{0x7332, 0xAA6E},{0x7333, 0xAA6F},{0x7334, 0xBAEF},
- {0x7335, 0xAA70},{0x7336, 0xAA71},{0x7337, 0xE9E0},{0x7338, 0xE2AD},{0x7339, 0xE2AA},{0x733A, 0xAA72},{0x733B, 0xAA73},{0x733C, 0xAA74},
- {0x733D, 0xAA75},{0x733E, 0xBBAB},{0x733F, 0xD4B3},{0x7340, 0xAA76},{0x7341, 0xAA77},{0x7342, 0xAA78},{0x7343, 0xAA79},{0x7344, 0xAA7A},
- {0x7345, 0xAA7B},{0x7346, 0xAA7C},{0x7347, 0xAA7D},{0x7348, 0xAA7E},{0x7349, 0xAA80},{0x734A, 0xAA81},{0x734B, 0xAA82},{0x734C, 0xAA83},
- {0x734D, 0xE2B0},{0x734E, 0xAA84},{0x734F, 0xAA85},{0x7350, 0xE2AF},{0x7351, 0xAA86},{0x7352, 0xE9E1},{0x7353, 0xAA87},{0x7354, 0xAA88},
- {0x7355, 0xAA89},{0x7356, 0xAA8A},{0x7357, 0xE2B1},{0x7358, 0xAA8B},{0x7359, 0xAA8C},{0x735A, 0xAA8D},{0x735B, 0xAA8E},{0x735C, 0xAA8F},
- {0x735D, 0xAA90},{0x735E, 0xAA91},{0x735F, 0xAA92},{0x7360, 0xE2B2},{0x7361, 0xAA93},{0x7362, 0xAA94},{0x7363, 0xAA95},{0x7364, 0xAA96},
- {0x7365, 0xAA97},{0x7366, 0xAA98},{0x7367, 0xAA99},{0x7368, 0xAA9A},{0x7369, 0xAA9B},{0x736A, 0xAA9C},{0x736B, 0xAA9D},{0x736C, 0xE2B3},
- {0x736D, 0xCCA1},{0x736E, 0xAA9E},{0x736F, 0xE2B4},{0x7370, 0xAA9F},{0x7371, 0xAAA0},{0x7372, 0xAB40},{0x7373, 0xAB41},{0x7374, 0xAB42},
- {0x7375, 0xAB43},{0x7376, 0xAB44},{0x7377, 0xAB45},{0x7378, 0xAB46},{0x7379, 0xAB47},{0x737A, 0xAB48},{0x737B, 0xAB49},{0x737C, 0xAB4A},
- {0x737D, 0xAB4B},{0x737E, 0xE2B5},{0x737F, 0xAB4C},{0x7380, 0xAB4D},{0x7381, 0xAB4E},{0x7382, 0xAB4F},{0x7383, 0xAB50},{0x7384, 0xD0FE},
- {0x7385, 0xAB51},{0x7386, 0xAB52},{0x7387, 0xC2CA},{0x7388, 0xAB53},{0x7389, 0xD3F1},{0x738A, 0xAB54},{0x738B, 0xCDF5},{0x738C, 0xAB55},
- {0x738D, 0xAB56},{0x738E, 0xE7E0},{0x738F, 0xAB57},{0x7390, 0xAB58},{0x7391, 0xE7E1},{0x7392, 0xAB59},{0x7393, 0xAB5A},{0x7394, 0xAB5B},
- {0x7395, 0xAB5C},{0x7396, 0xBEC1},{0x7397, 0xAB5D},{0x7398, 0xAB5E},{0x7399, 0xAB5F},{0x739A, 0xAB60},{0x739B, 0xC2EA},{0x739C, 0xAB61},
- {0x739D, 0xAB62},{0x739E, 0xAB63},{0x739F, 0xE7E4},{0x73A0, 0xAB64},{0x73A1, 0xAB65},{0x73A2, 0xE7E3},{0x73A3, 0xAB66},{0x73A4, 0xAB67},
- {0x73A5, 0xAB68},{0x73A6, 0xAB69},{0x73A7, 0xAB6A},{0x73A8, 0xAB6B},{0x73A9, 0xCDE6},{0x73AA, 0xAB6C},{0x73AB, 0xC3B5},{0x73AC, 0xAB6D},
- {0x73AD, 0xAB6E},{0x73AE, 0xE7E2},{0x73AF, 0xBBB7},{0x73B0, 0xCFD6},{0x73B1, 0xAB6F},{0x73B2, 0xC1E1},{0x73B3, 0xE7E9},{0x73B4, 0xAB70},
- {0x73B5, 0xAB71},{0x73B6, 0xAB72},{0x73B7, 0xE7E8},{0x73B8, 0xAB73},{0x73B9, 0xAB74},{0x73BA, 0xE7F4},{0x73BB, 0xB2A3},{0x73BC, 0xAB75},
- {0x73BD, 0xAB76},{0x73BE, 0xAB77},{0x73BF, 0xAB78},{0x73C0, 0xE7EA},{0x73C1, 0xAB79},{0x73C2, 0xE7E6},{0x73C3, 0xAB7A},{0x73C4, 0xAB7B},
- {0x73C5, 0xAB7C},{0x73C6, 0xAB7D},{0x73C7, 0xAB7E},{0x73C8, 0xE7EC},{0x73C9, 0xE7EB},{0x73CA, 0xC9BA},{0x73CB, 0xAB80},{0x73CC, 0xAB81},
- {0x73CD, 0xD5E4},{0x73CE, 0xAB82},{0x73CF, 0xE7E5},{0x73D0, 0xB7A9},{0x73D1, 0xE7E7},{0x73D2, 0xAB83},{0x73D3, 0xAB84},{0x73D4, 0xAB85},
- {0x73D5, 0xAB86},{0x73D6, 0xAB87},{0x73D7, 0xAB88},{0x73D8, 0xAB89},{0x73D9, 0xE7EE},{0x73DA, 0xAB8A},{0x73DB, 0xAB8B},{0x73DC, 0xAB8C},
- {0x73DD, 0xAB8D},{0x73DE, 0xE7F3},{0x73DF, 0xAB8E},{0x73E0, 0xD6E9},{0x73E1, 0xAB8F},{0x73E2, 0xAB90},{0x73E3, 0xAB91},{0x73E4, 0xAB92},
- {0x73E5, 0xE7ED},{0x73E6, 0xAB93},{0x73E7, 0xE7F2},{0x73E8, 0xAB94},{0x73E9, 0xE7F1},{0x73EA, 0xAB95},{0x73EB, 0xAB96},{0x73EC, 0xAB97},
- {0x73ED, 0xB0E0},{0x73EE, 0xAB98},{0x73EF, 0xAB99},{0x73F0, 0xAB9A},{0x73F1, 0xAB9B},{0x73F2, 0xE7F5},{0x73F3, 0xAB9C},{0x73F4, 0xAB9D},
- {0x73F5, 0xAB9E},{0x73F6, 0xAB9F},{0x73F7, 0xABA0},{0x73F8, 0xAC40},{0x73F9, 0xAC41},{0x73FA, 0xAC42},{0x73FB, 0xAC43},{0x73FC, 0xAC44},
- {0x73FD, 0xAC45},{0x73FE, 0xAC46},{0x73FF, 0xAC47},{0x7400, 0xAC48},{0x7401, 0xAC49},{0x7402, 0xAC4A},{0x7403, 0xC7F2},{0x7404, 0xAC4B},
- {0x7405, 0xC0C5},{0x7406, 0xC0ED},{0x7407, 0xAC4C},{0x7408, 0xAC4D},{0x7409, 0xC1F0},{0x740A, 0xE7F0},{0x740B, 0xAC4E},{0x740C, 0xAC4F},
- {0x740D, 0xAC50},{0x740E, 0xAC51},{0x740F, 0xE7F6},{0x7410, 0xCBF6},{0x7411, 0xAC52},{0x7412, 0xAC53},{0x7413, 0xAC54},{0x7414, 0xAC55},
- {0x7415, 0xAC56},{0x7416, 0xAC57},{0x7417, 0xAC58},{0x7418, 0xAC59},{0x7419, 0xAC5A},{0x741A, 0xE8A2},{0x741B, 0xE8A1},{0x741C, 0xAC5B},
- {0x741D, 0xAC5C},{0x741E, 0xAC5D},{0x741F, 0xAC5E},{0x7420, 0xAC5F},{0x7421, 0xAC60},{0x7422, 0xD7C1},{0x7423, 0xAC61},{0x7424, 0xAC62},
- {0x7425, 0xE7FA},{0x7426, 0xE7F9},{0x7427, 0xAC63},{0x7428, 0xE7FB},{0x7429, 0xAC64},{0x742A, 0xE7F7},{0x742B, 0xAC65},{0x742C, 0xE7FE},
- {0x742D, 0xAC66},{0x742E, 0xE7FD},{0x742F, 0xAC67},{0x7430, 0xE7FC},{0x7431, 0xAC68},{0x7432, 0xAC69},{0x7433, 0xC1D5},{0x7434, 0xC7D9},
- {0x7435, 0xC5FD},{0x7436, 0xC5C3},{0x7437, 0xAC6A},{0x7438, 0xAC6B},{0x7439, 0xAC6C},{0x743A, 0xAC6D},{0x743B, 0xAC6E},{0x743C, 0xC7ED},
- {0x743D, 0xAC6F},{0x743E, 0xAC70},{0x743F, 0xAC71},{0x7440, 0xAC72},{0x7441, 0xE8A3},{0x7442, 0xAC73},{0x7443, 0xAC74},{0x7444, 0xAC75},
- {0x7445, 0xAC76},{0x7446, 0xAC77},{0x7447, 0xAC78},{0x7448, 0xAC79},{0x7449, 0xAC7A},{0x744A, 0xAC7B},{0x744B, 0xAC7C},{0x744C, 0xAC7D},
- {0x744D, 0xAC7E},{0x744E, 0xAC80},{0x744F, 0xAC81},{0x7450, 0xAC82},{0x7451, 0xAC83},{0x7452, 0xAC84},{0x7453, 0xAC85},{0x7454, 0xAC86},
- {0x7455, 0xE8A6},{0x7456, 0xAC87},{0x7457, 0xE8A5},{0x7458, 0xAC88},{0x7459, 0xE8A7},{0x745A, 0xBAF7},{0x745B, 0xE7F8},{0x745C, 0xE8A4},
- {0x745D, 0xAC89},{0x745E, 0xC8F0},{0x745F, 0xC9AA},{0x7460, 0xAC8A},{0x7461, 0xAC8B},{0x7462, 0xAC8C},{0x7463, 0xAC8D},{0x7464, 0xAC8E},
- {0x7465, 0xAC8F},{0x7466, 0xAC90},{0x7467, 0xAC91},{0x7468, 0xAC92},{0x7469, 0xAC93},{0x746A, 0xAC94},{0x746B, 0xAC95},{0x746C, 0xAC96},
- {0x746D, 0xE8A9},{0x746E, 0xAC97},{0x746F, 0xAC98},{0x7470, 0xB9E5},{0x7471, 0xAC99},{0x7472, 0xAC9A},{0x7473, 0xAC9B},{0x7474, 0xAC9C},
- {0x7475, 0xAC9D},{0x7476, 0xD1FE},{0x7477, 0xE8A8},{0x7478, 0xAC9E},{0x7479, 0xAC9F},{0x747A, 0xACA0},{0x747B, 0xAD40},{0x747C, 0xAD41},
- {0x747D, 0xAD42},{0x747E, 0xE8AA},{0x747F, 0xAD43},{0x7480, 0xE8AD},{0x7481, 0xE8AE},{0x7482, 0xAD44},{0x7483, 0xC1A7},{0x7484, 0xAD45},
- {0x7485, 0xAD46},{0x7486, 0xAD47},{0x7487, 0xE8AF},{0x7488, 0xAD48},{0x7489, 0xAD49},{0x748A, 0xAD4A},{0x748B, 0xE8B0},{0x748C, 0xAD4B},
- {0x748D, 0xAD4C},{0x748E, 0xE8AC},{0x748F, 0xAD4D},{0x7490, 0xE8B4},{0x7491, 0xAD4E},{0x7492, 0xAD4F},{0x7493, 0xAD50},{0x7494, 0xAD51},
- {0x7495, 0xAD52},{0x7496, 0xAD53},{0x7497, 0xAD54},{0x7498, 0xAD55},{0x7499, 0xAD56},{0x749A, 0xAD57},{0x749B, 0xAD58},{0x749C, 0xE8AB},
- {0x749D, 0xAD59},{0x749E, 0xE8B1},{0x749F, 0xAD5A},{0x74A0, 0xAD5B},{0x74A1, 0xAD5C},{0x74A2, 0xAD5D},{0x74A3, 0xAD5E},{0x74A4, 0xAD5F},
- {0x74A5, 0xAD60},{0x74A6, 0xAD61},{0x74A7, 0xE8B5},{0x74A8, 0xE8B2},{0x74A9, 0xE8B3},{0x74AA, 0xAD62},{0x74AB, 0xAD63},{0x74AC, 0xAD64},
- {0x74AD, 0xAD65},{0x74AE, 0xAD66},{0x74AF, 0xAD67},{0x74B0, 0xAD68},{0x74B1, 0xAD69},{0x74B2, 0xAD6A},{0x74B3, 0xAD6B},{0x74B4, 0xAD6C},
- {0x74B5, 0xAD6D},{0x74B6, 0xAD6E},{0x74B7, 0xAD6F},{0x74B8, 0xAD70},{0x74B9, 0xAD71},{0x74BA, 0xE8B7},{0x74BB, 0xAD72},{0x74BC, 0xAD73},
- {0x74BD, 0xAD74},{0x74BE, 0xAD75},{0x74BF, 0xAD76},{0x74C0, 0xAD77},{0x74C1, 0xAD78},{0x74C2, 0xAD79},{0x74C3, 0xAD7A},{0x74C4, 0xAD7B},
- {0x74C5, 0xAD7C},{0x74C6, 0xAD7D},{0x74C7, 0xAD7E},{0x74C8, 0xAD80},{0x74C9, 0xAD81},{0x74CA, 0xAD82},{0x74CB, 0xAD83},{0x74CC, 0xAD84},
- {0x74CD, 0xAD85},{0x74CE, 0xAD86},{0x74CF, 0xAD87},{0x74D0, 0xAD88},{0x74D1, 0xAD89},{0x74D2, 0xE8B6},{0x74D3, 0xAD8A},{0x74D4, 0xAD8B},
- {0x74D5, 0xAD8C},{0x74D6, 0xAD8D},{0x74D7, 0xAD8E},{0x74D8, 0xAD8F},{0x74D9, 0xAD90},{0x74DA, 0xAD91},{0x74DB, 0xAD92},{0x74DC, 0xB9CF},
- {0x74DD, 0xAD93},{0x74DE, 0xF0AC},{0x74DF, 0xAD94},{0x74E0, 0xF0AD},{0x74E1, 0xAD95},{0x74E2, 0xC6B0},{0x74E3, 0xB0EA},{0x74E4, 0xC8BF},
- {0x74E5, 0xAD96},{0x74E6, 0xCDDF},{0x74E7, 0xAD97},{0x74E8, 0xAD98},{0x74E9, 0xAD99},{0x74EA, 0xAD9A},{0x74EB, 0xAD9B},{0x74EC, 0xAD9C},
- {0x74ED, 0xAD9D},{0x74EE, 0xCECD},{0x74EF, 0xEAB1},{0x74F0, 0xAD9E},{0x74F1, 0xAD9F},{0x74F2, 0xADA0},{0x74F3, 0xAE40},{0x74F4, 0xEAB2},
- {0x74F5, 0xAE41},{0x74F6, 0xC6BF},{0x74F7, 0xB4C9},{0x74F8, 0xAE42},{0x74F9, 0xAE43},{0x74FA, 0xAE44},{0x74FB, 0xAE45},{0x74FC, 0xAE46},
- {0x74FD, 0xAE47},{0x74FE, 0xAE48},{0x74FF, 0xEAB3},{0x7500, 0xAE49},{0x7501, 0xAE4A},{0x7502, 0xAE4B},{0x7503, 0xAE4C},{0x7504, 0xD5E7},
- {0x7505, 0xAE4D},{0x7506, 0xAE4E},{0x7507, 0xAE4F},{0x7508, 0xAE50},{0x7509, 0xAE51},{0x750A, 0xAE52},{0x750B, 0xAE53},{0x750C, 0xAE54},
- {0x750D, 0xDDF9},{0x750E, 0xAE55},{0x750F, 0xEAB4},{0x7510, 0xAE56},{0x7511, 0xEAB5},{0x7512, 0xAE57},{0x7513, 0xEAB6},{0x7514, 0xAE58},
- {0x7515, 0xAE59},{0x7516, 0xAE5A},{0x7517, 0xAE5B},{0x7518, 0xB8CA},{0x7519, 0xDFB0},{0x751A, 0xC9F5},{0x751B, 0xAE5C},{0x751C, 0xCCF0},
- {0x751D, 0xAE5D},{0x751E, 0xAE5E},{0x751F, 0xC9FA},{0x7520, 0xAE5F},{0x7521, 0xAE60},{0x7522, 0xAE61},{0x7523, 0xAE62},{0x7524, 0xAE63},
- {0x7525, 0xC9FB},{0x7526, 0xAE64},{0x7527, 0xAE65},{0x7528, 0xD3C3},{0x7529, 0xCBA6},{0x752A, 0xAE66},{0x752B, 0xB8A6},{0x752C, 0xF0AE},
- {0x752D, 0xB1C2},{0x752E, 0xAE67},{0x752F, 0xE5B8},{0x7530, 0xCCEF},{0x7531, 0xD3C9},{0x7532, 0xBCD7},{0x7533, 0xC9EA},{0x7534, 0xAE68},
- {0x7535, 0xB5E7},{0x7536, 0xAE69},{0x7537, 0xC4D0},{0x7538, 0xB5E9},{0x7539, 0xAE6A},{0x753A, 0xEEAE},{0x753B, 0xBBAD},{0x753C, 0xAE6B},
- {0x753D, 0xAE6C},{0x753E, 0xE7DE},{0x753F, 0xAE6D},{0x7540, 0xEEAF},{0x7541, 0xAE6E},{0x7542, 0xAE6F},{0x7543, 0xAE70},{0x7544, 0xAE71},
- {0x7545, 0xB3A9},{0x7546, 0xAE72},{0x7547, 0xAE73},{0x7548, 0xEEB2},{0x7549, 0xAE74},{0x754A, 0xAE75},{0x754B, 0xEEB1},{0x754C, 0xBDE7},
- {0x754D, 0xAE76},{0x754E, 0xEEB0},{0x754F, 0xCEB7},{0x7550, 0xAE77},{0x7551, 0xAE78},{0x7552, 0xAE79},{0x7553, 0xAE7A},{0x7554, 0xC5CF},
- {0x7555, 0xAE7B},{0x7556, 0xAE7C},{0x7557, 0xAE7D},{0x7558, 0xAE7E},{0x7559, 0xC1F4},{0x755A, 0xDBCE},{0x755B, 0xEEB3},{0x755C, 0xD0F3},
- {0x755D, 0xAE80},{0x755E, 0xAE81},{0x755F, 0xAE82},{0x7560, 0xAE83},{0x7561, 0xAE84},{0x7562, 0xAE85},{0x7563, 0xAE86},{0x7564, 0xAE87},
- {0x7565, 0xC2D4},{0x7566, 0xC6E8},{0x7567, 0xAE88},{0x7568, 0xAE89},{0x7569, 0xAE8A},{0x756A, 0xB7AC},{0x756B, 0xAE8B},{0x756C, 0xAE8C},
- {0x756D, 0xAE8D},{0x756E, 0xAE8E},{0x756F, 0xAE8F},{0x7570, 0xAE90},{0x7571, 0xAE91},{0x7572, 0xEEB4},{0x7573, 0xAE92},{0x7574, 0xB3EB},
- {0x7575, 0xAE93},{0x7576, 0xAE94},{0x7577, 0xAE95},{0x7578, 0xBBFB},{0x7579, 0xEEB5},{0x757A, 0xAE96},{0x757B, 0xAE97},{0x757C, 0xAE98},
- {0x757D, 0xAE99},{0x757E, 0xAE9A},{0x757F, 0xE7DC},{0x7580, 0xAE9B},{0x7581, 0xAE9C},{0x7582, 0xAE9D},{0x7583, 0xEEB6},{0x7584, 0xAE9E},
- {0x7585, 0xAE9F},{0x7586, 0xBDAE},{0x7587, 0xAEA0},{0x7588, 0xAF40},{0x7589, 0xAF41},{0x758A, 0xAF42},{0x758B, 0xF1E2},{0x758C, 0xAF43},
- {0x758D, 0xAF44},{0x758E, 0xAF45},{0x758F, 0xCAE8},{0x7590, 0xAF46},{0x7591, 0xD2C9},{0x7592, 0xF0DA},{0x7593, 0xAF47},{0x7594, 0xF0DB},
- {0x7595, 0xAF48},{0x7596, 0xF0DC},{0x7597, 0xC1C6},{0x7598, 0xAF49},{0x7599, 0xB8ED},{0x759A, 0xBECE},{0x759B, 0xAF4A},{0x759C, 0xAF4B},
- {0x759D, 0xF0DE},{0x759E, 0xAF4C},{0x759F, 0xC5B1},{0x75A0, 0xF0DD},{0x75A1, 0xD1F1},{0x75A2, 0xAF4D},{0x75A3, 0xF0E0},{0x75A4, 0xB0CC},
- {0x75A5, 0xBDEA},{0x75A6, 0xAF4E},{0x75A7, 0xAF4F},{0x75A8, 0xAF50},{0x75A9, 0xAF51},{0x75AA, 0xAF52},{0x75AB, 0xD2DF},{0x75AC, 0xF0DF},
- {0x75AD, 0xAF53},{0x75AE, 0xB4AF},{0x75AF, 0xB7E8},{0x75B0, 0xF0E6},{0x75B1, 0xF0E5},{0x75B2, 0xC6A3},{0x75B3, 0xF0E1},{0x75B4, 0xF0E2},
- {0x75B5, 0xB4C3},{0x75B6, 0xAF54},{0x75B7, 0xAF55},{0x75B8, 0xF0E3},{0x75B9, 0xD5EE},{0x75BA, 0xAF56},{0x75BB, 0xAF57},{0x75BC, 0xCCDB},
- {0x75BD, 0xBED2},{0x75BE, 0xBCB2},{0x75BF, 0xAF58},{0x75C0, 0xAF59},{0x75C1, 0xAF5A},{0x75C2, 0xF0E8},{0x75C3, 0xF0E7},{0x75C4, 0xF0E4},
- {0x75C5, 0xB2A1},{0x75C6, 0xAF5B},{0x75C7, 0xD6A2},{0x75C8, 0xD3B8},{0x75C9, 0xBEB7},{0x75CA, 0xC8AC},{0x75CB, 0xAF5C},{0x75CC, 0xAF5D},
- {0x75CD, 0xF0EA},{0x75CE, 0xAF5E},{0x75CF, 0xAF5F},{0x75D0, 0xAF60},{0x75D1, 0xAF61},{0x75D2, 0xD1F7},{0x75D3, 0xAF62},{0x75D4, 0xD6CC},
- {0x75D5, 0xBADB},{0x75D6, 0xF0E9},{0x75D7, 0xAF63},{0x75D8, 0xB6BB},{0x75D9, 0xAF64},{0x75DA, 0xAF65},{0x75DB, 0xCDB4},{0x75DC, 0xAF66},
- {0x75DD, 0xAF67},{0x75DE, 0xC6A6},{0x75DF, 0xAF68},{0x75E0, 0xAF69},{0x75E1, 0xAF6A},{0x75E2, 0xC1A1},{0x75E3, 0xF0EB},{0x75E4, 0xF0EE},
- {0x75E5, 0xAF6B},{0x75E6, 0xF0ED},{0x75E7, 0xF0F0},{0x75E8, 0xF0EC},{0x75E9, 0xAF6C},{0x75EA, 0xBBBE},{0x75EB, 0xF0EF},{0x75EC, 0xAF6D},
- {0x75ED, 0xAF6E},{0x75EE, 0xAF6F},{0x75EF, 0xAF70},{0x75F0, 0xCCB5},{0x75F1, 0xF0F2},{0x75F2, 0xAF71},{0x75F3, 0xAF72},{0x75F4, 0xB3D5},
- {0x75F5, 0xAF73},{0x75F6, 0xAF74},{0x75F7, 0xAF75},{0x75F8, 0xAF76},{0x75F9, 0xB1D4},{0x75FA, 0xAF77},{0x75FB, 0xAF78},{0x75FC, 0xF0F3},
- {0x75FD, 0xAF79},{0x75FE, 0xAF7A},{0x75FF, 0xF0F4},{0x7600, 0xF0F6},{0x7601, 0xB4E1},{0x7602, 0xAF7B},{0x7603, 0xF0F1},{0x7604, 0xAF7C},
- {0x7605, 0xF0F7},{0x7606, 0xAF7D},{0x7607, 0xAF7E},{0x7608, 0xAF80},{0x7609, 0xAF81},{0x760A, 0xF0FA},{0x760B, 0xAF82},{0x760C, 0xF0F8},
- {0x760D, 0xAF83},{0x760E, 0xAF84},{0x760F, 0xAF85},{0x7610, 0xF0F5},{0x7611, 0xAF86},{0x7612, 0xAF87},{0x7613, 0xAF88},{0x7614, 0xAF89},
- {0x7615, 0xF0FD},{0x7616, 0xAF8A},{0x7617, 0xF0F9},{0x7618, 0xF0FC},{0x7619, 0xF0FE},{0x761A, 0xAF8B},{0x761B, 0xF1A1},{0x761C, 0xAF8C},
- {0x761D, 0xAF8D},{0x761E, 0xAF8E},{0x761F, 0xCEC1},{0x7620, 0xF1A4},{0x7621, 0xAF8F},{0x7622, 0xF1A3},{0x7623, 0xAF90},{0x7624, 0xC1F6},
- {0x7625, 0xF0FB},{0x7626, 0xCADD},{0x7627, 0xAF91},{0x7628, 0xAF92},{0x7629, 0xB4F1},{0x762A, 0xB1F1},{0x762B, 0xCCB1},{0x762C, 0xAF93},
- {0x762D, 0xF1A6},{0x762E, 0xAF94},{0x762F, 0xAF95},{0x7630, 0xF1A7},{0x7631, 0xAF96},{0x7632, 0xAF97},{0x7633, 0xF1AC},{0x7634, 0xD5CE},
- {0x7635, 0xF1A9},{0x7636, 0xAF98},{0x7637, 0xAF99},{0x7638, 0xC8B3},{0x7639, 0xAF9A},{0x763A, 0xAF9B},{0x763B, 0xAF9C},{0x763C, 0xF1A2},
- {0x763D, 0xAF9D},{0x763E, 0xF1AB},{0x763F, 0xF1A8},{0x7640, 0xF1A5},{0x7641, 0xAF9E},{0x7642, 0xAF9F},{0x7643, 0xF1AA},{0x7644, 0xAFA0},
- {0x7645, 0xB040},{0x7646, 0xB041},{0x7647, 0xB042},{0x7648, 0xB043},{0x7649, 0xB044},{0x764A, 0xB045},{0x764B, 0xB046},{0x764C, 0xB0A9},
- {0x764D, 0xF1AD},{0x764E, 0xB047},{0x764F, 0xB048},{0x7650, 0xB049},{0x7651, 0xB04A},{0x7652, 0xB04B},{0x7653, 0xB04C},{0x7654, 0xF1AF},
- {0x7655, 0xB04D},{0x7656, 0xF1B1},{0x7657, 0xB04E},{0x7658, 0xB04F},{0x7659, 0xB050},{0x765A, 0xB051},{0x765B, 0xB052},{0x765C, 0xF1B0},
- {0x765D, 0xB053},{0x765E, 0xF1AE},{0x765F, 0xB054},{0x7660, 0xB055},{0x7661, 0xB056},{0x7662, 0xB057},{0x7663, 0xD1A2},{0x7664, 0xB058},
- {0x7665, 0xB059},{0x7666, 0xB05A},{0x7667, 0xB05B},{0x7668, 0xB05C},{0x7669, 0xB05D},{0x766A, 0xB05E},{0x766B, 0xF1B2},{0x766C, 0xB05F},
- {0x766D, 0xB060},{0x766E, 0xB061},{0x766F, 0xF1B3},{0x7670, 0xB062},{0x7671, 0xB063},{0x7672, 0xB064},{0x7673, 0xB065},{0x7674, 0xB066},
- {0x7675, 0xB067},{0x7676, 0xB068},{0x7677, 0xB069},{0x7678, 0xB9EF},{0x7679, 0xB06A},{0x767A, 0xB06B},{0x767B, 0xB5C7},{0x767C, 0xB06C},
- {0x767D, 0xB0D7},{0x767E, 0xB0D9},{0x767F, 0xB06D},{0x7680, 0xB06E},{0x7681, 0xB06F},{0x7682, 0xD4ED},{0x7683, 0xB070},{0x7684, 0xB5C4},
- {0x7685, 0xB071},{0x7686, 0xBDD4},{0x7687, 0xBBCA},{0x7688, 0xF0A7},{0x7689, 0xB072},{0x768A, 0xB073},{0x768B, 0xB8DE},{0x768C, 0xB074},
- {0x768D, 0xB075},{0x768E, 0xF0A8},{0x768F, 0xB076},{0x7690, 0xB077},{0x7691, 0xB0A8},{0x7692, 0xB078},{0x7693, 0xF0A9},{0x7694, 0xB079},
- {0x7695, 0xB07A},{0x7696, 0xCDEE},{0x7697, 0xB07B},{0x7698, 0xB07C},{0x7699, 0xF0AA},{0x769A, 0xB07D},{0x769B, 0xB07E},{0x769C, 0xB080},
- {0x769D, 0xB081},{0x769E, 0xB082},{0x769F, 0xB083},{0x76A0, 0xB084},{0x76A1, 0xB085},{0x76A2, 0xB086},{0x76A3, 0xB087},{0x76A4, 0xF0AB},
- {0x76A5, 0xB088},{0x76A6, 0xB089},{0x76A7, 0xB08A},{0x76A8, 0xB08B},{0x76A9, 0xB08C},{0x76AA, 0xB08D},{0x76AB, 0xB08E},{0x76AC, 0xB08F},
- {0x76AD, 0xB090},{0x76AE, 0xC6A4},{0x76AF, 0xB091},{0x76B0, 0xB092},{0x76B1, 0xD6E5},{0x76B2, 0xF1E4},{0x76B3, 0xB093},{0x76B4, 0xF1E5},
- {0x76B5, 0xB094},{0x76B6, 0xB095},{0x76B7, 0xB096},{0x76B8, 0xB097},{0x76B9, 0xB098},{0x76BA, 0xB099},{0x76BB, 0xB09A},{0x76BC, 0xB09B},
- {0x76BD, 0xB09C},{0x76BE, 0xB09D},{0x76BF, 0xC3F3},{0x76C0, 0xB09E},{0x76C1, 0xB09F},{0x76C2, 0xD3DB},{0x76C3, 0xB0A0},{0x76C4, 0xB140},
- {0x76C5, 0xD6D1},{0x76C6, 0xC5E8},{0x76C7, 0xB141},{0x76C8, 0xD3AF},{0x76C9, 0xB142},{0x76CA, 0xD2E6},{0x76CB, 0xB143},{0x76CC, 0xB144},
- {0x76CD, 0xEEC1},{0x76CE, 0xB0BB},{0x76CF, 0xD5B5},{0x76D0, 0xD1CE},{0x76D1, 0xBCE0},{0x76D2, 0xBAD0},{0x76D3, 0xB145},{0x76D4, 0xBFF8},
- {0x76D5, 0xB146},{0x76D6, 0xB8C7},{0x76D7, 0xB5C1},{0x76D8, 0xC5CC},{0x76D9, 0xB147},{0x76DA, 0xB148},{0x76DB, 0xCAA2},{0x76DC, 0xB149},
- {0x76DD, 0xB14A},{0x76DE, 0xB14B},{0x76DF, 0xC3CB},{0x76E0, 0xB14C},{0x76E1, 0xB14D},{0x76E2, 0xB14E},{0x76E3, 0xB14F},{0x76E4, 0xB150},
- {0x76E5, 0xEEC2},{0x76E6, 0xB151},{0x76E7, 0xB152},{0x76E8, 0xB153},{0x76E9, 0xB154},{0x76EA, 0xB155},{0x76EB, 0xB156},{0x76EC, 0xB157},
- {0x76ED, 0xB158},{0x76EE, 0xC4BF},{0x76EF, 0xB6A2},{0x76F0, 0xB159},{0x76F1, 0xEDEC},{0x76F2, 0xC3A4},{0x76F3, 0xB15A},{0x76F4, 0xD6B1},
- {0x76F5, 0xB15B},{0x76F6, 0xB15C},{0x76F7, 0xB15D},{0x76F8, 0xCFE0},{0x76F9, 0xEDEF},{0x76FA, 0xB15E},{0x76FB, 0xB15F},{0x76FC, 0xC5CE},
- {0x76FD, 0xB160},{0x76FE, 0xB6DC},{0x76FF, 0xB161},{0x7700, 0xB162},{0x7701, 0xCAA1},{0x7702, 0xB163},{0x7703, 0xB164},{0x7704, 0xEDED},
- {0x7705, 0xB165},{0x7706, 0xB166},{0x7707, 0xEDF0},{0x7708, 0xEDF1},{0x7709, 0xC3BC},{0x770A, 0xB167},{0x770B, 0xBFB4},{0x770C, 0xB168},
- {0x770D, 0xEDEE},{0x770E, 0xB169},{0x770F, 0xB16A},{0x7710, 0xB16B},{0x7711, 0xB16C},{0x7712, 0xB16D},{0x7713, 0xB16E},{0x7714, 0xB16F},
- {0x7715, 0xB170},{0x7716, 0xB171},{0x7717, 0xB172},{0x7718, 0xB173},{0x7719, 0xEDF4},{0x771A, 0xEDF2},{0x771B, 0xB174},{0x771C, 0xB175},
- {0x771D, 0xB176},{0x771E, 0xB177},{0x771F, 0xD5E6},{0x7720, 0xC3DF},{0x7721, 0xB178},{0x7722, 0xEDF3},{0x7723, 0xB179},{0x7724, 0xB17A},
- {0x7725, 0xB17B},{0x7726, 0xEDF6},{0x7727, 0xB17C},{0x7728, 0xD5A3},{0x7729, 0xD1A3},{0x772A, 0xB17D},{0x772B, 0xB17E},{0x772C, 0xB180},
- {0x772D, 0xEDF5},{0x772E, 0xB181},{0x772F, 0xC3D0},{0x7730, 0xB182},{0x7731, 0xB183},{0x7732, 0xB184},{0x7733, 0xB185},{0x7734, 0xB186},
- {0x7735, 0xEDF7},{0x7736, 0xBFF4},{0x7737, 0xBEEC},{0x7738, 0xEDF8},{0x7739, 0xB187},{0x773A, 0xCCF7},{0x773B, 0xB188},{0x773C, 0xD1DB},
- {0x773D, 0xB189},{0x773E, 0xB18A},{0x773F, 0xB18B},{0x7740, 0xD7C5},{0x7741, 0xD5F6},{0x7742, 0xB18C},{0x7743, 0xEDFC},{0x7744, 0xB18D},
- {0x7745, 0xB18E},{0x7746, 0xB18F},{0x7747, 0xEDFB},{0x7748, 0xB190},{0x7749, 0xB191},{0x774A, 0xB192},{0x774B, 0xB193},{0x774C, 0xB194},
- {0x774D, 0xB195},{0x774E, 0xB196},{0x774F, 0xB197},{0x7750, 0xEDF9},{0x7751, 0xEDFA},{0x7752, 0xB198},{0x7753, 0xB199},{0x7754, 0xB19A},
- {0x7755, 0xB19B},{0x7756, 0xB19C},{0x7757, 0xB19D},{0x7758, 0xB19E},{0x7759, 0xB19F},{0x775A, 0xEDFD},{0x775B, 0xBEA6},{0x775C, 0xB1A0},
- {0x775D, 0xB240},{0x775E, 0xB241},{0x775F, 0xB242},{0x7760, 0xB243},{0x7761, 0xCBAF},{0x7762, 0xEEA1},{0x7763, 0xB6BD},{0x7764, 0xB244},
- {0x7765, 0xEEA2},{0x7766, 0xC4C0},{0x7767, 0xB245},{0x7768, 0xEDFE},{0x7769, 0xB246},{0x776A, 0xB247},{0x776B, 0xBDDE},{0x776C, 0xB2C7},
- {0x776D, 0xB248},{0x776E, 0xB249},{0x776F, 0xB24A},{0x7770, 0xB24B},{0x7771, 0xB24C},{0x7772, 0xB24D},{0x7773, 0xB24E},{0x7774, 0xB24F},
- {0x7775, 0xB250},{0x7776, 0xB251},{0x7777, 0xB252},{0x7778, 0xB253},{0x7779, 0xB6C3},{0x777A, 0xB254},{0x777B, 0xB255},{0x777C, 0xB256},
- {0x777D, 0xEEA5},{0x777E, 0xD8BA},{0x777F, 0xEEA3},{0x7780, 0xEEA6},{0x7781, 0xB257},{0x7782, 0xB258},{0x7783, 0xB259},{0x7784, 0xC3E9},
- {0x7785, 0xB3F2},{0x7786, 0xB25A},{0x7787, 0xB25B},{0x7788, 0xB25C},{0x7789, 0xB25D},{0x778A, 0xB25E},{0x778B, 0xB25F},{0x778C, 0xEEA7},
- {0x778D, 0xEEA4},{0x778E, 0xCFB9},{0x778F, 0xB260},{0x7790, 0xB261},{0x7791, 0xEEA8},{0x7792, 0xC2F7},{0x7793, 0xB262},{0x7794, 0xB263},
- {0x7795, 0xB264},{0x7796, 0xB265},{0x7797, 0xB266},{0x7798, 0xB267},{0x7799, 0xB268},{0x779A, 0xB269},{0x779B, 0xB26A},{0x779C, 0xB26B},
- {0x779D, 0xB26C},{0x779E, 0xB26D},{0x779F, 0xEEA9},{0x77A0, 0xEEAA},{0x77A1, 0xB26E},{0x77A2, 0xDEAB},{0x77A3, 0xB26F},{0x77A4, 0xB270},
- {0x77A5, 0xC6B3},{0x77A6, 0xB271},{0x77A7, 0xC7C6},{0x77A8, 0xB272},{0x77A9, 0xD6F5},{0x77AA, 0xB5C9},{0x77AB, 0xB273},{0x77AC, 0xCBB2},
- {0x77AD, 0xB274},{0x77AE, 0xB275},{0x77AF, 0xB276},{0x77B0, 0xEEAB},{0x77B1, 0xB277},{0x77B2, 0xB278},{0x77B3, 0xCDAB},{0x77B4, 0xB279},
- {0x77B5, 0xEEAC},{0x77B6, 0xB27A},{0x77B7, 0xB27B},{0x77B8, 0xB27C},{0x77B9, 0xB27D},{0x77BA, 0xB27E},{0x77BB, 0xD5B0},{0x77BC, 0xB280},
- {0x77BD, 0xEEAD},{0x77BE, 0xB281},{0x77BF, 0xF6C4},{0x77C0, 0xB282},{0x77C1, 0xB283},{0x77C2, 0xB284},{0x77C3, 0xB285},{0x77C4, 0xB286},
- {0x77C5, 0xB287},{0x77C6, 0xB288},{0x77C7, 0xB289},{0x77C8, 0xB28A},{0x77C9, 0xB28B},{0x77CA, 0xB28C},{0x77CB, 0xB28D},{0x77CC, 0xB28E},
- {0x77CD, 0xDBC7},{0x77CE, 0xB28F},{0x77CF, 0xB290},{0x77D0, 0xB291},{0x77D1, 0xB292},{0x77D2, 0xB293},{0x77D3, 0xB294},{0x77D4, 0xB295},
- {0x77D5, 0xB296},{0x77D6, 0xB297},{0x77D7, 0xB4A3},{0x77D8, 0xB298},{0x77D9, 0xB299},{0x77DA, 0xB29A},{0x77DB, 0xC3AC},{0x77DC, 0xF1E6},
- {0x77DD, 0xB29B},{0x77DE, 0xB29C},{0x77DF, 0xB29D},{0x77E0, 0xB29E},{0x77E1, 0xB29F},{0x77E2, 0xCAB8},{0x77E3, 0xD2D3},{0x77E4, 0xB2A0},
- {0x77E5, 0xD6AA},{0x77E6, 0xB340},{0x77E7, 0xEFF2},{0x77E8, 0xB341},{0x77E9, 0xBED8},{0x77EA, 0xB342},{0x77EB, 0xBDC3},{0x77EC, 0xEFF3},
- {0x77ED, 0xB6CC},{0x77EE, 0xB0AB},{0x77EF, 0xB343},{0x77F0, 0xB344},{0x77F1, 0xB345},{0x77F2, 0xB346},{0x77F3, 0xCAAF},{0x77F4, 0xB347},
- {0x77F5, 0xB348},{0x77F6, 0xEDB6},{0x77F7, 0xB349},{0x77F8, 0xEDB7},{0x77F9, 0xB34A},{0x77FA, 0xB34B},{0x77FB, 0xB34C},{0x77FC, 0xB34D},
- {0x77FD, 0xCEF9},{0x77FE, 0xB7AF},{0x77FF, 0xBFF3},{0x7800, 0xEDB8},{0x7801, 0xC2EB},{0x7802, 0xC9B0},{0x7803, 0xB34E},{0x7804, 0xB34F},
- {0x7805, 0xB350},{0x7806, 0xB351},{0x7807, 0xB352},{0x7808, 0xB353},{0x7809, 0xEDB9},{0x780A, 0xB354},{0x780B, 0xB355},{0x780C, 0xC6F6},
- {0x780D, 0xBFB3},{0x780E, 0xB356},{0x780F, 0xB357},{0x7810, 0xB358},{0x7811, 0xEDBC},{0x7812, 0xC5F8},{0x7813, 0xB359},{0x7814, 0xD1D0},
- {0x7815, 0xB35A},{0x7816, 0xD7A9},{0x7817, 0xEDBA},{0x7818, 0xEDBB},{0x7819, 0xB35B},{0x781A, 0xD1E2},{0x781B, 0xB35C},{0x781C, 0xEDBF},
- {0x781D, 0xEDC0},{0x781E, 0xB35D},{0x781F, 0xEDC4},{0x7820, 0xB35E},{0x7821, 0xB35F},{0x7822, 0xB360},{0x7823, 0xEDC8},{0x7824, 0xB361},
- {0x7825, 0xEDC6},{0x7826, 0xEDCE},{0x7827, 0xD5E8},{0x7828, 0xB362},{0x7829, 0xEDC9},{0x782A, 0xB363},{0x782B, 0xB364},{0x782C, 0xEDC7},
- {0x782D, 0xEDBE},{0x782E, 0xB365},{0x782F, 0xB366},{0x7830, 0xC5E9},{0x7831, 0xB367},{0x7832, 0xB368},{0x7833, 0xB369},{0x7834, 0xC6C6},
- {0x7835, 0xB36A},{0x7836, 0xB36B},{0x7837, 0xC9E9},{0x7838, 0xD4D2},{0x7839, 0xEDC1},{0x783A, 0xEDC2},{0x783B, 0xEDC3},{0x783C, 0xEDC5},
- {0x783D, 0xB36C},{0x783E, 0xC0F9},{0x783F, 0xB36D},{0x7840, 0xB4A1},{0x7841, 0xB36E},{0x7842, 0xB36F},{0x7843, 0xB370},{0x7844, 0xB371},
- {0x7845, 0xB9E8},{0x7846, 0xB372},{0x7847, 0xEDD0},{0x7848, 0xB373},{0x7849, 0xB374},{0x784A, 0xB375},{0x784B, 0xB376},{0x784C, 0xEDD1},
- {0x784D, 0xB377},{0x784E, 0xEDCA},{0x784F, 0xB378},{0x7850, 0xEDCF},{0x7851, 0xB379},{0x7852, 0xCEF8},{0x7853, 0xB37A},{0x7854, 0xB37B},
- {0x7855, 0xCBB6},{0x7856, 0xEDCC},{0x7857, 0xEDCD},{0x7858, 0xB37C},{0x7859, 0xB37D},{0x785A, 0xB37E},{0x785B, 0xB380},{0x785C, 0xB381},
- {0x785D, 0xCFF5},{0x785E, 0xB382},{0x785F, 0xB383},{0x7860, 0xB384},{0x7861, 0xB385},{0x7862, 0xB386},{0x7863, 0xB387},{0x7864, 0xB388},
- {0x7865, 0xB389},{0x7866, 0xB38A},{0x7867, 0xB38B},{0x7868, 0xB38C},{0x7869, 0xB38D},{0x786A, 0xEDD2},{0x786B, 0xC1F2},{0x786C, 0xD3B2},
- {0x786D, 0xEDCB},{0x786E, 0xC8B7},{0x786F, 0xB38E},{0x7870, 0xB38F},{0x7871, 0xB390},{0x7872, 0xB391},{0x7873, 0xB392},{0x7874, 0xB393},
- {0x7875, 0xB394},{0x7876, 0xB395},{0x7877, 0xBCEF},{0x7878, 0xB396},{0x7879, 0xB397},{0x787A, 0xB398},{0x787B, 0xB399},{0x787C, 0xC5F0},
- {0x787D, 0xB39A},{0x787E, 0xB39B},{0x787F, 0xB39C},{0x7880, 0xB39D},{0x7881, 0xB39E},{0x7882, 0xB39F},{0x7883, 0xB3A0},{0x7884, 0xB440},
- {0x7885, 0xB441},{0x7886, 0xB442},{0x7887, 0xEDD6},{0x7888, 0xB443},{0x7889, 0xB5EF},{0x788A, 0xB444},{0x788B, 0xB445},{0x788C, 0xC2B5},
- {0x788D, 0xB0AD},{0x788E, 0xCBE9},{0x788F, 0xB446},{0x7890, 0xB447},{0x7891, 0xB1AE},{0x7892, 0xB448},{0x7893, 0xEDD4},{0x7894, 0xB449},
- {0x7895, 0xB44A},{0x7896, 0xB44B},{0x7897, 0xCDEB},{0x7898, 0xB5E2},{0x7899, 0xB44C},{0x789A, 0xEDD5},{0x789B, 0xEDD3},{0x789C, 0xEDD7},
- {0x789D, 0xB44D},{0x789E, 0xB44E},{0x789F, 0xB5FA},{0x78A0, 0xB44F},{0x78A1, 0xEDD8},{0x78A2, 0xB450},{0x78A3, 0xEDD9},{0x78A4, 0xB451},
- {0x78A5, 0xEDDC},{0x78A6, 0xB452},{0x78A7, 0xB1CC},{0x78A8, 0xB453},{0x78A9, 0xB454},{0x78AA, 0xB455},{0x78AB, 0xB456},{0x78AC, 0xB457},
- {0x78AD, 0xB458},{0x78AE, 0xB459},{0x78AF, 0xB45A},{0x78B0, 0xC5F6},{0x78B1, 0xBCEE},{0x78B2, 0xEDDA},{0x78B3, 0xCCBC},{0x78B4, 0xB2EA},
- {0x78B5, 0xB45B},{0x78B6, 0xB45C},{0x78B7, 0xB45D},{0x78B8, 0xB45E},{0x78B9, 0xEDDB},{0x78BA, 0xB45F},{0x78BB, 0xB460},{0x78BC, 0xB461},
- {0x78BD, 0xB462},{0x78BE, 0xC4EB},{0x78BF, 0xB463},{0x78C0, 0xB464},{0x78C1, 0xB4C5},{0x78C2, 0xB465},{0x78C3, 0xB466},{0x78C4, 0xB467},
- {0x78C5, 0xB0F5},{0x78C6, 0xB468},{0x78C7, 0xB469},{0x78C8, 0xB46A},{0x78C9, 0xEDDF},{0x78CA, 0xC0DA},{0x78CB, 0xB4E8},{0x78CC, 0xB46B},
- {0x78CD, 0xB46C},{0x78CE, 0xB46D},{0x78CF, 0xB46E},{0x78D0, 0xC5CD},{0x78D1, 0xB46F},{0x78D2, 0xB470},{0x78D3, 0xB471},{0x78D4, 0xEDDD},
- {0x78D5, 0xBFC4},{0x78D6, 0xB472},{0x78D7, 0xB473},{0x78D8, 0xB474},{0x78D9, 0xEDDE},{0x78DA, 0xB475},{0x78DB, 0xB476},{0x78DC, 0xB477},
- {0x78DD, 0xB478},{0x78DE, 0xB479},{0x78DF, 0xB47A},{0x78E0, 0xB47B},{0x78E1, 0xB47C},{0x78E2, 0xB47D},{0x78E3, 0xB47E},{0x78E4, 0xB480},
- {0x78E5, 0xB481},{0x78E6, 0xB482},{0x78E7, 0xB483},{0x78E8, 0xC4A5},{0x78E9, 0xB484},{0x78EA, 0xB485},{0x78EB, 0xB486},{0x78EC, 0xEDE0},
- {0x78ED, 0xB487},{0x78EE, 0xB488},{0x78EF, 0xB489},{0x78F0, 0xB48A},{0x78F1, 0xB48B},{0x78F2, 0xEDE1},{0x78F3, 0xB48C},{0x78F4, 0xEDE3},
- {0x78F5, 0xB48D},{0x78F6, 0xB48E},{0x78F7, 0xC1D7},{0x78F8, 0xB48F},{0x78F9, 0xB490},{0x78FA, 0xBBC7},{0x78FB, 0xB491},{0x78FC, 0xB492},
- {0x78FD, 0xB493},{0x78FE, 0xB494},{0x78FF, 0xB495},{0x7900, 0xB496},{0x7901, 0xBDB8},{0x7902, 0xB497},{0x7903, 0xB498},{0x7904, 0xB499},
- {0x7905, 0xEDE2},{0x7906, 0xB49A},{0x7907, 0xB49B},{0x7908, 0xB49C},{0x7909, 0xB49D},{0x790A, 0xB49E},{0x790B, 0xB49F},{0x790C, 0xB4A0},
- {0x790D, 0xB540},{0x790E, 0xB541},{0x790F, 0xB542},{0x7910, 0xB543},{0x7911, 0xB544},{0x7912, 0xB545},{0x7913, 0xEDE4},{0x7914, 0xB546},
- {0x7915, 0xB547},{0x7916, 0xB548},{0x7917, 0xB549},{0x7918, 0xB54A},{0x7919, 0xB54B},{0x791A, 0xB54C},{0x791B, 0xB54D},{0x791C, 0xB54E},
- {0x791D, 0xB54F},{0x791E, 0xEDE6},{0x791F, 0xB550},{0x7920, 0xB551},{0x7921, 0xB552},{0x7922, 0xB553},{0x7923, 0xB554},{0x7924, 0xEDE5},
- {0x7925, 0xB555},{0x7926, 0xB556},{0x7927, 0xB557},{0x7928, 0xB558},{0x7929, 0xB559},{0x792A, 0xB55A},{0x792B, 0xB55B},{0x792C, 0xB55C},
- {0x792D, 0xB55D},{0x792E, 0xB55E},{0x792F, 0xB55F},{0x7930, 0xB560},{0x7931, 0xB561},{0x7932, 0xB562},{0x7933, 0xB563},{0x7934, 0xEDE7},
- {0x7935, 0xB564},{0x7936, 0xB565},{0x7937, 0xB566},{0x7938, 0xB567},{0x7939, 0xB568},{0x793A, 0xCABE},{0x793B, 0xECEA},{0x793C, 0xC0F1},
- {0x793D, 0xB569},{0x793E, 0xC9E7},{0x793F, 0xB56A},{0x7940, 0xECEB},{0x7941, 0xC6EE},{0x7942, 0xB56B},{0x7943, 0xB56C},{0x7944, 0xB56D},
- {0x7945, 0xB56E},{0x7946, 0xECEC},{0x7947, 0xB56F},{0x7948, 0xC6ED},{0x7949, 0xECED},{0x794A, 0xB570},{0x794B, 0xB571},{0x794C, 0xB572},
- {0x794D, 0xB573},{0x794E, 0xB574},{0x794F, 0xB575},{0x7950, 0xB576},{0x7951, 0xB577},{0x7952, 0xB578},{0x7953, 0xECF0},{0x7954, 0xB579},
- {0x7955, 0xB57A},{0x7956, 0xD7E6},{0x7957, 0xECF3},{0x7958, 0xB57B},{0x7959, 0xB57C},{0x795A, 0xECF1},{0x795B, 0xECEE},{0x795C, 0xECEF},
- {0x795D, 0xD7A3},{0x795E, 0xC9F1},{0x795F, 0xCBEE},{0x7960, 0xECF4},{0x7961, 0xB57D},{0x7962, 0xECF2},{0x7963, 0xB57E},{0x7964, 0xB580},
- {0x7965, 0xCFE9},{0x7966, 0xB581},{0x7967, 0xECF6},{0x7968, 0xC6B1},{0x7969, 0xB582},{0x796A, 0xB583},{0x796B, 0xB584},{0x796C, 0xB585},
- {0x796D, 0xBCC0},{0x796E, 0xB586},{0x796F, 0xECF5},{0x7970, 0xB587},{0x7971, 0xB588},{0x7972, 0xB589},{0x7973, 0xB58A},{0x7974, 0xB58B},
- {0x7975, 0xB58C},{0x7976, 0xB58D},{0x7977, 0xB5BB},{0x7978, 0xBBF6},{0x7979, 0xB58E},{0x797A, 0xECF7},{0x797B, 0xB58F},{0x797C, 0xB590},
- {0x797D, 0xB591},{0x797E, 0xB592},{0x797F, 0xB593},{0x7980, 0xD9F7},{0x7981, 0xBDFB},{0x7982, 0xB594},{0x7983, 0xB595},{0x7984, 0xC2BB},
- {0x7985, 0xECF8},{0x7986, 0xB596},{0x7987, 0xB597},{0x7988, 0xB598},{0x7989, 0xB599},{0x798A, 0xECF9},{0x798B, 0xB59A},{0x798C, 0xB59B},
- {0x798D, 0xB59C},{0x798E, 0xB59D},{0x798F, 0xB8A3},{0x7990, 0xB59E},{0x7991, 0xB59F},{0x7992, 0xB5A0},{0x7993, 0xB640},{0x7994, 0xB641},
- {0x7995, 0xB642},{0x7996, 0xB643},{0x7997, 0xB644},{0x7998, 0xB645},{0x7999, 0xB646},{0x799A, 0xECFA},{0x799B, 0xB647},{0x799C, 0xB648},
- {0x799D, 0xB649},{0x799E, 0xB64A},{0x799F, 0xB64B},{0x79A0, 0xB64C},{0x79A1, 0xB64D},{0x79A2, 0xB64E},{0x79A3, 0xB64F},{0x79A4, 0xB650},
- {0x79A5, 0xB651},{0x79A6, 0xB652},{0x79A7, 0xECFB},{0x79A8, 0xB653},{0x79A9, 0xB654},{0x79AA, 0xB655},{0x79AB, 0xB656},{0x79AC, 0xB657},
- {0x79AD, 0xB658},{0x79AE, 0xB659},{0x79AF, 0xB65A},{0x79B0, 0xB65B},{0x79B1, 0xB65C},{0x79B2, 0xB65D},{0x79B3, 0xECFC},{0x79B4, 0xB65E},
- {0x79B5, 0xB65F},{0x79B6, 0xB660},{0x79B7, 0xB661},{0x79B8, 0xB662},{0x79B9, 0xD3ED},{0x79BA, 0xD8AE},{0x79BB, 0xC0EB},{0x79BC, 0xB663},
- {0x79BD, 0xC7DD},{0x79BE, 0xBACC},{0x79BF, 0xB664},{0x79C0, 0xD0E3},{0x79C1, 0xCBBD},{0x79C2, 0xB665},{0x79C3, 0xCDBA},{0x79C4, 0xB666},
- {0x79C5, 0xB667},{0x79C6, 0xB8D1},{0x79C7, 0xB668},{0x79C8, 0xB669},{0x79C9, 0xB1FC},{0x79CA, 0xB66A},{0x79CB, 0xC7EF},{0x79CC, 0xB66B},
- {0x79CD, 0xD6D6},{0x79CE, 0xB66C},{0x79CF, 0xB66D},{0x79D0, 0xB66E},{0x79D1, 0xBFC6},{0x79D2, 0xC3EB},{0x79D3, 0xB66F},{0x79D4, 0xB670},
- {0x79D5, 0xEFF5},{0x79D6, 0xB671},{0x79D7, 0xB672},{0x79D8, 0xC3D8},{0x79D9, 0xB673},{0x79DA, 0xB674},{0x79DB, 0xB675},{0x79DC, 0xB676},
- {0x79DD, 0xB677},{0x79DE, 0xB678},{0x79DF, 0xD7E2},{0x79E0, 0xB679},{0x79E1, 0xB67A},{0x79E2, 0xB67B},{0x79E3, 0xEFF7},{0x79E4, 0xB3D3},
- {0x79E5, 0xB67C},{0x79E6, 0xC7D8},{0x79E7, 0xD1ED},{0x79E8, 0xB67D},{0x79E9, 0xD6C8},{0x79EA, 0xB67E},{0x79EB, 0xEFF8},{0x79EC, 0xB680},
- {0x79ED, 0xEFF6},{0x79EE, 0xB681},{0x79EF, 0xBBFD},{0x79F0, 0xB3C6},{0x79F1, 0xB682},{0x79F2, 0xB683},{0x79F3, 0xB684},{0x79F4, 0xB685},
- {0x79F5, 0xB686},{0x79F6, 0xB687},{0x79F7, 0xB688},{0x79F8, 0xBDD5},{0x79F9, 0xB689},{0x79FA, 0xB68A},{0x79FB, 0xD2C6},{0x79FC, 0xB68B},
- {0x79FD, 0xBBE0},{0x79FE, 0xB68C},{0x79FF, 0xB68D},{0x7A00, 0xCFA1},{0x7A01, 0xB68E},{0x7A02, 0xEFFC},{0x7A03, 0xEFFB},{0x7A04, 0xB68F},
- {0x7A05, 0xB690},{0x7A06, 0xEFF9},{0x7A07, 0xB691},{0x7A08, 0xB692},{0x7A09, 0xB693},{0x7A0A, 0xB694},{0x7A0B, 0xB3CC},{0x7A0C, 0xB695},
- {0x7A0D, 0xC9D4},{0x7A0E, 0xCBB0},{0x7A0F, 0xB696},{0x7A10, 0xB697},{0x7A11, 0xB698},{0x7A12, 0xB699},{0x7A13, 0xB69A},{0x7A14, 0xEFFE},
- {0x7A15, 0xB69B},{0x7A16, 0xB69C},{0x7A17, 0xB0DE},{0x7A18, 0xB69D},{0x7A19, 0xB69E},{0x7A1A, 0xD6C9},{0x7A1B, 0xB69F},{0x7A1C, 0xB6A0},
- {0x7A1D, 0xB740},{0x7A1E, 0xEFFD},{0x7A1F, 0xB741},{0x7A20, 0xB3ED},{0x7A21, 0xB742},{0x7A22, 0xB743},{0x7A23, 0xF6D5},{0x7A24, 0xB744},
- {0x7A25, 0xB745},{0x7A26, 0xB746},{0x7A27, 0xB747},{0x7A28, 0xB748},{0x7A29, 0xB749},{0x7A2A, 0xB74A},{0x7A2B, 0xB74B},{0x7A2C, 0xB74C},
- {0x7A2D, 0xB74D},{0x7A2E, 0xB74E},{0x7A2F, 0xB74F},{0x7A30, 0xB750},{0x7A31, 0xB751},{0x7A32, 0xB752},{0x7A33, 0xCEC8},{0x7A34, 0xB753},
- {0x7A35, 0xB754},{0x7A36, 0xB755},{0x7A37, 0xF0A2},{0x7A38, 0xB756},{0x7A39, 0xF0A1},{0x7A3A, 0xB757},{0x7A3B, 0xB5BE},{0x7A3C, 0xBCDA},
- {0x7A3D, 0xBBFC},{0x7A3E, 0xB758},{0x7A3F, 0xB8E5},{0x7A40, 0xB759},{0x7A41, 0xB75A},{0x7A42, 0xB75B},{0x7A43, 0xB75C},{0x7A44, 0xB75D},
- {0x7A45, 0xB75E},{0x7A46, 0xC4C2},{0x7A47, 0xB75F},{0x7A48, 0xB760},{0x7A49, 0xB761},{0x7A4A, 0xB762},{0x7A4B, 0xB763},{0x7A4C, 0xB764},
- {0x7A4D, 0xB765},{0x7A4E, 0xB766},{0x7A4F, 0xB767},{0x7A50, 0xB768},{0x7A51, 0xF0A3},{0x7A52, 0xB769},{0x7A53, 0xB76A},{0x7A54, 0xB76B},
- {0x7A55, 0xB76C},{0x7A56, 0xB76D},{0x7A57, 0xCBEB},{0x7A58, 0xB76E},{0x7A59, 0xB76F},{0x7A5A, 0xB770},{0x7A5B, 0xB771},{0x7A5C, 0xB772},
- {0x7A5D, 0xB773},{0x7A5E, 0xB774},{0x7A5F, 0xB775},{0x7A60, 0xB776},{0x7A61, 0xB777},{0x7A62, 0xB778},{0x7A63, 0xB779},{0x7A64, 0xB77A},
- {0x7A65, 0xB77B},{0x7A66, 0xB77C},{0x7A67, 0xB77D},{0x7A68, 0xB77E},{0x7A69, 0xB780},{0x7A6A, 0xB781},{0x7A6B, 0xB782},{0x7A6C, 0xB783},
- {0x7A6D, 0xB784},{0x7A6E, 0xB785},{0x7A6F, 0xB786},{0x7A70, 0xF0A6},{0x7A71, 0xB787},{0x7A72, 0xB788},{0x7A73, 0xB789},{0x7A74, 0xD1A8},
- {0x7A75, 0xB78A},{0x7A76, 0xBEBF},{0x7A77, 0xC7EE},{0x7A78, 0xF1B6},{0x7A79, 0xF1B7},{0x7A7A, 0xBFD5},{0x7A7B, 0xB78B},{0x7A7C, 0xB78C},
- {0x7A7D, 0xB78D},{0x7A7E, 0xB78E},{0x7A7F, 0xB4A9},{0x7A80, 0xF1B8},{0x7A81, 0xCDBB},{0x7A82, 0xB78F},{0x7A83, 0xC7D4},{0x7A84, 0xD5AD},
- {0x7A85, 0xB790},{0x7A86, 0xF1B9},{0x7A87, 0xB791},{0x7A88, 0xF1BA},{0x7A89, 0xB792},{0x7A8A, 0xB793},{0x7A8B, 0xB794},{0x7A8C, 0xB795},
- {0x7A8D, 0xC7CF},{0x7A8E, 0xB796},{0x7A8F, 0xB797},{0x7A90, 0xB798},{0x7A91, 0xD2A4},{0x7A92, 0xD6CF},{0x7A93, 0xB799},{0x7A94, 0xB79A},
- {0x7A95, 0xF1BB},{0x7A96, 0xBDD1},{0x7A97, 0xB4B0},{0x7A98, 0xBEBD},{0x7A99, 0xB79B},{0x7A9A, 0xB79C},{0x7A9B, 0xB79D},{0x7A9C, 0xB4DC},
- {0x7A9D, 0xCED1},{0x7A9E, 0xB79E},{0x7A9F, 0xBFDF},{0x7AA0, 0xF1BD},{0x7AA1, 0xB79F},{0x7AA2, 0xB7A0},{0x7AA3, 0xB840},{0x7AA4, 0xB841},
- {0x7AA5, 0xBFFA},{0x7AA6, 0xF1BC},{0x7AA7, 0xB842},{0x7AA8, 0xF1BF},{0x7AA9, 0xB843},{0x7AAA, 0xB844},{0x7AAB, 0xB845},{0x7AAC, 0xF1BE},
- {0x7AAD, 0xF1C0},{0x7AAE, 0xB846},{0x7AAF, 0xB847},{0x7AB0, 0xB848},{0x7AB1, 0xB849},{0x7AB2, 0xB84A},{0x7AB3, 0xF1C1},{0x7AB4, 0xB84B},
- {0x7AB5, 0xB84C},{0x7AB6, 0xB84D},{0x7AB7, 0xB84E},{0x7AB8, 0xB84F},{0x7AB9, 0xB850},{0x7ABA, 0xB851},{0x7ABB, 0xB852},{0x7ABC, 0xB853},
- {0x7ABD, 0xB854},{0x7ABE, 0xB855},{0x7ABF, 0xC1FE},{0x7AC0, 0xB856},{0x7AC1, 0xB857},{0x7AC2, 0xB858},{0x7AC3, 0xB859},{0x7AC4, 0xB85A},
- {0x7AC5, 0xB85B},{0x7AC6, 0xB85C},{0x7AC7, 0xB85D},{0x7AC8, 0xB85E},{0x7AC9, 0xB85F},{0x7ACA, 0xB860},{0x7ACB, 0xC1A2},{0x7ACC, 0xB861},
- {0x7ACD, 0xB862},{0x7ACE, 0xB863},{0x7ACF, 0xB864},{0x7AD0, 0xB865},{0x7AD1, 0xB866},{0x7AD2, 0xB867},{0x7AD3, 0xB868},{0x7AD4, 0xB869},
- {0x7AD5, 0xB86A},{0x7AD6, 0xCAFA},{0x7AD7, 0xB86B},{0x7AD8, 0xB86C},{0x7AD9, 0xD5BE},{0x7ADA, 0xB86D},{0x7ADB, 0xB86E},{0x7ADC, 0xB86F},
- {0x7ADD, 0xB870},{0x7ADE, 0xBEBA},{0x7ADF, 0xBEB9},{0x7AE0, 0xD5C2},{0x7AE1, 0xB871},{0x7AE2, 0xB872},{0x7AE3, 0xBFA2},{0x7AE4, 0xB873},
- {0x7AE5, 0xCDAF},{0x7AE6, 0xF1B5},{0x7AE7, 0xB874},{0x7AE8, 0xB875},{0x7AE9, 0xB876},{0x7AEA, 0xB877},{0x7AEB, 0xB878},{0x7AEC, 0xB879},
- {0x7AED, 0xBDDF},{0x7AEE, 0xB87A},{0x7AEF, 0xB6CB},{0x7AF0, 0xB87B},{0x7AF1, 0xB87C},{0x7AF2, 0xB87D},{0x7AF3, 0xB87E},{0x7AF4, 0xB880},
- {0x7AF5, 0xB881},{0x7AF6, 0xB882},{0x7AF7, 0xB883},{0x7AF8, 0xB884},{0x7AF9, 0xD6F1},{0x7AFA, 0xF3C3},{0x7AFB, 0xB885},{0x7AFC, 0xB886},
- {0x7AFD, 0xF3C4},{0x7AFE, 0xB887},{0x7AFF, 0xB8CD},{0x7B00, 0xB888},{0x7B01, 0xB889},{0x7B02, 0xB88A},{0x7B03, 0xF3C6},{0x7B04, 0xF3C7},
- {0x7B05, 0xB88B},{0x7B06, 0xB0CA},{0x7B07, 0xB88C},{0x7B08, 0xF3C5},{0x7B09, 0xB88D},{0x7B0A, 0xF3C9},{0x7B0B, 0xCBF1},{0x7B0C, 0xB88E},
- {0x7B0D, 0xB88F},{0x7B0E, 0xB890},{0x7B0F, 0xF3CB},{0x7B10, 0xB891},{0x7B11, 0xD0A6},{0x7B12, 0xB892},{0x7B13, 0xB893},{0x7B14, 0xB1CA},
- {0x7B15, 0xF3C8},{0x7B16, 0xB894},{0x7B17, 0xB895},{0x7B18, 0xB896},{0x7B19, 0xF3CF},{0x7B1A, 0xB897},{0x7B1B, 0xB5D1},{0x7B1C, 0xB898},
- {0x7B1D, 0xB899},{0x7B1E, 0xF3D7},{0x7B1F, 0xB89A},{0x7B20, 0xF3D2},{0x7B21, 0xB89B},{0x7B22, 0xB89C},{0x7B23, 0xB89D},{0x7B24, 0xF3D4},
- {0x7B25, 0xF3D3},{0x7B26, 0xB7FB},{0x7B27, 0xB89E},{0x7B28, 0xB1BF},{0x7B29, 0xB89F},{0x7B2A, 0xF3CE},{0x7B2B, 0xF3CA},{0x7B2C, 0xB5DA},
- {0x7B2D, 0xB8A0},{0x7B2E, 0xF3D0},{0x7B2F, 0xB940},{0x7B30, 0xB941},{0x7B31, 0xF3D1},{0x7B32, 0xB942},{0x7B33, 0xF3D5},{0x7B34, 0xB943},
- {0x7B35, 0xB944},{0x7B36, 0xB945},{0x7B37, 0xB946},{0x7B38, 0xF3CD},{0x7B39, 0xB947},{0x7B3A, 0xBCE3},{0x7B3B, 0xB948},{0x7B3C, 0xC1FD},
- {0x7B3D, 0xB949},{0x7B3E, 0xF3D6},{0x7B3F, 0xB94A},{0x7B40, 0xB94B},{0x7B41, 0xB94C},{0x7B42, 0xB94D},{0x7B43, 0xB94E},{0x7B44, 0xB94F},
- {0x7B45, 0xF3DA},{0x7B46, 0xB950},{0x7B47, 0xF3CC},{0x7B48, 0xB951},{0x7B49, 0xB5C8},{0x7B4A, 0xB952},{0x7B4B, 0xBDEE},{0x7B4C, 0xF3DC},
- {0x7B4D, 0xB953},{0x7B4E, 0xB954},{0x7B4F, 0xB7A4},{0x7B50, 0xBFF0},{0x7B51, 0xD6FE},{0x7B52, 0xCDB2},{0x7B53, 0xB955},{0x7B54, 0xB4F0},
- {0x7B55, 0xB956},{0x7B56, 0xB2DF},{0x7B57, 0xB957},{0x7B58, 0xF3D8},{0x7B59, 0xB958},{0x7B5A, 0xF3D9},{0x7B5B, 0xC9B8},{0x7B5C, 0xB959},
- {0x7B5D, 0xF3DD},{0x7B5E, 0xB95A},{0x7B5F, 0xB95B},{0x7B60, 0xF3DE},{0x7B61, 0xB95C},{0x7B62, 0xF3E1},{0x7B63, 0xB95D},{0x7B64, 0xB95E},
- {0x7B65, 0xB95F},{0x7B66, 0xB960},{0x7B67, 0xB961},{0x7B68, 0xB962},{0x7B69, 0xB963},{0x7B6A, 0xB964},{0x7B6B, 0xB965},{0x7B6C, 0xB966},
- {0x7B6D, 0xB967},{0x7B6E, 0xF3DF},{0x7B6F, 0xB968},{0x7B70, 0xB969},{0x7B71, 0xF3E3},{0x7B72, 0xF3E2},{0x7B73, 0xB96A},{0x7B74, 0xB96B},
- {0x7B75, 0xF3DB},{0x7B76, 0xB96C},{0x7B77, 0xBFEA},{0x7B78, 0xB96D},{0x7B79, 0xB3EF},{0x7B7A, 0xB96E},{0x7B7B, 0xF3E0},{0x7B7C, 0xB96F},
- {0x7B7D, 0xB970},{0x7B7E, 0xC7A9},{0x7B7F, 0xB971},{0x7B80, 0xBCF2},{0x7B81, 0xB972},{0x7B82, 0xB973},{0x7B83, 0xB974},{0x7B84, 0xB975},
- {0x7B85, 0xF3EB},{0x7B86, 0xB976},{0x7B87, 0xB977},{0x7B88, 0xB978},{0x7B89, 0xB979},{0x7B8A, 0xB97A},{0x7B8B, 0xB97B},{0x7B8C, 0xB97C},
- {0x7B8D, 0xB9BF},{0x7B8E, 0xB97D},{0x7B8F, 0xB97E},{0x7B90, 0xF3E4},{0x7B91, 0xB980},{0x7B92, 0xB981},{0x7B93, 0xB982},{0x7B94, 0xB2AD},
- {0x7B95, 0xBBFE},{0x7B96, 0xB983},{0x7B97, 0xCBE3},{0x7B98, 0xB984},{0x7B99, 0xB985},{0x7B9A, 0xB986},{0x7B9B, 0xB987},{0x7B9C, 0xF3ED},
- {0x7B9D, 0xF3E9},{0x7B9E, 0xB988},{0x7B9F, 0xB989},{0x7BA0, 0xB98A},{0x7BA1, 0xB9DC},{0x7BA2, 0xF3EE},{0x7BA3, 0xB98B},{0x7BA4, 0xB98C},
- {0x7BA5, 0xB98D},{0x7BA6, 0xF3E5},{0x7BA7, 0xF3E6},{0x7BA8, 0xF3EA},{0x7BA9, 0xC2E1},{0x7BAA, 0xF3EC},{0x7BAB, 0xF3EF},{0x7BAC, 0xF3E8},
- {0x7BAD, 0xBCFD},{0x7BAE, 0xB98E},{0x7BAF, 0xB98F},{0x7BB0, 0xB990},{0x7BB1, 0xCFE4},{0x7BB2, 0xB991},{0x7BB3, 0xB992},{0x7BB4, 0xF3F0},
- {0x7BB5, 0xB993},{0x7BB6, 0xB994},{0x7BB7, 0xB995},{0x7BB8, 0xF3E7},{0x7BB9, 0xB996},{0x7BBA, 0xB997},{0x7BBB, 0xB998},{0x7BBC, 0xB999},
- {0x7BBD, 0xB99A},{0x7BBE, 0xB99B},{0x7BBF, 0xB99C},{0x7BC0, 0xB99D},{0x7BC1, 0xF3F2},{0x7BC2, 0xB99E},{0x7BC3, 0xB99F},{0x7BC4, 0xB9A0},
- {0x7BC5, 0xBA40},{0x7BC6, 0xD7AD},{0x7BC7, 0xC6AA},{0x7BC8, 0xBA41},{0x7BC9, 0xBA42},{0x7BCA, 0xBA43},{0x7BCB, 0xBA44},{0x7BCC, 0xF3F3},
- {0x7BCD, 0xBA45},{0x7BCE, 0xBA46},{0x7BCF, 0xBA47},{0x7BD0, 0xBA48},{0x7BD1, 0xF3F1},{0x7BD2, 0xBA49},{0x7BD3, 0xC2A8},{0x7BD4, 0xBA4A},
- {0x7BD5, 0xBA4B},{0x7BD6, 0xBA4C},{0x7BD7, 0xBA4D},{0x7BD8, 0xBA4E},{0x7BD9, 0xB8DD},{0x7BDA, 0xF3F5},{0x7BDB, 0xBA4F},{0x7BDC, 0xBA50},
- {0x7BDD, 0xF3F4},{0x7BDE, 0xBA51},{0x7BDF, 0xBA52},{0x7BE0, 0xBA53},{0x7BE1, 0xB4DB},{0x7BE2, 0xBA54},{0x7BE3, 0xBA55},{0x7BE4, 0xBA56},
- {0x7BE5, 0xF3F6},{0x7BE6, 0xF3F7},{0x7BE7, 0xBA57},{0x7BE8, 0xBA58},{0x7BE9, 0xBA59},{0x7BEA, 0xF3F8},{0x7BEB, 0xBA5A},{0x7BEC, 0xBA5B},
- {0x7BED, 0xBA5C},{0x7BEE, 0xC0BA},{0x7BEF, 0xBA5D},{0x7BF0, 0xBA5E},{0x7BF1, 0xC0E9},{0x7BF2, 0xBA5F},{0x7BF3, 0xBA60},{0x7BF4, 0xBA61},
- {0x7BF5, 0xBA62},{0x7BF6, 0xBA63},{0x7BF7, 0xC5F1},{0x7BF8, 0xBA64},{0x7BF9, 0xBA65},{0x7BFA, 0xBA66},{0x7BFB, 0xBA67},{0x7BFC, 0xF3FB},
- {0x7BFD, 0xBA68},{0x7BFE, 0xF3FA},{0x7BFF, 0xBA69},{0x7C00, 0xBA6A},{0x7C01, 0xBA6B},{0x7C02, 0xBA6C},{0x7C03, 0xBA6D},{0x7C04, 0xBA6E},
- {0x7C05, 0xBA6F},{0x7C06, 0xBA70},{0x7C07, 0xB4D8},{0x7C08, 0xBA71},{0x7C09, 0xBA72},{0x7C0A, 0xBA73},{0x7C0B, 0xF3FE},{0x7C0C, 0xF3F9},
- {0x7C0D, 0xBA74},{0x7C0E, 0xBA75},{0x7C0F, 0xF3FC},{0x7C10, 0xBA76},{0x7C11, 0xBA77},{0x7C12, 0xBA78},{0x7C13, 0xBA79},{0x7C14, 0xBA7A},
- {0x7C15, 0xBA7B},{0x7C16, 0xF3FD},{0x7C17, 0xBA7C},{0x7C18, 0xBA7D},{0x7C19, 0xBA7E},{0x7C1A, 0xBA80},{0x7C1B, 0xBA81},{0x7C1C, 0xBA82},
- {0x7C1D, 0xBA83},{0x7C1E, 0xBA84},{0x7C1F, 0xF4A1},{0x7C20, 0xBA85},{0x7C21, 0xBA86},{0x7C22, 0xBA87},{0x7C23, 0xBA88},{0x7C24, 0xBA89},
- {0x7C25, 0xBA8A},{0x7C26, 0xF4A3},{0x7C27, 0xBBC9},{0x7C28, 0xBA8B},{0x7C29, 0xBA8C},{0x7C2A, 0xF4A2},{0x7C2B, 0xBA8D},{0x7C2C, 0xBA8E},
- {0x7C2D, 0xBA8F},{0x7C2E, 0xBA90},{0x7C2F, 0xBA91},{0x7C30, 0xBA92},{0x7C31, 0xBA93},{0x7C32, 0xBA94},{0x7C33, 0xBA95},{0x7C34, 0xBA96},
- {0x7C35, 0xBA97},{0x7C36, 0xBA98},{0x7C37, 0xBA99},{0x7C38, 0xF4A4},{0x7C39, 0xBA9A},{0x7C3A, 0xBA9B},{0x7C3B, 0xBA9C},{0x7C3C, 0xBA9D},
- {0x7C3D, 0xBA9E},{0x7C3E, 0xBA9F},{0x7C3F, 0xB2BE},{0x7C40, 0xF4A6},{0x7C41, 0xF4A5},{0x7C42, 0xBAA0},{0x7C43, 0xBB40},{0x7C44, 0xBB41},
- {0x7C45, 0xBB42},{0x7C46, 0xBB43},{0x7C47, 0xBB44},{0x7C48, 0xBB45},{0x7C49, 0xBB46},{0x7C4A, 0xBB47},{0x7C4B, 0xBB48},{0x7C4C, 0xBB49},
- {0x7C4D, 0xBCAE},{0x7C4E, 0xBB4A},{0x7C4F, 0xBB4B},{0x7C50, 0xBB4C},{0x7C51, 0xBB4D},{0x7C52, 0xBB4E},{0x7C53, 0xBB4F},{0x7C54, 0xBB50},
- {0x7C55, 0xBB51},{0x7C56, 0xBB52},{0x7C57, 0xBB53},{0x7C58, 0xBB54},{0x7C59, 0xBB55},{0x7C5A, 0xBB56},{0x7C5B, 0xBB57},{0x7C5C, 0xBB58},
- {0x7C5D, 0xBB59},{0x7C5E, 0xBB5A},{0x7C5F, 0xBB5B},{0x7C60, 0xBB5C},{0x7C61, 0xBB5D},{0x7C62, 0xBB5E},{0x7C63, 0xBB5F},{0x7C64, 0xBB60},
- {0x7C65, 0xBB61},{0x7C66, 0xBB62},{0x7C67, 0xBB63},{0x7C68, 0xBB64},{0x7C69, 0xBB65},{0x7C6A, 0xBB66},{0x7C6B, 0xBB67},{0x7C6C, 0xBB68},
- {0x7C6D, 0xBB69},{0x7C6E, 0xBB6A},{0x7C6F, 0xBB6B},{0x7C70, 0xBB6C},{0x7C71, 0xBB6D},{0x7C72, 0xBB6E},{0x7C73, 0xC3D7},{0x7C74, 0xD9E1},
- {0x7C75, 0xBB6F},{0x7C76, 0xBB70},{0x7C77, 0xBB71},{0x7C78, 0xBB72},{0x7C79, 0xBB73},{0x7C7A, 0xBB74},{0x7C7B, 0xC0E0},{0x7C7C, 0xF4CC},
- {0x7C7D, 0xD7D1},{0x7C7E, 0xBB75},{0x7C7F, 0xBB76},{0x7C80, 0xBB77},{0x7C81, 0xBB78},{0x7C82, 0xBB79},{0x7C83, 0xBB7A},{0x7C84, 0xBB7B},
- {0x7C85, 0xBB7C},{0x7C86, 0xBB7D},{0x7C87, 0xBB7E},{0x7C88, 0xBB80},{0x7C89, 0xB7DB},{0x7C8A, 0xBB81},{0x7C8B, 0xBB82},{0x7C8C, 0xBB83},
- {0x7C8D, 0xBB84},{0x7C8E, 0xBB85},{0x7C8F, 0xBB86},{0x7C90, 0xBB87},{0x7C91, 0xF4CE},{0x7C92, 0xC1A3},{0x7C93, 0xBB88},{0x7C94, 0xBB89},
- {0x7C95, 0xC6C9},{0x7C96, 0xBB8A},{0x7C97, 0xB4D6},{0x7C98, 0xD5B3},{0x7C99, 0xBB8B},{0x7C9A, 0xBB8C},{0x7C9B, 0xBB8D},{0x7C9C, 0xF4D0},
- {0x7C9D, 0xF4CF},{0x7C9E, 0xF4D1},{0x7C9F, 0xCBDA},{0x7CA0, 0xBB8E},{0x7CA1, 0xBB8F},{0x7CA2, 0xF4D2},{0x7CA3, 0xBB90},{0x7CA4, 0xD4C1},
- {0x7CA5, 0xD6E0},{0x7CA6, 0xBB91},{0x7CA7, 0xBB92},{0x7CA8, 0xBB93},{0x7CA9, 0xBB94},{0x7CAA, 0xB7E0},{0x7CAB, 0xBB95},{0x7CAC, 0xBB96},
- {0x7CAD, 0xBB97},{0x7CAE, 0xC1B8},{0x7CAF, 0xBB98},{0x7CB0, 0xBB99},{0x7CB1, 0xC1BB},{0x7CB2, 0xF4D3},{0x7CB3, 0xBEAC},{0x7CB4, 0xBB9A},
- {0x7CB5, 0xBB9B},{0x7CB6, 0xBB9C},{0x7CB7, 0xBB9D},{0x7CB8, 0xBB9E},{0x7CB9, 0xB4E2},{0x7CBA, 0xBB9F},{0x7CBB, 0xBBA0},{0x7CBC, 0xF4D4},
- {0x7CBD, 0xF4D5},{0x7CBE, 0xBEAB},{0x7CBF, 0xBC40},{0x7CC0, 0xBC41},{0x7CC1, 0xF4D6},{0x7CC2, 0xBC42},{0x7CC3, 0xBC43},{0x7CC4, 0xBC44},
- {0x7CC5, 0xF4DB},{0x7CC6, 0xBC45},{0x7CC7, 0xF4D7},{0x7CC8, 0xF4DA},{0x7CC9, 0xBC46},{0x7CCA, 0xBAFD},{0x7CCB, 0xBC47},{0x7CCC, 0xF4D8},
- {0x7CCD, 0xF4D9},{0x7CCE, 0xBC48},{0x7CCF, 0xBC49},{0x7CD0, 0xBC4A},{0x7CD1, 0xBC4B},{0x7CD2, 0xBC4C},{0x7CD3, 0xBC4D},{0x7CD4, 0xBC4E},
- {0x7CD5, 0xB8E2},{0x7CD6, 0xCCC7},{0x7CD7, 0xF4DC},{0x7CD8, 0xBC4F},{0x7CD9, 0xB2DA},{0x7CDA, 0xBC50},{0x7CDB, 0xBC51},{0x7CDC, 0xC3D3},
- {0x7CDD, 0xBC52},{0x7CDE, 0xBC53},{0x7CDF, 0xD4E3},{0x7CE0, 0xBFB7},{0x7CE1, 0xBC54},{0x7CE2, 0xBC55},{0x7CE3, 0xBC56},{0x7CE4, 0xBC57},
- {0x7CE5, 0xBC58},{0x7CE6, 0xBC59},{0x7CE7, 0xBC5A},{0x7CE8, 0xF4DD},{0x7CE9, 0xBC5B},{0x7CEA, 0xBC5C},{0x7CEB, 0xBC5D},{0x7CEC, 0xBC5E},
- {0x7CED, 0xBC5F},{0x7CEE, 0xBC60},{0x7CEF, 0xC5B4},{0x7CF0, 0xBC61},{0x7CF1, 0xBC62},{0x7CF2, 0xBC63},{0x7CF3, 0xBC64},{0x7CF4, 0xBC65},
- {0x7CF5, 0xBC66},{0x7CF6, 0xBC67},{0x7CF7, 0xBC68},{0x7CF8, 0xF4E9},{0x7CF9, 0xBC69},{0x7CFA, 0xBC6A},{0x7CFB, 0xCFB5},{0x7CFC, 0xBC6B},
- {0x7CFD, 0xBC6C},{0x7CFE, 0xBC6D},{0x7CFF, 0xBC6E},{0x7D00, 0xBC6F},{0x7D01, 0xBC70},{0x7D02, 0xBC71},{0x7D03, 0xBC72},{0x7D04, 0xBC73},
- {0x7D05, 0xBC74},{0x7D06, 0xBC75},{0x7D07, 0xBC76},{0x7D08, 0xBC77},{0x7D09, 0xBC78},{0x7D0A, 0xCEC9},{0x7D0B, 0xBC79},{0x7D0C, 0xBC7A},
- {0x7D0D, 0xBC7B},{0x7D0E, 0xBC7C},{0x7D0F, 0xBC7D},{0x7D10, 0xBC7E},{0x7D11, 0xBC80},{0x7D12, 0xBC81},{0x7D13, 0xBC82},{0x7D14, 0xBC83},
- {0x7D15, 0xBC84},{0x7D16, 0xBC85},{0x7D17, 0xBC86},{0x7D18, 0xBC87},{0x7D19, 0xBC88},{0x7D1A, 0xBC89},{0x7D1B, 0xBC8A},{0x7D1C, 0xBC8B},
- {0x7D1D, 0xBC8C},{0x7D1E, 0xBC8D},{0x7D1F, 0xBC8E},{0x7D20, 0xCBD8},{0x7D21, 0xBC8F},{0x7D22, 0xCBF7},{0x7D23, 0xBC90},{0x7D24, 0xBC91},
- {0x7D25, 0xBC92},{0x7D26, 0xBC93},{0x7D27, 0xBDF4},{0x7D28, 0xBC94},{0x7D29, 0xBC95},{0x7D2A, 0xBC96},{0x7D2B, 0xD7CF},{0x7D2C, 0xBC97},
- {0x7D2D, 0xBC98},{0x7D2E, 0xBC99},{0x7D2F, 0xC0DB},{0x7D30, 0xBC9A},{0x7D31, 0xBC9B},{0x7D32, 0xBC9C},{0x7D33, 0xBC9D},{0x7D34, 0xBC9E},
- {0x7D35, 0xBC9F},{0x7D36, 0xBCA0},{0x7D37, 0xBD40},{0x7D38, 0xBD41},{0x7D39, 0xBD42},{0x7D3A, 0xBD43},{0x7D3B, 0xBD44},{0x7D3C, 0xBD45},
- {0x7D3D, 0xBD46},{0x7D3E, 0xBD47},{0x7D3F, 0xBD48},{0x7D40, 0xBD49},{0x7D41, 0xBD4A},{0x7D42, 0xBD4B},{0x7D43, 0xBD4C},{0x7D44, 0xBD4D},
- {0x7D45, 0xBD4E},{0x7D46, 0xBD4F},{0x7D47, 0xBD50},{0x7D48, 0xBD51},{0x7D49, 0xBD52},{0x7D4A, 0xBD53},{0x7D4B, 0xBD54},{0x7D4C, 0xBD55},
- {0x7D4D, 0xBD56},{0x7D4E, 0xBD57},{0x7D4F, 0xBD58},{0x7D50, 0xBD59},{0x7D51, 0xBD5A},{0x7D52, 0xBD5B},{0x7D53, 0xBD5C},{0x7D54, 0xBD5D},
- {0x7D55, 0xBD5E},{0x7D56, 0xBD5F},{0x7D57, 0xBD60},{0x7D58, 0xBD61},{0x7D59, 0xBD62},{0x7D5A, 0xBD63},{0x7D5B, 0xBD64},{0x7D5C, 0xBD65},
- {0x7D5D, 0xBD66},{0x7D5E, 0xBD67},{0x7D5F, 0xBD68},{0x7D60, 0xBD69},{0x7D61, 0xBD6A},{0x7D62, 0xBD6B},{0x7D63, 0xBD6C},{0x7D64, 0xBD6D},
- {0x7D65, 0xBD6E},{0x7D66, 0xBD6F},{0x7D67, 0xBD70},{0x7D68, 0xBD71},{0x7D69, 0xBD72},{0x7D6A, 0xBD73},{0x7D6B, 0xBD74},{0x7D6C, 0xBD75},
- {0x7D6D, 0xBD76},{0x7D6E, 0xD0F5},{0x7D6F, 0xBD77},{0x7D70, 0xBD78},{0x7D71, 0xBD79},{0x7D72, 0xBD7A},{0x7D73, 0xBD7B},{0x7D74, 0xBD7C},
- {0x7D75, 0xBD7D},{0x7D76, 0xBD7E},{0x7D77, 0xF4EA},{0x7D78, 0xBD80},{0x7D79, 0xBD81},{0x7D7A, 0xBD82},{0x7D7B, 0xBD83},{0x7D7C, 0xBD84},
- {0x7D7D, 0xBD85},{0x7D7E, 0xBD86},{0x7D7F, 0xBD87},{0x7D80, 0xBD88},{0x7D81, 0xBD89},{0x7D82, 0xBD8A},{0x7D83, 0xBD8B},{0x7D84, 0xBD8C},
- {0x7D85, 0xBD8D},{0x7D86, 0xBD8E},{0x7D87, 0xBD8F},{0x7D88, 0xBD90},{0x7D89, 0xBD91},{0x7D8A, 0xBD92},{0x7D8B, 0xBD93},{0x7D8C, 0xBD94},
- {0x7D8D, 0xBD95},{0x7D8E, 0xBD96},{0x7D8F, 0xBD97},{0x7D90, 0xBD98},{0x7D91, 0xBD99},{0x7D92, 0xBD9A},{0x7D93, 0xBD9B},{0x7D94, 0xBD9C},
- {0x7D95, 0xBD9D},{0x7D96, 0xBD9E},{0x7D97, 0xBD9F},{0x7D98, 0xBDA0},{0x7D99, 0xBE40},{0x7D9A, 0xBE41},{0x7D9B, 0xBE42},{0x7D9C, 0xBE43},
- {0x7D9D, 0xBE44},{0x7D9E, 0xBE45},{0x7D9F, 0xBE46},{0x7DA0, 0xBE47},{0x7DA1, 0xBE48},{0x7DA2, 0xBE49},{0x7DA3, 0xBE4A},{0x7DA4, 0xBE4B},
- {0x7DA5, 0xBE4C},{0x7DA6, 0xF4EB},{0x7DA7, 0xBE4D},{0x7DA8, 0xBE4E},{0x7DA9, 0xBE4F},{0x7DAA, 0xBE50},{0x7DAB, 0xBE51},{0x7DAC, 0xBE52},
- {0x7DAD, 0xBE53},{0x7DAE, 0xF4EC},{0x7DAF, 0xBE54},{0x7DB0, 0xBE55},{0x7DB1, 0xBE56},{0x7DB2, 0xBE57},{0x7DB3, 0xBE58},{0x7DB4, 0xBE59},
- {0x7DB5, 0xBE5A},{0x7DB6, 0xBE5B},{0x7DB7, 0xBE5C},{0x7DB8, 0xBE5D},{0x7DB9, 0xBE5E},{0x7DBA, 0xBE5F},{0x7DBB, 0xBE60},{0x7DBC, 0xBE61},
- {0x7DBD, 0xBE62},{0x7DBE, 0xBE63},{0x7DBF, 0xBE64},{0x7DC0, 0xBE65},{0x7DC1, 0xBE66},{0x7DC2, 0xBE67},{0x7DC3, 0xBE68},{0x7DC4, 0xBE69},
- {0x7DC5, 0xBE6A},{0x7DC6, 0xBE6B},{0x7DC7, 0xBE6C},{0x7DC8, 0xBE6D},{0x7DC9, 0xBE6E},{0x7DCA, 0xBE6F},{0x7DCB, 0xBE70},{0x7DCC, 0xBE71},
- {0x7DCD, 0xBE72},{0x7DCE, 0xBE73},{0x7DCF, 0xBE74},{0x7DD0, 0xBE75},{0x7DD1, 0xBE76},{0x7DD2, 0xBE77},{0x7DD3, 0xBE78},{0x7DD4, 0xBE79},
- {0x7DD5, 0xBE7A},{0x7DD6, 0xBE7B},{0x7DD7, 0xBE7C},{0x7DD8, 0xBE7D},{0x7DD9, 0xBE7E},{0x7DDA, 0xBE80},{0x7DDB, 0xBE81},{0x7DDC, 0xBE82},
- {0x7DDD, 0xBE83},{0x7DDE, 0xBE84},{0x7DDF, 0xBE85},{0x7DE0, 0xBE86},{0x7DE1, 0xBE87},{0x7DE2, 0xBE88},{0x7DE3, 0xBE89},{0x7DE4, 0xBE8A},
- {0x7DE5, 0xBE8B},{0x7DE6, 0xBE8C},{0x7DE7, 0xBE8D},{0x7DE8, 0xBE8E},{0x7DE9, 0xBE8F},{0x7DEA, 0xBE90},{0x7DEB, 0xBE91},{0x7DEC, 0xBE92},
- {0x7DED, 0xBE93},{0x7DEE, 0xBE94},{0x7DEF, 0xBE95},{0x7DF0, 0xBE96},{0x7DF1, 0xBE97},{0x7DF2, 0xBE98},{0x7DF3, 0xBE99},{0x7DF4, 0xBE9A},
- {0x7DF5, 0xBE9B},{0x7DF6, 0xBE9C},{0x7DF7, 0xBE9D},{0x7DF8, 0xBE9E},{0x7DF9, 0xBE9F},{0x7DFA, 0xBEA0},{0x7DFB, 0xBF40},{0x7DFC, 0xBF41},
- {0x7DFD, 0xBF42},{0x7DFE, 0xBF43},{0x7DFF, 0xBF44},{0x7E00, 0xBF45},{0x7E01, 0xBF46},{0x7E02, 0xBF47},{0x7E03, 0xBF48},{0x7E04, 0xBF49},
- {0x7E05, 0xBF4A},{0x7E06, 0xBF4B},{0x7E07, 0xBF4C},{0x7E08, 0xBF4D},{0x7E09, 0xBF4E},{0x7E0A, 0xBF4F},{0x7E0B, 0xBF50},{0x7E0C, 0xBF51},
- {0x7E0D, 0xBF52},{0x7E0E, 0xBF53},{0x7E0F, 0xBF54},{0x7E10, 0xBF55},{0x7E11, 0xBF56},{0x7E12, 0xBF57},{0x7E13, 0xBF58},{0x7E14, 0xBF59},
- {0x7E15, 0xBF5A},{0x7E16, 0xBF5B},{0x7E17, 0xBF5C},{0x7E18, 0xBF5D},{0x7E19, 0xBF5E},{0x7E1A, 0xBF5F},{0x7E1B, 0xBF60},{0x7E1C, 0xBF61},
- {0x7E1D, 0xBF62},{0x7E1E, 0xBF63},{0x7E1F, 0xBF64},{0x7E20, 0xBF65},{0x7E21, 0xBF66},{0x7E22, 0xBF67},{0x7E23, 0xBF68},{0x7E24, 0xBF69},
- {0x7E25, 0xBF6A},{0x7E26, 0xBF6B},{0x7E27, 0xBF6C},{0x7E28, 0xBF6D},{0x7E29, 0xBF6E},{0x7E2A, 0xBF6F},{0x7E2B, 0xBF70},{0x7E2C, 0xBF71},
- {0x7E2D, 0xBF72},{0x7E2E, 0xBF73},{0x7E2F, 0xBF74},{0x7E30, 0xBF75},{0x7E31, 0xBF76},{0x7E32, 0xBF77},{0x7E33, 0xBF78},{0x7E34, 0xBF79},
- {0x7E35, 0xBF7A},{0x7E36, 0xBF7B},{0x7E37, 0xBF7C},{0x7E38, 0xBF7D},{0x7E39, 0xBF7E},{0x7E3A, 0xBF80},{0x7E3B, 0xF7E3},{0x7E3C, 0xBF81},
- {0x7E3D, 0xBF82},{0x7E3E, 0xBF83},{0x7E3F, 0xBF84},{0x7E40, 0xBF85},{0x7E41, 0xB7B1},{0x7E42, 0xBF86},{0x7E43, 0xBF87},{0x7E44, 0xBF88},
- {0x7E45, 0xBF89},{0x7E46, 0xBF8A},{0x7E47, 0xF4ED},{0x7E48, 0xBF8B},{0x7E49, 0xBF8C},{0x7E4A, 0xBF8D},{0x7E4B, 0xBF8E},{0x7E4C, 0xBF8F},
- {0x7E4D, 0xBF90},{0x7E4E, 0xBF91},{0x7E4F, 0xBF92},{0x7E50, 0xBF93},{0x7E51, 0xBF94},{0x7E52, 0xBF95},{0x7E53, 0xBF96},{0x7E54, 0xBF97},
- {0x7E55, 0xBF98},{0x7E56, 0xBF99},{0x7E57, 0xBF9A},{0x7E58, 0xBF9B},{0x7E59, 0xBF9C},{0x7E5A, 0xBF9D},{0x7E5B, 0xBF9E},{0x7E5C, 0xBF9F},
- {0x7E5D, 0xBFA0},{0x7E5E, 0xC040},{0x7E5F, 0xC041},{0x7E60, 0xC042},{0x7E61, 0xC043},{0x7E62, 0xC044},{0x7E63, 0xC045},{0x7E64, 0xC046},
- {0x7E65, 0xC047},{0x7E66, 0xC048},{0x7E67, 0xC049},{0x7E68, 0xC04A},{0x7E69, 0xC04B},{0x7E6A, 0xC04C},{0x7E6B, 0xC04D},{0x7E6C, 0xC04E},
- {0x7E6D, 0xC04F},{0x7E6E, 0xC050},{0x7E6F, 0xC051},{0x7E70, 0xC052},{0x7E71, 0xC053},{0x7E72, 0xC054},{0x7E73, 0xC055},{0x7E74, 0xC056},
- {0x7E75, 0xC057},{0x7E76, 0xC058},{0x7E77, 0xC059},{0x7E78, 0xC05A},{0x7E79, 0xC05B},{0x7E7A, 0xC05C},{0x7E7B, 0xC05D},{0x7E7C, 0xC05E},
- {0x7E7D, 0xC05F},{0x7E7E, 0xC060},{0x7E7F, 0xC061},{0x7E80, 0xC062},{0x7E81, 0xC063},{0x7E82, 0xD7EB},{0x7E83, 0xC064},{0x7E84, 0xC065},
- {0x7E85, 0xC066},{0x7E86, 0xC067},{0x7E87, 0xC068},{0x7E88, 0xC069},{0x7E89, 0xC06A},{0x7E8A, 0xC06B},{0x7E8B, 0xC06C},{0x7E8C, 0xC06D},
- {0x7E8D, 0xC06E},{0x7E8E, 0xC06F},{0x7E8F, 0xC070},{0x7E90, 0xC071},{0x7E91, 0xC072},{0x7E92, 0xC073},{0x7E93, 0xC074},{0x7E94, 0xC075},
- {0x7E95, 0xC076},{0x7E96, 0xC077},{0x7E97, 0xC078},{0x7E98, 0xC079},{0x7E99, 0xC07A},{0x7E9A, 0xC07B},{0x7E9B, 0xF4EE},{0x7E9C, 0xC07C},
- {0x7E9D, 0xC07D},{0x7E9E, 0xC07E},{0x7E9F, 0xE6F9},{0x7EA0, 0xBEC0},{0x7EA1, 0xE6FA},{0x7EA2, 0xBAEC},{0x7EA3, 0xE6FB},{0x7EA4, 0xCFCB},
- {0x7EA5, 0xE6FC},{0x7EA6, 0xD4BC},{0x7EA7, 0xBCB6},{0x7EA8, 0xE6FD},{0x7EA9, 0xE6FE},{0x7EAA, 0xBCCD},{0x7EAB, 0xC8D2},{0x7EAC, 0xCEB3},
- {0x7EAD, 0xE7A1},{0x7EAE, 0xC080},{0x7EAF, 0xB4BF},{0x7EB0, 0xE7A2},{0x7EB1, 0xC9B4},{0x7EB2, 0xB8D9},{0x7EB3, 0xC4C9},{0x7EB4, 0xC081},
- {0x7EB5, 0xD7DD},{0x7EB6, 0xC2DA},{0x7EB7, 0xB7D7},{0x7EB8, 0xD6BD},{0x7EB9, 0xCEC6},{0x7EBA, 0xB7C4},{0x7EBB, 0xC082},{0x7EBC, 0xC083},
- {0x7EBD, 0xC5A6},{0x7EBE, 0xE7A3},{0x7EBF, 0xCFDF},{0x7EC0, 0xE7A4},{0x7EC1, 0xE7A5},{0x7EC2, 0xE7A6},{0x7EC3, 0xC1B7},{0x7EC4, 0xD7E9},
- {0x7EC5, 0xC9F0},{0x7EC6, 0xCFB8},{0x7EC7, 0xD6AF},{0x7EC8, 0xD6D5},{0x7EC9, 0xE7A7},{0x7ECA, 0xB0ED},{0x7ECB, 0xE7A8},{0x7ECC, 0xE7A9},
- {0x7ECD, 0xC9DC},{0x7ECE, 0xD2EF},{0x7ECF, 0xBEAD},{0x7ED0, 0xE7AA},{0x7ED1, 0xB0F3},{0x7ED2, 0xC8DE},{0x7ED3, 0xBDE1},{0x7ED4, 0xE7AB},
- {0x7ED5, 0xC8C6},{0x7ED6, 0xC084},{0x7ED7, 0xE7AC},{0x7ED8, 0xBBE6},{0x7ED9, 0xB8F8},{0x7EDA, 0xD1A4},{0x7EDB, 0xE7AD},{0x7EDC, 0xC2E7},
- {0x7EDD, 0xBEF8},{0x7EDE, 0xBDCA},{0x7EDF, 0xCDB3},{0x7EE0, 0xE7AE},{0x7EE1, 0xE7AF},{0x7EE2, 0xBEEE},{0x7EE3, 0xD0E5},{0x7EE4, 0xC085},
- {0x7EE5, 0xCBE7},{0x7EE6, 0xCCD0},{0x7EE7, 0xBCCC},{0x7EE8, 0xE7B0},{0x7EE9, 0xBCA8},{0x7EEA, 0xD0F7},{0x7EEB, 0xE7B1},{0x7EEC, 0xC086},
- {0x7EED, 0xD0F8},{0x7EEE, 0xE7B2},{0x7EEF, 0xE7B3},{0x7EF0, 0xB4C2},{0x7EF1, 0xE7B4},{0x7EF2, 0xE7B5},{0x7EF3, 0xC9FE},{0x7EF4, 0xCEAC},
- {0x7EF5, 0xC3E0},{0x7EF6, 0xE7B7},{0x7EF7, 0xB1C1},{0x7EF8, 0xB3F1},{0x7EF9, 0xC087},{0x7EFA, 0xE7B8},{0x7EFB, 0xE7B9},{0x7EFC, 0xD7DB},
- {0x7EFD, 0xD5C0},{0x7EFE, 0xE7BA},{0x7EFF, 0xC2CC},{0x7F00, 0xD7BA},{0x7F01, 0xE7BB},{0x7F02, 0xE7BC},{0x7F03, 0xE7BD},{0x7F04, 0xBCEA},
- {0x7F05, 0xC3E5},{0x7F06, 0xC0C2},{0x7F07, 0xE7BE},{0x7F08, 0xE7BF},{0x7F09, 0xBCA9},{0x7F0A, 0xC088},{0x7F0B, 0xE7C0},{0x7F0C, 0xE7C1},
- {0x7F0D, 0xE7B6},{0x7F0E, 0xB6D0},{0x7F0F, 0xE7C2},{0x7F10, 0xC089},{0x7F11, 0xE7C3},{0x7F12, 0xE7C4},{0x7F13, 0xBBBA},{0x7F14, 0xB5DE},
- {0x7F15, 0xC2C6},{0x7F16, 0xB1E0},{0x7F17, 0xE7C5},{0x7F18, 0xD4B5},{0x7F19, 0xE7C6},{0x7F1A, 0xB8BF},{0x7F1B, 0xE7C8},{0x7F1C, 0xE7C7},
- {0x7F1D, 0xB7EC},{0x7F1E, 0xC08A},{0x7F1F, 0xE7C9},{0x7F20, 0xB2F8},{0x7F21, 0xE7CA},{0x7F22, 0xE7CB},{0x7F23, 0xE7CC},{0x7F24, 0xE7CD},
- {0x7F25, 0xE7CE},{0x7F26, 0xE7CF},{0x7F27, 0xE7D0},{0x7F28, 0xD3A7},{0x7F29, 0xCBF5},{0x7F2A, 0xE7D1},{0x7F2B, 0xE7D2},{0x7F2C, 0xE7D3},
- {0x7F2D, 0xE7D4},{0x7F2E, 0xC9C9},{0x7F2F, 0xE7D5},{0x7F30, 0xE7D6},{0x7F31, 0xE7D7},{0x7F32, 0xE7D8},{0x7F33, 0xE7D9},{0x7F34, 0xBDC9},
- {0x7F35, 0xE7DA},{0x7F36, 0xF3BE},{0x7F37, 0xC08B},{0x7F38, 0xB8D7},{0x7F39, 0xC08C},{0x7F3A, 0xC8B1},{0x7F3B, 0xC08D},{0x7F3C, 0xC08E},
- {0x7F3D, 0xC08F},{0x7F3E, 0xC090},{0x7F3F, 0xC091},{0x7F40, 0xC092},{0x7F41, 0xC093},{0x7F42, 0xF3BF},{0x7F43, 0xC094},{0x7F44, 0xF3C0},
- {0x7F45, 0xF3C1},{0x7F46, 0xC095},{0x7F47, 0xC096},{0x7F48, 0xC097},{0x7F49, 0xC098},{0x7F4A, 0xC099},{0x7F4B, 0xC09A},{0x7F4C, 0xC09B},
- {0x7F4D, 0xC09C},{0x7F4E, 0xC09D},{0x7F4F, 0xC09E},{0x7F50, 0xB9DE},{0x7F51, 0xCDF8},{0x7F52, 0xC09F},{0x7F53, 0xC0A0},{0x7F54, 0xD8E8},
- {0x7F55, 0xBAB1},{0x7F56, 0xC140},{0x7F57, 0xC2DE},{0x7F58, 0xEEB7},{0x7F59, 0xC141},{0x7F5A, 0xB7A3},{0x7F5B, 0xC142},{0x7F5C, 0xC143},
- {0x7F5D, 0xC144},{0x7F5E, 0xC145},{0x7F5F, 0xEEB9},{0x7F60, 0xC146},{0x7F61, 0xEEB8},{0x7F62, 0xB0D5},{0x7F63, 0xC147},{0x7F64, 0xC148},
- {0x7F65, 0xC149},{0x7F66, 0xC14A},{0x7F67, 0xC14B},{0x7F68, 0xEEBB},{0x7F69, 0xD5D6},{0x7F6A, 0xD7EF},{0x7F6B, 0xC14C},{0x7F6C, 0xC14D},
- {0x7F6D, 0xC14E},{0x7F6E, 0xD6C3},{0x7F6F, 0xC14F},{0x7F70, 0xC150},{0x7F71, 0xEEBD},{0x7F72, 0xCAF0},{0x7F73, 0xC151},{0x7F74, 0xEEBC},
- {0x7F75, 0xC152},{0x7F76, 0xC153},{0x7F77, 0xC154},{0x7F78, 0xC155},{0x7F79, 0xEEBE},{0x7F7A, 0xC156},{0x7F7B, 0xC157},{0x7F7C, 0xC158},
- {0x7F7D, 0xC159},{0x7F7E, 0xEEC0},{0x7F7F, 0xC15A},{0x7F80, 0xC15B},{0x7F81, 0xEEBF},{0x7F82, 0xC15C},{0x7F83, 0xC15D},{0x7F84, 0xC15E},
- {0x7F85, 0xC15F},{0x7F86, 0xC160},{0x7F87, 0xC161},{0x7F88, 0xC162},{0x7F89, 0xC163},{0x7F8A, 0xD1F2},{0x7F8B, 0xC164},{0x7F8C, 0xC7BC},
- {0x7F8D, 0xC165},{0x7F8E, 0xC3C0},{0x7F8F, 0xC166},{0x7F90, 0xC167},{0x7F91, 0xC168},{0x7F92, 0xC169},{0x7F93, 0xC16A},{0x7F94, 0xB8E1},
- {0x7F95, 0xC16B},{0x7F96, 0xC16C},{0x7F97, 0xC16D},{0x7F98, 0xC16E},{0x7F99, 0xC16F},{0x7F9A, 0xC1E7},{0x7F9B, 0xC170},{0x7F9C, 0xC171},
- {0x7F9D, 0xF4C6},{0x7F9E, 0xD0DF},{0x7F9F, 0xF4C7},{0x7FA0, 0xC172},{0x7FA1, 0xCFDB},{0x7FA2, 0xC173},{0x7FA3, 0xC174},{0x7FA4, 0xC8BA},
- {0x7FA5, 0xC175},{0x7FA6, 0xC176},{0x7FA7, 0xF4C8},{0x7FA8, 0xC177},{0x7FA9, 0xC178},{0x7FAA, 0xC179},{0x7FAB, 0xC17A},{0x7FAC, 0xC17B},
- {0x7FAD, 0xC17C},{0x7FAE, 0xC17D},{0x7FAF, 0xF4C9},{0x7FB0, 0xF4CA},{0x7FB1, 0xC17E},{0x7FB2, 0xF4CB},{0x7FB3, 0xC180},{0x7FB4, 0xC181},
- {0x7FB5, 0xC182},{0x7FB6, 0xC183},{0x7FB7, 0xC184},{0x7FB8, 0xD9FA},{0x7FB9, 0xB8FE},{0x7FBA, 0xC185},{0x7FBB, 0xC186},{0x7FBC, 0xE5F1},
- {0x7FBD, 0xD3F0},{0x7FBE, 0xC187},{0x7FBF, 0xF4E0},{0x7FC0, 0xC188},{0x7FC1, 0xCECC},{0x7FC2, 0xC189},{0x7FC3, 0xC18A},{0x7FC4, 0xC18B},
- {0x7FC5, 0xB3E1},{0x7FC6, 0xC18C},{0x7FC7, 0xC18D},{0x7FC8, 0xC18E},{0x7FC9, 0xC18F},{0x7FCA, 0xF1B4},{0x7FCB, 0xC190},{0x7FCC, 0xD2EE},
- {0x7FCD, 0xC191},{0x7FCE, 0xF4E1},{0x7FCF, 0xC192},{0x7FD0, 0xC193},{0x7FD1, 0xC194},{0x7FD2, 0xC195},{0x7FD3, 0xC196},{0x7FD4, 0xCFE8},
- {0x7FD5, 0xF4E2},{0x7FD6, 0xC197},{0x7FD7, 0xC198},{0x7FD8, 0xC7CC},{0x7FD9, 0xC199},{0x7FDA, 0xC19A},{0x7FDB, 0xC19B},{0x7FDC, 0xC19C},
- {0x7FDD, 0xC19D},{0x7FDE, 0xC19E},{0x7FDF, 0xB5D4},{0x7FE0, 0xB4E4},{0x7FE1, 0xF4E4},{0x7FE2, 0xC19F},{0x7FE3, 0xC1A0},{0x7FE4, 0xC240},
- {0x7FE5, 0xF4E3},{0x7FE6, 0xF4E5},{0x7FE7, 0xC241},{0x7FE8, 0xC242},{0x7FE9, 0xF4E6},{0x7FEA, 0xC243},{0x7FEB, 0xC244},{0x7FEC, 0xC245},
- {0x7FED, 0xC246},{0x7FEE, 0xF4E7},{0x7FEF, 0xC247},{0x7FF0, 0xBAB2},{0x7FF1, 0xB0BF},{0x7FF2, 0xC248},{0x7FF3, 0xF4E8},{0x7FF4, 0xC249},
- {0x7FF5, 0xC24A},{0x7FF6, 0xC24B},{0x7FF7, 0xC24C},{0x7FF8, 0xC24D},{0x7FF9, 0xC24E},{0x7FFA, 0xC24F},{0x7FFB, 0xB7AD},{0x7FFC, 0xD2ED},
- {0x7FFD, 0xC250},{0x7FFE, 0xC251},{0x7FFF, 0xC252},{0x8000, 0xD2AB},{0x8001, 0xC0CF},{0x8002, 0xC253},{0x8003, 0xBFBC},{0x8004, 0xEBA3},
- {0x8005, 0xD5DF},{0x8006, 0xEAC8},{0x8007, 0xC254},{0x8008, 0xC255},{0x8009, 0xC256},{0x800A, 0xC257},{0x800B, 0xF1F3},{0x800C, 0xB6F8},
- {0x800D, 0xCBA3},{0x800E, 0xC258},{0x800F, 0xC259},{0x8010, 0xC4CD},{0x8011, 0xC25A},{0x8012, 0xF1E7},{0x8013, 0xC25B},{0x8014, 0xF1E8},
- {0x8015, 0xB8FB},{0x8016, 0xF1E9},{0x8017, 0xBAC4},{0x8018, 0xD4C5},{0x8019, 0xB0D2},{0x801A, 0xC25C},{0x801B, 0xC25D},{0x801C, 0xF1EA},
- {0x801D, 0xC25E},{0x801E, 0xC25F},{0x801F, 0xC260},{0x8020, 0xF1EB},{0x8021, 0xC261},{0x8022, 0xF1EC},{0x8023, 0xC262},{0x8024, 0xC263},
- {0x8025, 0xF1ED},{0x8026, 0xF1EE},{0x8027, 0xF1EF},{0x8028, 0xF1F1},{0x8029, 0xF1F0},{0x802A, 0xC5D5},{0x802B, 0xC264},{0x802C, 0xC265},
- {0x802D, 0xC266},{0x802E, 0xC267},{0x802F, 0xC268},{0x8030, 0xC269},{0x8031, 0xF1F2},{0x8032, 0xC26A},{0x8033, 0xB6FA},{0x8034, 0xC26B},
- {0x8035, 0xF1F4},{0x8036, 0xD2AE},{0x8037, 0xDEC7},{0x8038, 0xCBCA},{0x8039, 0xC26C},{0x803A, 0xC26D},{0x803B, 0xB3DC},{0x803C, 0xC26E},
- {0x803D, 0xB5A2},{0x803E, 0xC26F},{0x803F, 0xB9A2},{0x8040, 0xC270},{0x8041, 0xC271},{0x8042, 0xC4F4},{0x8043, 0xF1F5},{0x8044, 0xC272},
- {0x8045, 0xC273},{0x8046, 0xF1F6},{0x8047, 0xC274},{0x8048, 0xC275},{0x8049, 0xC276},{0x804A, 0xC1C4},{0x804B, 0xC1FB},{0x804C, 0xD6B0},
- {0x804D, 0xF1F7},{0x804E, 0xC277},{0x804F, 0xC278},{0x8050, 0xC279},{0x8051, 0xC27A},{0x8052, 0xF1F8},{0x8053, 0xC27B},{0x8054, 0xC1AA},
- {0x8055, 0xC27C},{0x8056, 0xC27D},{0x8057, 0xC27E},{0x8058, 0xC6B8},{0x8059, 0xC280},{0x805A, 0xBEDB},{0x805B, 0xC281},{0x805C, 0xC282},
- {0x805D, 0xC283},{0x805E, 0xC284},{0x805F, 0xC285},{0x8060, 0xC286},{0x8061, 0xC287},{0x8062, 0xC288},{0x8063, 0xC289},{0x8064, 0xC28A},
- {0x8065, 0xC28B},{0x8066, 0xC28C},{0x8067, 0xC28D},{0x8068, 0xC28E},{0x8069, 0xF1F9},{0x806A, 0xB4CF},{0x806B, 0xC28F},{0x806C, 0xC290},
- {0x806D, 0xC291},{0x806E, 0xC292},{0x806F, 0xC293},{0x8070, 0xC294},{0x8071, 0xF1FA},{0x8072, 0xC295},{0x8073, 0xC296},{0x8074, 0xC297},
- {0x8075, 0xC298},{0x8076, 0xC299},{0x8077, 0xC29A},{0x8078, 0xC29B},{0x8079, 0xC29C},{0x807A, 0xC29D},{0x807B, 0xC29E},{0x807C, 0xC29F},
- {0x807D, 0xC2A0},{0x807E, 0xC340},{0x807F, 0xEDB2},{0x8080, 0xEDB1},{0x8081, 0xC341},{0x8082, 0xC342},{0x8083, 0xCBE0},{0x8084, 0xD2DE},
- {0x8085, 0xC343},{0x8086, 0xCBC1},{0x8087, 0xD5D8},{0x8088, 0xC344},{0x8089, 0xC8E2},{0x808A, 0xC345},{0x808B, 0xC0DF},{0x808C, 0xBCA1},
- {0x808D, 0xC346},{0x808E, 0xC347},{0x808F, 0xC348},{0x8090, 0xC349},{0x8091, 0xC34A},{0x8092, 0xC34B},{0x8093, 0xEBC1},{0x8094, 0xC34C},
- {0x8095, 0xC34D},{0x8096, 0xD0A4},{0x8097, 0xC34E},{0x8098, 0xD6E2},{0x8099, 0xC34F},{0x809A, 0xB6C7},{0x809B, 0xB8D8},{0x809C, 0xEBC0},
- {0x809D, 0xB8CE},{0x809E, 0xC350},{0x809F, 0xEBBF},{0x80A0, 0xB3A6},{0x80A1, 0xB9C9},{0x80A2, 0xD6AB},{0x80A3, 0xC351},{0x80A4, 0xB7F4},
- {0x80A5, 0xB7CA},{0x80A6, 0xC352},{0x80A7, 0xC353},{0x80A8, 0xC354},{0x80A9, 0xBCE7},{0x80AA, 0xB7BE},{0x80AB, 0xEBC6},{0x80AC, 0xC355},
- {0x80AD, 0xEBC7},{0x80AE, 0xB0B9},{0x80AF, 0xBFCF},{0x80B0, 0xC356},{0x80B1, 0xEBC5},{0x80B2, 0xD3FD},{0x80B3, 0xC357},{0x80B4, 0xEBC8},
- {0x80B5, 0xC358},{0x80B6, 0xC359},{0x80B7, 0xEBC9},{0x80B8, 0xC35A},{0x80B9, 0xC35B},{0x80BA, 0xB7CE},{0x80BB, 0xC35C},{0x80BC, 0xEBC2},
- {0x80BD, 0xEBC4},{0x80BE, 0xC9F6},{0x80BF, 0xD6D7},{0x80C0, 0xD5CD},{0x80C1, 0xD0B2},{0x80C2, 0xEBCF},{0x80C3, 0xCEB8},{0x80C4, 0xEBD0},
- {0x80C5, 0xC35D},{0x80C6, 0xB5A8},{0x80C7, 0xC35E},{0x80C8, 0xC35F},{0x80C9, 0xC360},{0x80CA, 0xC361},{0x80CB, 0xC362},{0x80CC, 0xB1B3},
- {0x80CD, 0xEBD2},{0x80CE, 0xCCA5},{0x80CF, 0xC363},{0x80D0, 0xC364},{0x80D1, 0xC365},{0x80D2, 0xC366},{0x80D3, 0xC367},{0x80D4, 0xC368},
- {0x80D5, 0xC369},{0x80D6, 0xC5D6},{0x80D7, 0xEBD3},{0x80D8, 0xC36A},{0x80D9, 0xEBD1},{0x80DA, 0xC5DF},{0x80DB, 0xEBCE},{0x80DC, 0xCAA4},
- {0x80DD, 0xEBD5},{0x80DE, 0xB0FB},{0x80DF, 0xC36B},{0x80E0, 0xC36C},{0x80E1, 0xBAFA},{0x80E2, 0xC36D},{0x80E3, 0xC36E},{0x80E4, 0xD8B7},
- {0x80E5, 0xF1E3},{0x80E6, 0xC36F},{0x80E7, 0xEBCA},{0x80E8, 0xEBCB},{0x80E9, 0xEBCC},{0x80EA, 0xEBCD},{0x80EB, 0xEBD6},{0x80EC, 0xE6C0},
- {0x80ED, 0xEBD9},{0x80EE, 0xC370},{0x80EF, 0xBFE8},{0x80F0, 0xD2C8},{0x80F1, 0xEBD7},{0x80F2, 0xEBDC},{0x80F3, 0xB8EC},{0x80F4, 0xEBD8},
- {0x80F5, 0xC371},{0x80F6, 0xBDBA},{0x80F7, 0xC372},{0x80F8, 0xD0D8},{0x80F9, 0xC373},{0x80FA, 0xB0B7},{0x80FB, 0xC374},{0x80FC, 0xEBDD},
- {0x80FD, 0xC4DC},{0x80FE, 0xC375},{0x80FF, 0xC376},{0x8100, 0xC377},{0x8101, 0xC378},{0x8102, 0xD6AC},{0x8103, 0xC379},{0x8104, 0xC37A},
- {0x8105, 0xC37B},{0x8106, 0xB4E0},{0x8107, 0xC37C},{0x8108, 0xC37D},{0x8109, 0xC2F6},{0x810A, 0xBCB9},{0x810B, 0xC37E},{0x810C, 0xC380},
- {0x810D, 0xEBDA},{0x810E, 0xEBDB},{0x810F, 0xD4E0},{0x8110, 0xC6EA},{0x8111, 0xC4D4},{0x8112, 0xEBDF},{0x8113, 0xC5A7},{0x8114, 0xD9F5},
- {0x8115, 0xC381},{0x8116, 0xB2B1},{0x8117, 0xC382},{0x8118, 0xEBE4},{0x8119, 0xC383},{0x811A, 0xBDC5},{0x811B, 0xC384},{0x811C, 0xC385},
- {0x811D, 0xC386},{0x811E, 0xEBE2},{0x811F, 0xC387},{0x8120, 0xC388},{0x8121, 0xC389},{0x8122, 0xC38A},{0x8123, 0xC38B},{0x8124, 0xC38C},
- {0x8125, 0xC38D},{0x8126, 0xC38E},{0x8127, 0xC38F},{0x8128, 0xC390},{0x8129, 0xC391},{0x812A, 0xC392},{0x812B, 0xC393},{0x812C, 0xEBE3},
- {0x812D, 0xC394},{0x812E, 0xC395},{0x812F, 0xB8AC},{0x8130, 0xC396},{0x8131, 0xCDD1},{0x8132, 0xEBE5},{0x8133, 0xC397},{0x8134, 0xC398},
- {0x8135, 0xC399},{0x8136, 0xEBE1},{0x8137, 0xC39A},{0x8138, 0xC1B3},{0x8139, 0xC39B},{0x813A, 0xC39C},{0x813B, 0xC39D},{0x813C, 0xC39E},
- {0x813D, 0xC39F},{0x813E, 0xC6A2},{0x813F, 0xC3A0},{0x8140, 0xC440},{0x8141, 0xC441},{0x8142, 0xC442},{0x8143, 0xC443},{0x8144, 0xC444},
- {0x8145, 0xC445},{0x8146, 0xCCF3},{0x8147, 0xC446},{0x8148, 0xEBE6},{0x8149, 0xC447},{0x814A, 0xC0B0},{0x814B, 0xD2B8},{0x814C, 0xEBE7},
- {0x814D, 0xC448},{0x814E, 0xC449},{0x814F, 0xC44A},{0x8150, 0xB8AF},{0x8151, 0xB8AD},{0x8152, 0xC44B},{0x8153, 0xEBE8},{0x8154, 0xC7BB},
- {0x8155, 0xCDF3},{0x8156, 0xC44C},{0x8157, 0xC44D},{0x8158, 0xC44E},{0x8159, 0xEBEA},{0x815A, 0xEBEB},{0x815B, 0xC44F},{0x815C, 0xC450},
- {0x815D, 0xC451},{0x815E, 0xC452},{0x815F, 0xC453},{0x8160, 0xEBED},{0x8161, 0xC454},{0x8162, 0xC455},{0x8163, 0xC456},{0x8164, 0xC457},
- {0x8165, 0xD0C8},{0x8166, 0xC458},{0x8167, 0xEBF2},{0x8168, 0xC459},{0x8169, 0xEBEE},{0x816A, 0xC45A},{0x816B, 0xC45B},{0x816C, 0xC45C},
- {0x816D, 0xEBF1},{0x816E, 0xC8F9},{0x816F, 0xC45D},{0x8170, 0xD1FC},{0x8171, 0xEBEC},{0x8172, 0xC45E},{0x8173, 0xC45F},{0x8174, 0xEBE9},
- {0x8175, 0xC460},{0x8176, 0xC461},{0x8177, 0xC462},{0x8178, 0xC463},{0x8179, 0xB8B9},{0x817A, 0xCFD9},{0x817B, 0xC4E5},{0x817C, 0xEBEF},
- {0x817D, 0xEBF0},{0x817E, 0xCCDA},{0x817F, 0xCDC8},{0x8180, 0xB0F2},{0x8181, 0xC464},{0x8182, 0xEBF6},{0x8183, 0xC465},{0x8184, 0xC466},
- {0x8185, 0xC467},{0x8186, 0xC468},{0x8187, 0xC469},{0x8188, 0xEBF5},{0x8189, 0xC46A},{0x818A, 0xB2B2},{0x818B, 0xC46B},{0x818C, 0xC46C},
- {0x818D, 0xC46D},{0x818E, 0xC46E},{0x818F, 0xB8E0},{0x8190, 0xC46F},{0x8191, 0xEBF7},{0x8192, 0xC470},{0x8193, 0xC471},{0x8194, 0xC472},
- {0x8195, 0xC473},{0x8196, 0xC474},{0x8197, 0xC475},{0x8198, 0xB1EC},{0x8199, 0xC476},{0x819A, 0xC477},{0x819B, 0xCCC5},{0x819C, 0xC4A4},
- {0x819D, 0xCFA5},{0x819E, 0xC478},{0x819F, 0xC479},{0x81A0, 0xC47A},{0x81A1, 0xC47B},{0x81A2, 0xC47C},{0x81A3, 0xEBF9},{0x81A4, 0xC47D},
- {0x81A5, 0xC47E},{0x81A6, 0xECA2},{0x81A7, 0xC480},{0x81A8, 0xC5F2},{0x81A9, 0xC481},{0x81AA, 0xEBFA},{0x81AB, 0xC482},{0x81AC, 0xC483},
- {0x81AD, 0xC484},{0x81AE, 0xC485},{0x81AF, 0xC486},{0x81B0, 0xC487},{0x81B1, 0xC488},{0x81B2, 0xC489},{0x81B3, 0xC9C5},{0x81B4, 0xC48A},
- {0x81B5, 0xC48B},{0x81B6, 0xC48C},{0x81B7, 0xC48D},{0x81B8, 0xC48E},{0x81B9, 0xC48F},{0x81BA, 0xE2DF},{0x81BB, 0xEBFE},{0x81BC, 0xC490},
- {0x81BD, 0xC491},{0x81BE, 0xC492},{0x81BF, 0xC493},{0x81C0, 0xCDCE},{0x81C1, 0xECA1},{0x81C2, 0xB1DB},{0x81C3, 0xD3B7},{0x81C4, 0xC494},
- {0x81C5, 0xC495},{0x81C6, 0xD2DC},{0x81C7, 0xC496},{0x81C8, 0xC497},{0x81C9, 0xC498},{0x81CA, 0xEBFD},{0x81CB, 0xC499},{0x81CC, 0xEBFB},
- {0x81CD, 0xC49A},{0x81CE, 0xC49B},{0x81CF, 0xC49C},{0x81D0, 0xC49D},{0x81D1, 0xC49E},{0x81D2, 0xC49F},{0x81D3, 0xC4A0},{0x81D4, 0xC540},
- {0x81D5, 0xC541},{0x81D6, 0xC542},{0x81D7, 0xC543},{0x81D8, 0xC544},{0x81D9, 0xC545},{0x81DA, 0xC546},{0x81DB, 0xC547},{0x81DC, 0xC548},
- {0x81DD, 0xC549},{0x81DE, 0xC54A},{0x81DF, 0xC54B},{0x81E0, 0xC54C},{0x81E1, 0xC54D},{0x81E2, 0xC54E},{0x81E3, 0xB3BC},{0x81E4, 0xC54F},
- {0x81E5, 0xC550},{0x81E6, 0xC551},{0x81E7, 0xEAB0},{0x81E8, 0xC552},{0x81E9, 0xC553},{0x81EA, 0xD7D4},{0x81EB, 0xC554},{0x81EC, 0xF4AB},
- {0x81ED, 0xB3F4},{0x81EE, 0xC555},{0x81EF, 0xC556},{0x81F0, 0xC557},{0x81F1, 0xC558},{0x81F2, 0xC559},{0x81F3, 0xD6C1},{0x81F4, 0xD6C2},
- {0x81F5, 0xC55A},{0x81F6, 0xC55B},{0x81F7, 0xC55C},{0x81F8, 0xC55D},{0x81F9, 0xC55E},{0x81FA, 0xC55F},{0x81FB, 0xD5E9},{0x81FC, 0xBECA},
- {0x81FD, 0xC560},{0x81FE, 0xF4A7},{0x81FF, 0xC561},{0x8200, 0xD2A8},{0x8201, 0xF4A8},{0x8202, 0xF4A9},{0x8203, 0xC562},{0x8204, 0xF4AA},
- {0x8205, 0xBECB},{0x8206, 0xD3DF},{0x8207, 0xC563},{0x8208, 0xC564},{0x8209, 0xC565},{0x820A, 0xC566},{0x820B, 0xC567},{0x820C, 0xC9E0},
- {0x820D, 0xC9E1},{0x820E, 0xC568},{0x820F, 0xC569},{0x8210, 0xF3C2},{0x8211, 0xC56A},{0x8212, 0xCAE6},{0x8213, 0xC56B},{0x8214, 0xCCF2},
- {0x8215, 0xC56C},{0x8216, 0xC56D},{0x8217, 0xC56E},{0x8218, 0xC56F},{0x8219, 0xC570},{0x821A, 0xC571},{0x821B, 0xE2B6},{0x821C, 0xCBB4},
- {0x821D, 0xC572},{0x821E, 0xCEE8},{0x821F, 0xD6DB},{0x8220, 0xC573},{0x8221, 0xF4AD},{0x8222, 0xF4AE},{0x8223, 0xF4AF},{0x8224, 0xC574},
- {0x8225, 0xC575},{0x8226, 0xC576},{0x8227, 0xC577},{0x8228, 0xF4B2},{0x8229, 0xC578},{0x822A, 0xBABD},{0x822B, 0xF4B3},{0x822C, 0xB0E3},
- {0x822D, 0xF4B0},{0x822E, 0xC579},{0x822F, 0xF4B1},{0x8230, 0xBDA2},{0x8231, 0xB2D5},{0x8232, 0xC57A},{0x8233, 0xF4B6},{0x8234, 0xF4B7},
- {0x8235, 0xB6E6},{0x8236, 0xB2B0},{0x8237, 0xCFCF},{0x8238, 0xF4B4},{0x8239, 0xB4AC},{0x823A, 0xC57B},{0x823B, 0xF4B5},{0x823C, 0xC57C},
- {0x823D, 0xC57D},{0x823E, 0xF4B8},{0x823F, 0xC57E},{0x8240, 0xC580},{0x8241, 0xC581},{0x8242, 0xC582},{0x8243, 0xC583},{0x8244, 0xF4B9},
- {0x8245, 0xC584},{0x8246, 0xC585},{0x8247, 0xCDA7},{0x8248, 0xC586},{0x8249, 0xF4BA},{0x824A, 0xC587},{0x824B, 0xF4BB},{0x824C, 0xC588},
- {0x824D, 0xC589},{0x824E, 0xC58A},{0x824F, 0xF4BC},{0x8250, 0xC58B},{0x8251, 0xC58C},{0x8252, 0xC58D},{0x8253, 0xC58E},{0x8254, 0xC58F},
- {0x8255, 0xC590},{0x8256, 0xC591},{0x8257, 0xC592},{0x8258, 0xCBD2},{0x8259, 0xC593},{0x825A, 0xF4BD},{0x825B, 0xC594},{0x825C, 0xC595},
- {0x825D, 0xC596},{0x825E, 0xC597},{0x825F, 0xF4BE},{0x8260, 0xC598},{0x8261, 0xC599},{0x8262, 0xC59A},{0x8263, 0xC59B},{0x8264, 0xC59C},
- {0x8265, 0xC59D},{0x8266, 0xC59E},{0x8267, 0xC59F},{0x8268, 0xF4BF},{0x8269, 0xC5A0},{0x826A, 0xC640},{0x826B, 0xC641},{0x826C, 0xC642},
- {0x826D, 0xC643},{0x826E, 0xF4DE},{0x826F, 0xC1BC},{0x8270, 0xBCE8},{0x8271, 0xC644},{0x8272, 0xC9AB},{0x8273, 0xD1DE},{0x8274, 0xE5F5},
- {0x8275, 0xC645},{0x8276, 0xC646},{0x8277, 0xC647},{0x8278, 0xC648},{0x8279, 0xDCB3},{0x827A, 0xD2D5},{0x827B, 0xC649},{0x827C, 0xC64A},
- {0x827D, 0xDCB4},{0x827E, 0xB0AC},{0x827F, 0xDCB5},{0x8280, 0xC64B},{0x8281, 0xC64C},{0x8282, 0xBDDA},{0x8283, 0xC64D},{0x8284, 0xDCB9},
- {0x8285, 0xC64E},{0x8286, 0xC64F},{0x8287, 0xC650},{0x8288, 0xD8C2},{0x8289, 0xC651},{0x828A, 0xDCB7},{0x828B, 0xD3F3},{0x828C, 0xC652},
- {0x828D, 0xC9D6},{0x828E, 0xDCBA},{0x828F, 0xDCB6},{0x8290, 0xC653},{0x8291, 0xDCBB},{0x8292, 0xC3A2},{0x8293, 0xC654},{0x8294, 0xC655},
- {0x8295, 0xC656},{0x8296, 0xC657},{0x8297, 0xDCBC},{0x8298, 0xDCC5},{0x8299, 0xDCBD},{0x829A, 0xC658},{0x829B, 0xC659},{0x829C, 0xCEDF},
- {0x829D, 0xD6A5},{0x829E, 0xC65A},{0x829F, 0xDCCF},{0x82A0, 0xC65B},{0x82A1, 0xDCCD},{0x82A2, 0xC65C},{0x82A3, 0xC65D},{0x82A4, 0xDCD2},
- {0x82A5, 0xBDE6},{0x82A6, 0xC2AB},{0x82A7, 0xC65E},{0x82A8, 0xDCB8},{0x82A9, 0xDCCB},{0x82AA, 0xDCCE},{0x82AB, 0xDCBE},{0x82AC, 0xB7D2},
- {0x82AD, 0xB0C5},{0x82AE, 0xDCC7},{0x82AF, 0xD0BE},{0x82B0, 0xDCC1},{0x82B1, 0xBBA8},{0x82B2, 0xC65F},{0x82B3, 0xB7BC},{0x82B4, 0xDCCC},
- {0x82B5, 0xC660},{0x82B6, 0xC661},{0x82B7, 0xDCC6},{0x82B8, 0xDCBF},{0x82B9, 0xC7DB},{0x82BA, 0xC662},{0x82BB, 0xC663},{0x82BC, 0xC664},
- {0x82BD, 0xD1BF},{0x82BE, 0xDCC0},{0x82BF, 0xC665},{0x82C0, 0xC666},{0x82C1, 0xDCCA},{0x82C2, 0xC667},{0x82C3, 0xC668},{0x82C4, 0xDCD0},
- {0x82C5, 0xC669},{0x82C6, 0xC66A},{0x82C7, 0xCEAD},{0x82C8, 0xDCC2},{0x82C9, 0xC66B},{0x82CA, 0xDCC3},{0x82CB, 0xDCC8},{0x82CC, 0xDCC9},
- {0x82CD, 0xB2D4},{0x82CE, 0xDCD1},{0x82CF, 0xCBD5},{0x82D0, 0xC66C},{0x82D1, 0xD4B7},{0x82D2, 0xDCDB},{0x82D3, 0xDCDF},{0x82D4, 0xCCA6},
- {0x82D5, 0xDCE6},{0x82D6, 0xC66D},{0x82D7, 0xC3E7},{0x82D8, 0xDCDC},{0x82D9, 0xC66E},{0x82DA, 0xC66F},{0x82DB, 0xBFC1},{0x82DC, 0xDCD9},
- {0x82DD, 0xC670},{0x82DE, 0xB0FA},{0x82DF, 0xB9B6},{0x82E0, 0xDCE5},{0x82E1, 0xDCD3},{0x82E2, 0xC671},{0x82E3, 0xDCC4},{0x82E4, 0xDCD6},
- {0x82E5, 0xC8F4},{0x82E6, 0xBFE0},{0x82E7, 0xC672},{0x82E8, 0xC673},{0x82E9, 0xC674},{0x82EA, 0xC675},{0x82EB, 0xC9BB},{0x82EC, 0xC676},
- {0x82ED, 0xC677},{0x82EE, 0xC678},{0x82EF, 0xB1BD},{0x82F0, 0xC679},{0x82F1, 0xD3A2},{0x82F2, 0xC67A},{0x82F3, 0xC67B},{0x82F4, 0xDCDA},
- {0x82F5, 0xC67C},{0x82F6, 0xC67D},{0x82F7, 0xDCD5},{0x82F8, 0xC67E},{0x82F9, 0xC6BB},{0x82FA, 0xC680},{0x82FB, 0xDCDE},{0x82FC, 0xC681},
- {0x82FD, 0xC682},{0x82FE, 0xC683},{0x82FF, 0xC684},{0x8300, 0xC685},{0x8301, 0xD7C2},{0x8302, 0xC3AF},{0x8303, 0xB7B6},{0x8304, 0xC7D1},
- {0x8305, 0xC3A9},{0x8306, 0xDCE2},{0x8307, 0xDCD8},{0x8308, 0xDCEB},{0x8309, 0xDCD4},{0x830A, 0xC686},{0x830B, 0xC687},{0x830C, 0xDCDD},
- {0x830D, 0xC688},{0x830E, 0xBEA5},{0x830F, 0xDCD7},{0x8310, 0xC689},{0x8311, 0xDCE0},{0x8312, 0xC68A},{0x8313, 0xC68B},{0x8314, 0xDCE3},
- {0x8315, 0xDCE4},{0x8316, 0xC68C},{0x8317, 0xDCF8},{0x8318, 0xC68D},{0x8319, 0xC68E},{0x831A, 0xDCE1},{0x831B, 0xDDA2},{0x831C, 0xDCE7},
- {0x831D, 0xC68F},{0x831E, 0xC690},{0x831F, 0xC691},{0x8320, 0xC692},{0x8321, 0xC693},{0x8322, 0xC694},{0x8323, 0xC695},{0x8324, 0xC696},
- {0x8325, 0xC697},{0x8326, 0xC698},{0x8327, 0xBCEB},{0x8328, 0xB4C4},{0x8329, 0xC699},{0x832A, 0xC69A},{0x832B, 0xC3A3},{0x832C, 0xB2E7},
- {0x832D, 0xDCFA},{0x832E, 0xC69B},{0x832F, 0xDCF2},{0x8330, 0xC69C},{0x8331, 0xDCEF},{0x8332, 0xC69D},{0x8333, 0xDCFC},{0x8334, 0xDCEE},
- {0x8335, 0xD2F0},{0x8336, 0xB2E8},{0x8337, 0xC69E},{0x8338, 0xC8D7},{0x8339, 0xC8E3},{0x833A, 0xDCFB},{0x833B, 0xC69F},{0x833C, 0xDCED},
- {0x833D, 0xC6A0},{0x833E, 0xC740},{0x833F, 0xC741},{0x8340, 0xDCF7},{0x8341, 0xC742},{0x8342, 0xC743},{0x8343, 0xDCF5},{0x8344, 0xC744},
- {0x8345, 0xC745},{0x8346, 0xBEA3},{0x8347, 0xDCF4},{0x8348, 0xC746},{0x8349, 0xB2DD},{0x834A, 0xC747},{0x834B, 0xC748},{0x834C, 0xC749},
- {0x834D, 0xC74A},{0x834E, 0xC74B},{0x834F, 0xDCF3},{0x8350, 0xBCF6},{0x8351, 0xDCE8},{0x8352, 0xBBC4},{0x8353, 0xC74C},{0x8354, 0xC0F3},
- {0x8355, 0xC74D},{0x8356, 0xC74E},{0x8357, 0xC74F},{0x8358, 0xC750},{0x8359, 0xC751},{0x835A, 0xBCD4},{0x835B, 0xDCE9},{0x835C, 0xDCEA},
- {0x835D, 0xC752},{0x835E, 0xDCF1},{0x835F, 0xDCF6},{0x8360, 0xDCF9},{0x8361, 0xB5B4},{0x8362, 0xC753},{0x8363, 0xC8D9},{0x8364, 0xBBE7},
- {0x8365, 0xDCFE},{0x8366, 0xDCFD},{0x8367, 0xD3AB},{0x8368, 0xDDA1},{0x8369, 0xDDA3},{0x836A, 0xDDA5},{0x836B, 0xD2F1},{0x836C, 0xDDA4},
- {0x836D, 0xDDA6},{0x836E, 0xDDA7},{0x836F, 0xD2A9},{0x8370, 0xC754},{0x8371, 0xC755},{0x8372, 0xC756},{0x8373, 0xC757},{0x8374, 0xC758},
- {0x8375, 0xC759},{0x8376, 0xC75A},{0x8377, 0xBAC9},{0x8378, 0xDDA9},{0x8379, 0xC75B},{0x837A, 0xC75C},{0x837B, 0xDDB6},{0x837C, 0xDDB1},
- {0x837D, 0xDDB4},{0x837E, 0xC75D},{0x837F, 0xC75E},{0x8380, 0xC75F},{0x8381, 0xC760},{0x8382, 0xC761},{0x8383, 0xC762},{0x8384, 0xC763},
- {0x8385, 0xDDB0},{0x8386, 0xC6CE},{0x8387, 0xC764},{0x8388, 0xC765},{0x8389, 0xC0F2},{0x838A, 0xC766},{0x838B, 0xC767},{0x838C, 0xC768},
- {0x838D, 0xC769},{0x838E, 0xC9AF},{0x838F, 0xC76A},{0x8390, 0xC76B},{0x8391, 0xC76C},{0x8392, 0xDCEC},{0x8393, 0xDDAE},{0x8394, 0xC76D},
- {0x8395, 0xC76E},{0x8396, 0xC76F},{0x8397, 0xC770},{0x8398, 0xDDB7},{0x8399, 0xC771},{0x839A, 0xC772},{0x839B, 0xDCF0},{0x839C, 0xDDAF},
- {0x839D, 0xC773},{0x839E, 0xDDB8},{0x839F, 0xC774},{0x83A0, 0xDDAC},{0x83A1, 0xC775},{0x83A2, 0xC776},{0x83A3, 0xC777},{0x83A4, 0xC778},
- {0x83A5, 0xC779},{0x83A6, 0xC77A},{0x83A7, 0xC77B},{0x83A8, 0xDDB9},{0x83A9, 0xDDB3},{0x83AA, 0xDDAD},{0x83AB, 0xC4AA},{0x83AC, 0xC77C},
- {0x83AD, 0xC77D},{0x83AE, 0xC77E},{0x83AF, 0xC780},{0x83B0, 0xDDA8},{0x83B1, 0xC0B3},{0x83B2, 0xC1AB},{0x83B3, 0xDDAA},{0x83B4, 0xDDAB},
- {0x83B5, 0xC781},{0x83B6, 0xDDB2},{0x83B7, 0xBBF1},{0x83B8, 0xDDB5},{0x83B9, 0xD3A8},{0x83BA, 0xDDBA},{0x83BB, 0xC782},{0x83BC, 0xDDBB},
- {0x83BD, 0xC3A7},{0x83BE, 0xC783},{0x83BF, 0xC784},{0x83C0, 0xDDD2},{0x83C1, 0xDDBC},{0x83C2, 0xC785},{0x83C3, 0xC786},{0x83C4, 0xC787},
- {0x83C5, 0xDDD1},{0x83C6, 0xC788},{0x83C7, 0xB9BD},{0x83C8, 0xC789},{0x83C9, 0xC78A},{0x83CA, 0xBED5},{0x83CB, 0xC78B},{0x83CC, 0xBEFA},
- {0x83CD, 0xC78C},{0x83CE, 0xC78D},{0x83CF, 0xBACA},{0x83D0, 0xC78E},{0x83D1, 0xC78F},{0x83D2, 0xC790},{0x83D3, 0xC791},{0x83D4, 0xDDCA},
- {0x83D5, 0xC792},{0x83D6, 0xDDC5},{0x83D7, 0xC793},{0x83D8, 0xDDBF},{0x83D9, 0xC794},{0x83DA, 0xC795},{0x83DB, 0xC796},{0x83DC, 0xB2CB},
- {0x83DD, 0xDDC3},{0x83DE, 0xC797},{0x83DF, 0xDDCB},{0x83E0, 0xB2A4},{0x83E1, 0xDDD5},{0x83E2, 0xC798},{0x83E3, 0xC799},{0x83E4, 0xC79A},
- {0x83E5, 0xDDBE},{0x83E6, 0xC79B},{0x83E7, 0xC79C},{0x83E8, 0xC79D},{0x83E9, 0xC6D0},{0x83EA, 0xDDD0},{0x83EB, 0xC79E},{0x83EC, 0xC79F},
- {0x83ED, 0xC7A0},{0x83EE, 0xC840},{0x83EF, 0xC841},{0x83F0, 0xDDD4},{0x83F1, 0xC1E2},{0x83F2, 0xB7C6},{0x83F3, 0xC842},{0x83F4, 0xC843},
- {0x83F5, 0xC844},{0x83F6, 0xC845},{0x83F7, 0xC846},{0x83F8, 0xDDCE},{0x83F9, 0xDDCF},{0x83FA, 0xC847},{0x83FB, 0xC848},{0x83FC, 0xC849},
- {0x83FD, 0xDDC4},{0x83FE, 0xC84A},{0x83FF, 0xC84B},{0x8400, 0xC84C},{0x8401, 0xDDBD},{0x8402, 0xC84D},{0x8403, 0xDDCD},{0x8404, 0xCCD1},
- {0x8405, 0xC84E},{0x8406, 0xDDC9},{0x8407, 0xC84F},{0x8408, 0xC850},{0x8409, 0xC851},{0x840A, 0xC852},{0x840B, 0xDDC2},{0x840C, 0xC3C8},
- {0x840D, 0xC6BC},{0x840E, 0xCEAE},{0x840F, 0xDDCC},{0x8410, 0xC853},{0x8411, 0xDDC8},{0x8412, 0xC854},{0x8413, 0xC855},{0x8414, 0xC856},
- {0x8415, 0xC857},{0x8416, 0xC858},{0x8417, 0xC859},{0x8418, 0xDDC1},{0x8419, 0xC85A},{0x841A, 0xC85B},{0x841B, 0xC85C},{0x841C, 0xDDC6},
- {0x841D, 0xC2DC},{0x841E, 0xC85D},{0x841F, 0xC85E},{0x8420, 0xC85F},{0x8421, 0xC860},{0x8422, 0xC861},{0x8423, 0xC862},{0x8424, 0xD3A9},
- {0x8425, 0xD3AA},{0x8426, 0xDDD3},{0x8427, 0xCFF4},{0x8428, 0xC8F8},{0x8429, 0xC863},{0x842A, 0xC864},{0x842B, 0xC865},{0x842C, 0xC866},
- {0x842D, 0xC867},{0x842E, 0xC868},{0x842F, 0xC869},{0x8430, 0xC86A},{0x8431, 0xDDE6},{0x8432, 0xC86B},{0x8433, 0xC86C},{0x8434, 0xC86D},
- {0x8435, 0xC86E},{0x8436, 0xC86F},{0x8437, 0xC870},{0x8438, 0xDDC7},{0x8439, 0xC871},{0x843A, 0xC872},{0x843B, 0xC873},{0x843C, 0xDDE0},
- {0x843D, 0xC2E4},{0x843E, 0xC874},{0x843F, 0xC875},{0x8440, 0xC876},{0x8441, 0xC877},{0x8442, 0xC878},{0x8443, 0xC879},{0x8444, 0xC87A},
- {0x8445, 0xC87B},{0x8446, 0xDDE1},{0x8447, 0xC87C},{0x8448, 0xC87D},{0x8449, 0xC87E},{0x844A, 0xC880},{0x844B, 0xC881},{0x844C, 0xC882},
- {0x844D, 0xC883},{0x844E, 0xC884},{0x844F, 0xC885},{0x8450, 0xC886},{0x8451, 0xDDD7},{0x8452, 0xC887},{0x8453, 0xC888},{0x8454, 0xC889},
- {0x8455, 0xC88A},{0x8456, 0xC88B},{0x8457, 0xD6F8},{0x8458, 0xC88C},{0x8459, 0xDDD9},{0x845A, 0xDDD8},{0x845B, 0xB8F0},{0x845C, 0xDDD6},
- {0x845D, 0xC88D},{0x845E, 0xC88E},{0x845F, 0xC88F},{0x8460, 0xC890},{0x8461, 0xC6CF},{0x8462, 0xC891},{0x8463, 0xB6AD},{0x8464, 0xC892},
- {0x8465, 0xC893},{0x8466, 0xC894},{0x8467, 0xC895},{0x8468, 0xC896},{0x8469, 0xDDE2},{0x846A, 0xC897},{0x846B, 0xBAF9},{0x846C, 0xD4E1},
- {0x846D, 0xDDE7},{0x846E, 0xC898},{0x846F, 0xC899},{0x8470, 0xC89A},{0x8471, 0xB4D0},{0x8472, 0xC89B},{0x8473, 0xDDDA},{0x8474, 0xC89C},
- {0x8475, 0xBFFB},{0x8476, 0xDDE3},{0x8477, 0xC89D},{0x8478, 0xDDDF},{0x8479, 0xC89E},{0x847A, 0xDDDD},{0x847B, 0xC89F},{0x847C, 0xC8A0},
- {0x847D, 0xC940},{0x847E, 0xC941},{0x847F, 0xC942},{0x8480, 0xC943},{0x8481, 0xC944},{0x8482, 0xB5D9},{0x8483, 0xC945},{0x8484, 0xC946},
- {0x8485, 0xC947},{0x8486, 0xC948},{0x8487, 0xDDDB},{0x8488, 0xDDDC},{0x8489, 0xDDDE},{0x848A, 0xC949},{0x848B, 0xBDAF},{0x848C, 0xDDE4},
- {0x848D, 0xC94A},{0x848E, 0xDDE5},{0x848F, 0xC94B},{0x8490, 0xC94C},{0x8491, 0xC94D},{0x8492, 0xC94E},{0x8493, 0xC94F},{0x8494, 0xC950},
- {0x8495, 0xC951},{0x8496, 0xC952},{0x8497, 0xDDF5},{0x8498, 0xC953},{0x8499, 0xC3C9},{0x849A, 0xC954},{0x849B, 0xC955},{0x849C, 0xCBE2},
- {0x849D, 0xC956},{0x849E, 0xC957},{0x849F, 0xC958},{0x84A0, 0xC959},{0x84A1, 0xDDF2},{0x84A2, 0xC95A},{0x84A3, 0xC95B},{0x84A4, 0xC95C},
- {0x84A5, 0xC95D},{0x84A6, 0xC95E},{0x84A7, 0xC95F},{0x84A8, 0xC960},{0x84A9, 0xC961},{0x84AA, 0xC962},{0x84AB, 0xC963},{0x84AC, 0xC964},
- {0x84AD, 0xC965},{0x84AE, 0xC966},{0x84AF, 0xD8E1},{0x84B0, 0xC967},{0x84B1, 0xC968},{0x84B2, 0xC6D1},{0x84B3, 0xC969},{0x84B4, 0xDDF4},
- {0x84B5, 0xC96A},{0x84B6, 0xC96B},{0x84B7, 0xC96C},{0x84B8, 0xD5F4},{0x84B9, 0xDDF3},{0x84BA, 0xDDF0},{0x84BB, 0xC96D},{0x84BC, 0xC96E},
- {0x84BD, 0xDDEC},{0x84BE, 0xC96F},{0x84BF, 0xDDEF},{0x84C0, 0xC970},{0x84C1, 0xDDE8},{0x84C2, 0xC971},{0x84C3, 0xC972},{0x84C4, 0xD0EE},
- {0x84C5, 0xC973},{0x84C6, 0xC974},{0x84C7, 0xC975},{0x84C8, 0xC976},{0x84C9, 0xC8D8},{0x84CA, 0xDDEE},{0x84CB, 0xC977},{0x84CC, 0xC978},
- {0x84CD, 0xDDE9},{0x84CE, 0xC979},{0x84CF, 0xC97A},{0x84D0, 0xDDEA},{0x84D1, 0xCBF2},{0x84D2, 0xC97B},{0x84D3, 0xDDED},{0x84D4, 0xC97C},
- {0x84D5, 0xC97D},{0x84D6, 0xB1CD},{0x84D7, 0xC97E},{0x84D8, 0xC980},{0x84D9, 0xC981},{0x84DA, 0xC982},{0x84DB, 0xC983},{0x84DC, 0xC984},
- {0x84DD, 0xC0B6},{0x84DE, 0xC985},{0x84DF, 0xBCBB},{0x84E0, 0xDDF1},{0x84E1, 0xC986},{0x84E2, 0xC987},{0x84E3, 0xDDF7},{0x84E4, 0xC988},
- {0x84E5, 0xDDF6},{0x84E6, 0xDDEB},{0x84E7, 0xC989},{0x84E8, 0xC98A},{0x84E9, 0xC98B},{0x84EA, 0xC98C},{0x84EB, 0xC98D},{0x84EC, 0xC5EE},
- {0x84ED, 0xC98E},{0x84EE, 0xC98F},{0x84EF, 0xC990},{0x84F0, 0xDDFB},{0x84F1, 0xC991},{0x84F2, 0xC992},{0x84F3, 0xC993},{0x84F4, 0xC994},
- {0x84F5, 0xC995},{0x84F6, 0xC996},{0x84F7, 0xC997},{0x84F8, 0xC998},{0x84F9, 0xC999},{0x84FA, 0xC99A},{0x84FB, 0xC99B},{0x84FC, 0xDEA4},
- {0x84FD, 0xC99C},{0x84FE, 0xC99D},{0x84FF, 0xDEA3},{0x8500, 0xC99E},{0x8501, 0xC99F},{0x8502, 0xC9A0},{0x8503, 0xCA40},{0x8504, 0xCA41},
- {0x8505, 0xCA42},{0x8506, 0xCA43},{0x8507, 0xCA44},{0x8508, 0xCA45},{0x8509, 0xCA46},{0x850A, 0xCA47},{0x850B, 0xCA48},{0x850C, 0xDDF8},
- {0x850D, 0xCA49},{0x850E, 0xCA4A},{0x850F, 0xCA4B},{0x8510, 0xCA4C},{0x8511, 0xC3EF},{0x8512, 0xCA4D},{0x8513, 0xC2FB},{0x8514, 0xCA4E},
- {0x8515, 0xCA4F},{0x8516, 0xCA50},{0x8517, 0xD5E1},{0x8518, 0xCA51},{0x8519, 0xCA52},{0x851A, 0xCEB5},{0x851B, 0xCA53},{0x851C, 0xCA54},
- {0x851D, 0xCA55},{0x851E, 0xCA56},{0x851F, 0xDDFD},{0x8520, 0xCA57},{0x8521, 0xB2CC},{0x8522, 0xCA58},{0x8523, 0xCA59},{0x8524, 0xCA5A},
- {0x8525, 0xCA5B},{0x8526, 0xCA5C},{0x8527, 0xCA5D},{0x8528, 0xCA5E},{0x8529, 0xCA5F},{0x852A, 0xCA60},{0x852B, 0xC4E8},{0x852C, 0xCADF},
- {0x852D, 0xCA61},{0x852E, 0xCA62},{0x852F, 0xCA63},{0x8530, 0xCA64},{0x8531, 0xCA65},{0x8532, 0xCA66},{0x8533, 0xCA67},{0x8534, 0xCA68},
- {0x8535, 0xCA69},{0x8536, 0xCA6A},{0x8537, 0xC7BE},{0x8538, 0xDDFA},{0x8539, 0xDDFC},{0x853A, 0xDDFE},{0x853B, 0xDEA2},{0x853C, 0xB0AA},
- {0x853D, 0xB1CE},{0x853E, 0xCA6B},{0x853F, 0xCA6C},{0x8540, 0xCA6D},{0x8541, 0xCA6E},{0x8542, 0xCA6F},{0x8543, 0xDEAC},{0x8544, 0xCA70},
- {0x8545, 0xCA71},{0x8546, 0xCA72},{0x8547, 0xCA73},{0x8548, 0xDEA6},{0x8549, 0xBDB6},{0x854A, 0xC8EF},{0x854B, 0xCA74},{0x854C, 0xCA75},
- {0x854D, 0xCA76},{0x854E, 0xCA77},{0x854F, 0xCA78},{0x8550, 0xCA79},{0x8551, 0xCA7A},{0x8552, 0xCA7B},{0x8553, 0xCA7C},{0x8554, 0xCA7D},
- {0x8555, 0xCA7E},{0x8556, 0xDEA1},{0x8557, 0xCA80},{0x8558, 0xCA81},{0x8559, 0xDEA5},{0x855A, 0xCA82},{0x855B, 0xCA83},{0x855C, 0xCA84},
- {0x855D, 0xCA85},{0x855E, 0xDEA9},{0x855F, 0xCA86},{0x8560, 0xCA87},{0x8561, 0xCA88},{0x8562, 0xCA89},{0x8563, 0xCA8A},{0x8564, 0xDEA8},
- {0x8565, 0xCA8B},{0x8566, 0xCA8C},{0x8567, 0xCA8D},{0x8568, 0xDEA7},{0x8569, 0xCA8E},{0x856A, 0xCA8F},{0x856B, 0xCA90},{0x856C, 0xCA91},
- {0x856D, 0xCA92},{0x856E, 0xCA93},{0x856F, 0xCA94},{0x8570, 0xCA95},{0x8571, 0xCA96},{0x8572, 0xDEAD},{0x8573, 0xCA97},{0x8574, 0xD4CC},
- {0x8575, 0xCA98},{0x8576, 0xCA99},{0x8577, 0xCA9A},{0x8578, 0xCA9B},{0x8579, 0xDEB3},{0x857A, 0xDEAA},{0x857B, 0xDEAE},{0x857C, 0xCA9C},
- {0x857D, 0xCA9D},{0x857E, 0xC0D9},{0x857F, 0xCA9E},{0x8580, 0xCA9F},{0x8581, 0xCAA0},{0x8582, 0xCB40},{0x8583, 0xCB41},{0x8584, 0xB1A1},
- {0x8585, 0xDEB6},{0x8586, 0xCB42},{0x8587, 0xDEB1},{0x8588, 0xCB43},{0x8589, 0xCB44},{0x858A, 0xCB45},{0x858B, 0xCB46},{0x858C, 0xCB47},
- {0x858D, 0xCB48},{0x858E, 0xCB49},{0x858F, 0xDEB2},{0x8590, 0xCB4A},{0x8591, 0xCB4B},{0x8592, 0xCB4C},{0x8593, 0xCB4D},{0x8594, 0xCB4E},
- {0x8595, 0xCB4F},{0x8596, 0xCB50},{0x8597, 0xCB51},{0x8598, 0xCB52},{0x8599, 0xCB53},{0x859A, 0xCB54},{0x859B, 0xD1A6},{0x859C, 0xDEB5},
- {0x859D, 0xCB55},{0x859E, 0xCB56},{0x859F, 0xCB57},{0x85A0, 0xCB58},{0x85A1, 0xCB59},{0x85A2, 0xCB5A},{0x85A3, 0xCB5B},{0x85A4, 0xDEAF},
- {0x85A5, 0xCB5C},{0x85A6, 0xCB5D},{0x85A7, 0xCB5E},{0x85A8, 0xDEB0},{0x85A9, 0xCB5F},{0x85AA, 0xD0BD},{0x85AB, 0xCB60},{0x85AC, 0xCB61},
- {0x85AD, 0xCB62},{0x85AE, 0xDEB4},{0x85AF, 0xCAED},{0x85B0, 0xDEB9},{0x85B1, 0xCB63},{0x85B2, 0xCB64},{0x85B3, 0xCB65},{0x85B4, 0xCB66},
- {0x85B5, 0xCB67},{0x85B6, 0xCB68},{0x85B7, 0xDEB8},{0x85B8, 0xCB69},{0x85B9, 0xDEB7},{0x85BA, 0xCB6A},{0x85BB, 0xCB6B},{0x85BC, 0xCB6C},
- {0x85BD, 0xCB6D},{0x85BE, 0xCB6E},{0x85BF, 0xCB6F},{0x85C0, 0xCB70},{0x85C1, 0xDEBB},{0x85C2, 0xCB71},{0x85C3, 0xCB72},{0x85C4, 0xCB73},
- {0x85C5, 0xCB74},{0x85C6, 0xCB75},{0x85C7, 0xCB76},{0x85C8, 0xCB77},{0x85C9, 0xBDE5},{0x85CA, 0xCB78},{0x85CB, 0xCB79},{0x85CC, 0xCB7A},
- {0x85CD, 0xCB7B},{0x85CE, 0xCB7C},{0x85CF, 0xB2D8},{0x85D0, 0xC3EA},{0x85D1, 0xCB7D},{0x85D2, 0xCB7E},{0x85D3, 0xDEBA},{0x85D4, 0xCB80},
- {0x85D5, 0xC5BA},{0x85D6, 0xCB81},{0x85D7, 0xCB82},{0x85D8, 0xCB83},{0x85D9, 0xCB84},{0x85DA, 0xCB85},{0x85DB, 0xCB86},{0x85DC, 0xDEBC},
- {0x85DD, 0xCB87},{0x85DE, 0xCB88},{0x85DF, 0xCB89},{0x85E0, 0xCB8A},{0x85E1, 0xCB8B},{0x85E2, 0xCB8C},{0x85E3, 0xCB8D},{0x85E4, 0xCCD9},
- {0x85E5, 0xCB8E},{0x85E6, 0xCB8F},{0x85E7, 0xCB90},{0x85E8, 0xCB91},{0x85E9, 0xB7AA},{0x85EA, 0xCB92},{0x85EB, 0xCB93},{0x85EC, 0xCB94},
- {0x85ED, 0xCB95},{0x85EE, 0xCB96},{0x85EF, 0xCB97},{0x85F0, 0xCB98},{0x85F1, 0xCB99},{0x85F2, 0xCB9A},{0x85F3, 0xCB9B},{0x85F4, 0xCB9C},
- {0x85F5, 0xCB9D},{0x85F6, 0xCB9E},{0x85F7, 0xCB9F},{0x85F8, 0xCBA0},{0x85F9, 0xCC40},{0x85FA, 0xCC41},{0x85FB, 0xD4E5},{0x85FC, 0xCC42},
- {0x85FD, 0xCC43},{0x85FE, 0xCC44},{0x85FF, 0xDEBD},{0x8600, 0xCC45},{0x8601, 0xCC46},{0x8602, 0xCC47},{0x8603, 0xCC48},{0x8604, 0xCC49},
- {0x8605, 0xDEBF},{0x8606, 0xCC4A},{0x8607, 0xCC4B},{0x8608, 0xCC4C},{0x8609, 0xCC4D},{0x860A, 0xCC4E},{0x860B, 0xCC4F},{0x860C, 0xCC50},
- {0x860D, 0xCC51},{0x860E, 0xCC52},{0x860F, 0xCC53},{0x8610, 0xCC54},{0x8611, 0xC4A2},{0x8612, 0xCC55},{0x8613, 0xCC56},{0x8614, 0xCC57},
- {0x8615, 0xCC58},{0x8616, 0xDEC1},{0x8617, 0xCC59},{0x8618, 0xCC5A},{0x8619, 0xCC5B},{0x861A, 0xCC5C},{0x861B, 0xCC5D},{0x861C, 0xCC5E},
- {0x861D, 0xCC5F},{0x861E, 0xCC60},{0x861F, 0xCC61},{0x8620, 0xCC62},{0x8621, 0xCC63},{0x8622, 0xCC64},{0x8623, 0xCC65},{0x8624, 0xCC66},
- {0x8625, 0xCC67},{0x8626, 0xCC68},{0x8627, 0xDEBE},{0x8628, 0xCC69},{0x8629, 0xDEC0},{0x862A, 0xCC6A},{0x862B, 0xCC6B},{0x862C, 0xCC6C},
- {0x862D, 0xCC6D},{0x862E, 0xCC6E},{0x862F, 0xCC6F},{0x8630, 0xCC70},{0x8631, 0xCC71},{0x8632, 0xCC72},{0x8633, 0xCC73},{0x8634, 0xCC74},
- {0x8635, 0xCC75},{0x8636, 0xCC76},{0x8637, 0xCC77},{0x8638, 0xD5BA},{0x8639, 0xCC78},{0x863A, 0xCC79},{0x863B, 0xCC7A},{0x863C, 0xDEC2},
- {0x863D, 0xCC7B},{0x863E, 0xCC7C},{0x863F, 0xCC7D},{0x8640, 0xCC7E},{0x8641, 0xCC80},{0x8642, 0xCC81},{0x8643, 0xCC82},{0x8644, 0xCC83},
- {0x8645, 0xCC84},{0x8646, 0xCC85},{0x8647, 0xCC86},{0x8648, 0xCC87},{0x8649, 0xCC88},{0x864A, 0xCC89},{0x864B, 0xCC8A},{0x864C, 0xCC8B},
- {0x864D, 0xF2AE},{0x864E, 0xBBA2},{0x864F, 0xC2B2},{0x8650, 0xC5B0},{0x8651, 0xC2C7},{0x8652, 0xCC8C},{0x8653, 0xCC8D},{0x8654, 0xF2AF},
- {0x8655, 0xCC8E},{0x8656, 0xCC8F},{0x8657, 0xCC90},{0x8658, 0xCC91},{0x8659, 0xCC92},{0x865A, 0xD0E9},{0x865B, 0xCC93},{0x865C, 0xCC94},
- {0x865D, 0xCC95},{0x865E, 0xD3DD},{0x865F, 0xCC96},{0x8660, 0xCC97},{0x8661, 0xCC98},{0x8662, 0xEBBD},{0x8663, 0xCC99},{0x8664, 0xCC9A},
- {0x8665, 0xCC9B},{0x8666, 0xCC9C},{0x8667, 0xCC9D},{0x8668, 0xCC9E},{0x8669, 0xCC9F},{0x866A, 0xCCA0},{0x866B, 0xB3E6},{0x866C, 0xF2B0},
- {0x866D, 0xCD40},{0x866E, 0xF2B1},{0x866F, 0xCD41},{0x8670, 0xCD42},{0x8671, 0xCAAD},{0x8672, 0xCD43},{0x8673, 0xCD44},{0x8674, 0xCD45},
- {0x8675, 0xCD46},{0x8676, 0xCD47},{0x8677, 0xCD48},{0x8678, 0xCD49},{0x8679, 0xBAE7},{0x867A, 0xF2B3},{0x867B, 0xF2B5},{0x867C, 0xF2B4},
- {0x867D, 0xCBE4},{0x867E, 0xCFBA},{0x867F, 0xF2B2},{0x8680, 0xCAB4},{0x8681, 0xD2CF},{0x8682, 0xC2EC},{0x8683, 0xCD4A},{0x8684, 0xCD4B},
- {0x8685, 0xCD4C},{0x8686, 0xCD4D},{0x8687, 0xCD4E},{0x8688, 0xCD4F},{0x8689, 0xCD50},{0x868A, 0xCEC3},{0x868B, 0xF2B8},{0x868C, 0xB0F6},
- {0x868D, 0xF2B7},{0x868E, 0xCD51},{0x868F, 0xCD52},{0x8690, 0xCD53},{0x8691, 0xCD54},{0x8692, 0xCD55},{0x8693, 0xF2BE},{0x8694, 0xCD56},
- {0x8695, 0xB2CF},{0x8696, 0xCD57},{0x8697, 0xCD58},{0x8698, 0xCD59},{0x8699, 0xCD5A},{0x869A, 0xCD5B},{0x869B, 0xCD5C},{0x869C, 0xD1C1},
- {0x869D, 0xF2BA},{0x869E, 0xCD5D},{0x869F, 0xCD5E},{0x86A0, 0xCD5F},{0x86A1, 0xCD60},{0x86A2, 0xCD61},{0x86A3, 0xF2BC},{0x86A4, 0xD4E9},
- {0x86A5, 0xCD62},{0x86A6, 0xCD63},{0x86A7, 0xF2BB},{0x86A8, 0xF2B6},{0x86A9, 0xF2BF},{0x86AA, 0xF2BD},{0x86AB, 0xCD64},{0x86AC, 0xF2B9},
- {0x86AD, 0xCD65},{0x86AE, 0xCD66},{0x86AF, 0xF2C7},{0x86B0, 0xF2C4},{0x86B1, 0xF2C6},{0x86B2, 0xCD67},{0x86B3, 0xCD68},{0x86B4, 0xF2CA},
- {0x86B5, 0xF2C2},{0x86B6, 0xF2C0},{0x86B7, 0xCD69},{0x86B8, 0xCD6A},{0x86B9, 0xCD6B},{0x86BA, 0xF2C5},{0x86BB, 0xCD6C},{0x86BC, 0xCD6D},
- {0x86BD, 0xCD6E},{0x86BE, 0xCD6F},{0x86BF, 0xCD70},{0x86C0, 0xD6FB},{0x86C1, 0xCD71},{0x86C2, 0xCD72},{0x86C3, 0xCD73},{0x86C4, 0xF2C1},
- {0x86C5, 0xCD74},{0x86C6, 0xC7F9},{0x86C7, 0xC9DF},{0x86C8, 0xCD75},{0x86C9, 0xF2C8},{0x86CA, 0xB9C6},{0x86CB, 0xB5B0},{0x86CC, 0xCD76},
- {0x86CD, 0xCD77},{0x86CE, 0xF2C3},{0x86CF, 0xF2C9},{0x86D0, 0xF2D0},{0x86D1, 0xF2D6},{0x86D2, 0xCD78},{0x86D3, 0xCD79},{0x86D4, 0xBBD7},
- {0x86D5, 0xCD7A},{0x86D6, 0xCD7B},{0x86D7, 0xCD7C},{0x86D8, 0xF2D5},{0x86D9, 0xCDDC},{0x86DA, 0xCD7D},{0x86DB, 0xD6EB},{0x86DC, 0xCD7E},
- {0x86DD, 0xCD80},{0x86DE, 0xF2D2},{0x86DF, 0xF2D4},{0x86E0, 0xCD81},{0x86E1, 0xCD82},{0x86E2, 0xCD83},{0x86E3, 0xCD84},{0x86E4, 0xB8F2},
- {0x86E5, 0xCD85},{0x86E6, 0xCD86},{0x86E7, 0xCD87},{0x86E8, 0xCD88},{0x86E9, 0xF2CB},{0x86EA, 0xCD89},{0x86EB, 0xCD8A},{0x86EC, 0xCD8B},
- {0x86ED, 0xF2CE},{0x86EE, 0xC2F9},{0x86EF, 0xCD8C},{0x86F0, 0xD5DD},{0x86F1, 0xF2CC},{0x86F2, 0xF2CD},{0x86F3, 0xF2CF},{0x86F4, 0xF2D3},
- {0x86F5, 0xCD8D},{0x86F6, 0xCD8E},{0x86F7, 0xCD8F},{0x86F8, 0xF2D9},{0x86F9, 0xD3BC},{0x86FA, 0xCD90},{0x86FB, 0xCD91},{0x86FC, 0xCD92},
- {0x86FD, 0xCD93},{0x86FE, 0xB6EA},{0x86FF, 0xCD94},{0x8700, 0xCAF1},{0x8701, 0xCD95},{0x8702, 0xB7E4},{0x8703, 0xF2D7},{0x8704, 0xCD96},
- {0x8705, 0xCD97},{0x8706, 0xCD98},{0x8707, 0xF2D8},{0x8708, 0xF2DA},{0x8709, 0xF2DD},{0x870A, 0xF2DB},{0x870B, 0xCD99},{0x870C, 0xCD9A},
- {0x870D, 0xF2DC},{0x870E, 0xCD9B},{0x870F, 0xCD9C},{0x8710, 0xCD9D},{0x8711, 0xCD9E},{0x8712, 0xD1D1},{0x8713, 0xF2D1},{0x8714, 0xCD9F},
- {0x8715, 0xCDC9},{0x8716, 0xCDA0},{0x8717, 0xCECF},{0x8718, 0xD6A9},{0x8719, 0xCE40},{0x871A, 0xF2E3},{0x871B, 0xCE41},{0x871C, 0xC3DB},
- {0x871D, 0xCE42},{0x871E, 0xF2E0},{0x871F, 0xCE43},{0x8720, 0xCE44},{0x8721, 0xC0AF},{0x8722, 0xF2EC},{0x8723, 0xF2DE},{0x8724, 0xCE45},
- {0x8725, 0xF2E1},{0x8726, 0xCE46},{0x8727, 0xCE47},{0x8728, 0xCE48},{0x8729, 0xF2E8},{0x872A, 0xCE49},{0x872B, 0xCE4A},{0x872C, 0xCE4B},
- {0x872D, 0xCE4C},{0x872E, 0xF2E2},{0x872F, 0xCE4D},{0x8730, 0xCE4E},{0x8731, 0xF2E7},{0x8732, 0xCE4F},{0x8733, 0xCE50},{0x8734, 0xF2E6},
- {0x8735, 0xCE51},{0x8736, 0xCE52},{0x8737, 0xF2E9},{0x8738, 0xCE53},{0x8739, 0xCE54},{0x873A, 0xCE55},{0x873B, 0xF2DF},{0x873C, 0xCE56},
- {0x873D, 0xCE57},{0x873E, 0xF2E4},{0x873F, 0xF2EA},{0x8740, 0xCE58},{0x8741, 0xCE59},{0x8742, 0xCE5A},{0x8743, 0xCE5B},{0x8744, 0xCE5C},
- {0x8745, 0xCE5D},{0x8746, 0xCE5E},{0x8747, 0xD3AC},{0x8748, 0xF2E5},{0x8749, 0xB2F5},{0x874A, 0xCE5F},{0x874B, 0xCE60},{0x874C, 0xF2F2},
- {0x874D, 0xCE61},{0x874E, 0xD0AB},{0x874F, 0xCE62},{0x8750, 0xCE63},{0x8751, 0xCE64},{0x8752, 0xCE65},{0x8753, 0xF2F5},{0x8754, 0xCE66},
- {0x8755, 0xCE67},{0x8756, 0xCE68},{0x8757, 0xBBC8},{0x8758, 0xCE69},{0x8759, 0xF2F9},{0x875A, 0xCE6A},{0x875B, 0xCE6B},{0x875C, 0xCE6C},
- {0x875D, 0xCE6D},{0x875E, 0xCE6E},{0x875F, 0xCE6F},{0x8760, 0xF2F0},{0x8761, 0xCE70},{0x8762, 0xCE71},{0x8763, 0xF2F6},{0x8764, 0xF2F8},
- {0x8765, 0xF2FA},{0x8766, 0xCE72},{0x8767, 0xCE73},{0x8768, 0xCE74},{0x8769, 0xCE75},{0x876A, 0xCE76},{0x876B, 0xCE77},{0x876C, 0xCE78},
- {0x876D, 0xCE79},{0x876E, 0xF2F3},{0x876F, 0xCE7A},{0x8770, 0xF2F1},{0x8771, 0xCE7B},{0x8772, 0xCE7C},{0x8773, 0xCE7D},{0x8774, 0xBAFB},
- {0x8775, 0xCE7E},{0x8776, 0xB5FB},{0x8777, 0xCE80},{0x8778, 0xCE81},{0x8779, 0xCE82},{0x877A, 0xCE83},{0x877B, 0xF2EF},{0x877C, 0xF2F7},
- {0x877D, 0xF2ED},{0x877E, 0xF2EE},{0x877F, 0xCE84},{0x8780, 0xCE85},{0x8781, 0xCE86},{0x8782, 0xF2EB},{0x8783, 0xF3A6},{0x8784, 0xCE87},
- {0x8785, 0xF3A3},{0x8786, 0xCE88},{0x8787, 0xCE89},{0x8788, 0xF3A2},{0x8789, 0xCE8A},{0x878A, 0xCE8B},{0x878B, 0xF2F4},{0x878C, 0xCE8C},
- {0x878D, 0xC8DA},{0x878E, 0xCE8D},{0x878F, 0xCE8E},{0x8790, 0xCE8F},{0x8791, 0xCE90},{0x8792, 0xCE91},{0x8793, 0xF2FB},{0x8794, 0xCE92},
- {0x8795, 0xCE93},{0x8796, 0xCE94},{0x8797, 0xF3A5},{0x8798, 0xCE95},{0x8799, 0xCE96},{0x879A, 0xCE97},{0x879B, 0xCE98},{0x879C, 0xCE99},
- {0x879D, 0xCE9A},{0x879E, 0xCE9B},{0x879F, 0xC3F8},{0x87A0, 0xCE9C},{0x87A1, 0xCE9D},{0x87A2, 0xCE9E},{0x87A3, 0xCE9F},{0x87A4, 0xCEA0},
- {0x87A5, 0xCF40},{0x87A6, 0xCF41},{0x87A7, 0xCF42},{0x87A8, 0xF2FD},{0x87A9, 0xCF43},{0x87AA, 0xCF44},{0x87AB, 0xF3A7},{0x87AC, 0xF3A9},
- {0x87AD, 0xF3A4},{0x87AE, 0xCF45},{0x87AF, 0xF2FC},{0x87B0, 0xCF46},{0x87B1, 0xCF47},{0x87B2, 0xCF48},{0x87B3, 0xF3AB},{0x87B4, 0xCF49},
- {0x87B5, 0xF3AA},{0x87B6, 0xCF4A},{0x87B7, 0xCF4B},{0x87B8, 0xCF4C},{0x87B9, 0xCF4D},{0x87BA, 0xC2DD},{0x87BB, 0xCF4E},{0x87BC, 0xCF4F},
- {0x87BD, 0xF3AE},{0x87BE, 0xCF50},{0x87BF, 0xCF51},{0x87C0, 0xF3B0},{0x87C1, 0xCF52},{0x87C2, 0xCF53},{0x87C3, 0xCF54},{0x87C4, 0xCF55},
- {0x87C5, 0xCF56},{0x87C6, 0xF3A1},{0x87C7, 0xCF57},{0x87C8, 0xCF58},{0x87C9, 0xCF59},{0x87CA, 0xF3B1},{0x87CB, 0xF3AC},{0x87CC, 0xCF5A},
- {0x87CD, 0xCF5B},{0x87CE, 0xCF5C},{0x87CF, 0xCF5D},{0x87D0, 0xCF5E},{0x87D1, 0xF3AF},{0x87D2, 0xF2FE},{0x87D3, 0xF3AD},{0x87D4, 0xCF5F},
- {0x87D5, 0xCF60},{0x87D6, 0xCF61},{0x87D7, 0xCF62},{0x87D8, 0xCF63},{0x87D9, 0xCF64},{0x87DA, 0xCF65},{0x87DB, 0xF3B2},{0x87DC, 0xCF66},
- {0x87DD, 0xCF67},{0x87DE, 0xCF68},{0x87DF, 0xCF69},{0x87E0, 0xF3B4},{0x87E1, 0xCF6A},{0x87E2, 0xCF6B},{0x87E3, 0xCF6C},{0x87E4, 0xCF6D},
- {0x87E5, 0xF3A8},{0x87E6, 0xCF6E},{0x87E7, 0xCF6F},{0x87E8, 0xCF70},{0x87E9, 0xCF71},{0x87EA, 0xF3B3},{0x87EB, 0xCF72},{0x87EC, 0xCF73},
- {0x87ED, 0xCF74},{0x87EE, 0xF3B5},{0x87EF, 0xCF75},{0x87F0, 0xCF76},{0x87F1, 0xCF77},{0x87F2, 0xCF78},{0x87F3, 0xCF79},{0x87F4, 0xCF7A},
- {0x87F5, 0xCF7B},{0x87F6, 0xCF7C},{0x87F7, 0xCF7D},{0x87F8, 0xCF7E},{0x87F9, 0xD0B7},{0x87FA, 0xCF80},{0x87FB, 0xCF81},{0x87FC, 0xCF82},
- {0x87FD, 0xCF83},{0x87FE, 0xF3B8},{0x87FF, 0xCF84},{0x8800, 0xCF85},{0x8801, 0xCF86},{0x8802, 0xCF87},{0x8803, 0xD9F9},{0x8804, 0xCF88},
- {0x8805, 0xCF89},{0x8806, 0xCF8A},{0x8807, 0xCF8B},{0x8808, 0xCF8C},{0x8809, 0xCF8D},{0x880A, 0xF3B9},{0x880B, 0xCF8E},{0x880C, 0xCF8F},
- {0x880D, 0xCF90},{0x880E, 0xCF91},{0x880F, 0xCF92},{0x8810, 0xCF93},{0x8811, 0xCF94},{0x8812, 0xCF95},{0x8813, 0xF3B7},{0x8814, 0xCF96},
- {0x8815, 0xC8E4},{0x8816, 0xF3B6},{0x8817, 0xCF97},{0x8818, 0xCF98},{0x8819, 0xCF99},{0x881A, 0xCF9A},{0x881B, 0xF3BA},{0x881C, 0xCF9B},
- {0x881D, 0xCF9C},{0x881E, 0xCF9D},{0x881F, 0xCF9E},{0x8820, 0xCF9F},{0x8821, 0xF3BB},{0x8822, 0xB4C0},{0x8823, 0xCFA0},{0x8824, 0xD040},
- {0x8825, 0xD041},{0x8826, 0xD042},{0x8827, 0xD043},{0x8828, 0xD044},{0x8829, 0xD045},{0x882A, 0xD046},{0x882B, 0xD047},{0x882C, 0xD048},
- {0x882D, 0xD049},{0x882E, 0xD04A},{0x882F, 0xD04B},{0x8830, 0xD04C},{0x8831, 0xD04D},{0x8832, 0xEEC3},{0x8833, 0xD04E},{0x8834, 0xD04F},
- {0x8835, 0xD050},{0x8836, 0xD051},{0x8837, 0xD052},{0x8838, 0xD053},{0x8839, 0xF3BC},{0x883A, 0xD054},{0x883B, 0xD055},{0x883C, 0xF3BD},
- {0x883D, 0xD056},{0x883E, 0xD057},{0x883F, 0xD058},{0x8840, 0xD1AA},{0x8841, 0xD059},{0x8842, 0xD05A},{0x8843, 0xD05B},{0x8844, 0xF4AC},
- {0x8845, 0xD0C6},{0x8846, 0xD05C},{0x8847, 0xD05D},{0x8848, 0xD05E},{0x8849, 0xD05F},{0x884A, 0xD060},{0x884B, 0xD061},{0x884C, 0xD0D0},
- {0x884D, 0xD1DC},{0x884E, 0xD062},{0x884F, 0xD063},{0x8850, 0xD064},{0x8851, 0xD065},{0x8852, 0xD066},{0x8853, 0xD067},{0x8854, 0xCFCE},
- {0x8855, 0xD068},{0x8856, 0xD069},{0x8857, 0xBDD6},{0x8858, 0xD06A},{0x8859, 0xD1C3},{0x885A, 0xD06B},{0x885B, 0xD06C},{0x885C, 0xD06D},
- {0x885D, 0xD06E},{0x885E, 0xD06F},{0x885F, 0xD070},{0x8860, 0xD071},{0x8861, 0xBAE2},{0x8862, 0xE1E9},{0x8863, 0xD2C2},{0x8864, 0xF1C2},
- {0x8865, 0xB2B9},{0x8866, 0xD072},{0x8867, 0xD073},{0x8868, 0xB1ED},{0x8869, 0xF1C3},{0x886A, 0xD074},{0x886B, 0xC9C0},{0x886C, 0xB3C4},
- {0x886D, 0xD075},{0x886E, 0xD9F2},{0x886F, 0xD076},{0x8870, 0xCBA5},{0x8871, 0xD077},{0x8872, 0xF1C4},{0x8873, 0xD078},{0x8874, 0xD079},
- {0x8875, 0xD07A},{0x8876, 0xD07B},{0x8877, 0xD6D4},{0x8878, 0xD07C},{0x8879, 0xD07D},{0x887A, 0xD07E},{0x887B, 0xD080},{0x887C, 0xD081},
- {0x887D, 0xF1C5},{0x887E, 0xF4C0},{0x887F, 0xF1C6},{0x8880, 0xD082},{0x8881, 0xD4AC},{0x8882, 0xF1C7},{0x8883, 0xD083},{0x8884, 0xB0C0},
- {0x8885, 0xF4C1},{0x8886, 0xD084},{0x8887, 0xD085},{0x8888, 0xF4C2},{0x8889, 0xD086},{0x888A, 0xD087},{0x888B, 0xB4FC},{0x888C, 0xD088},
- {0x888D, 0xC5DB},{0x888E, 0xD089},{0x888F, 0xD08A},{0x8890, 0xD08B},{0x8891, 0xD08C},{0x8892, 0xCCBB},{0x8893, 0xD08D},{0x8894, 0xD08E},
- {0x8895, 0xD08F},{0x8896, 0xD0E4},{0x8897, 0xD090},{0x8898, 0xD091},{0x8899, 0xD092},{0x889A, 0xD093},{0x889B, 0xD094},{0x889C, 0xCDE0},
- {0x889D, 0xD095},{0x889E, 0xD096},{0x889F, 0xD097},{0x88A0, 0xD098},{0x88A1, 0xD099},{0x88A2, 0xF1C8},{0x88A3, 0xD09A},{0x88A4, 0xD9F3},
- {0x88A5, 0xD09B},{0x88A6, 0xD09C},{0x88A7, 0xD09D},{0x88A8, 0xD09E},{0x88A9, 0xD09F},{0x88AA, 0xD0A0},{0x88AB, 0xB1BB},{0x88AC, 0xD140},
- {0x88AD, 0xCFAE},{0x88AE, 0xD141},{0x88AF, 0xD142},{0x88B0, 0xD143},{0x88B1, 0xB8A4},{0x88B2, 0xD144},{0x88B3, 0xD145},{0x88B4, 0xD146},
- {0x88B5, 0xD147},{0x88B6, 0xD148},{0x88B7, 0xF1CA},{0x88B8, 0xD149},{0x88B9, 0xD14A},{0x88BA, 0xD14B},{0x88BB, 0xD14C},{0x88BC, 0xF1CB},
- {0x88BD, 0xD14D},{0x88BE, 0xD14E},{0x88BF, 0xD14F},{0x88C0, 0xD150},{0x88C1, 0xB2C3},{0x88C2, 0xC1D1},{0x88C3, 0xD151},{0x88C4, 0xD152},
- {0x88C5, 0xD7B0},{0x88C6, 0xF1C9},{0x88C7, 0xD153},{0x88C8, 0xD154},{0x88C9, 0xF1CC},{0x88CA, 0xD155},{0x88CB, 0xD156},{0x88CC, 0xD157},
- {0x88CD, 0xD158},{0x88CE, 0xF1CE},{0x88CF, 0xD159},{0x88D0, 0xD15A},{0x88D1, 0xD15B},{0x88D2, 0xD9F6},{0x88D3, 0xD15C},{0x88D4, 0xD2E1},
- {0x88D5, 0xD4A3},{0x88D6, 0xD15D},{0x88D7, 0xD15E},{0x88D8, 0xF4C3},{0x88D9, 0xC8B9},{0x88DA, 0xD15F},{0x88DB, 0xD160},{0x88DC, 0xD161},
- {0x88DD, 0xD162},{0x88DE, 0xD163},{0x88DF, 0xF4C4},{0x88E0, 0xD164},{0x88E1, 0xD165},{0x88E2, 0xF1CD},{0x88E3, 0xF1CF},{0x88E4, 0xBFE3},
- {0x88E5, 0xF1D0},{0x88E6, 0xD166},{0x88E7, 0xD167},{0x88E8, 0xF1D4},{0x88E9, 0xD168},{0x88EA, 0xD169},{0x88EB, 0xD16A},{0x88EC, 0xD16B},
- {0x88ED, 0xD16C},{0x88EE, 0xD16D},{0x88EF, 0xD16E},{0x88F0, 0xF1D6},{0x88F1, 0xF1D1},{0x88F2, 0xD16F},{0x88F3, 0xC9D1},{0x88F4, 0xC5E1},
- {0x88F5, 0xD170},{0x88F6, 0xD171},{0x88F7, 0xD172},{0x88F8, 0xC2E3},{0x88F9, 0xB9FC},{0x88FA, 0xD173},{0x88FB, 0xD174},{0x88FC, 0xF1D3},
- {0x88FD, 0xD175},{0x88FE, 0xF1D5},{0x88FF, 0xD176},{0x8900, 0xD177},{0x8901, 0xD178},{0x8902, 0xB9D3},{0x8903, 0xD179},{0x8904, 0xD17A},
- {0x8905, 0xD17B},{0x8906, 0xD17C},{0x8907, 0xD17D},{0x8908, 0xD17E},{0x8909, 0xD180},{0x890A, 0xF1DB},{0x890B, 0xD181},{0x890C, 0xD182},
- {0x890D, 0xD183},{0x890E, 0xD184},{0x890F, 0xD185},{0x8910, 0xBAD6},{0x8911, 0xD186},{0x8912, 0xB0FD},{0x8913, 0xF1D9},{0x8914, 0xD187},
- {0x8915, 0xD188},{0x8916, 0xD189},{0x8917, 0xD18A},{0x8918, 0xD18B},{0x8919, 0xF1D8},{0x891A, 0xF1D2},{0x891B, 0xF1DA},{0x891C, 0xD18C},
- {0x891D, 0xD18D},{0x891E, 0xD18E},{0x891F, 0xD18F},{0x8920, 0xD190},{0x8921, 0xF1D7},{0x8922, 0xD191},{0x8923, 0xD192},{0x8924, 0xD193},
- {0x8925, 0xC8EC},{0x8926, 0xD194},{0x8927, 0xD195},{0x8928, 0xD196},{0x8929, 0xD197},{0x892A, 0xCDCA},{0x892B, 0xF1DD},{0x892C, 0xD198},
- {0x892D, 0xD199},{0x892E, 0xD19A},{0x892F, 0xD19B},{0x8930, 0xE5BD},{0x8931, 0xD19C},{0x8932, 0xD19D},{0x8933, 0xD19E},{0x8934, 0xF1DC},
- {0x8935, 0xD19F},{0x8936, 0xF1DE},{0x8937, 0xD1A0},{0x8938, 0xD240},{0x8939, 0xD241},{0x893A, 0xD242},{0x893B, 0xD243},{0x893C, 0xD244},
- {0x893D, 0xD245},{0x893E, 0xD246},{0x893F, 0xD247},{0x8940, 0xD248},{0x8941, 0xF1DF},{0x8942, 0xD249},{0x8943, 0xD24A},{0x8944, 0xCFE5},
- {0x8945, 0xD24B},{0x8946, 0xD24C},{0x8947, 0xD24D},{0x8948, 0xD24E},{0x8949, 0xD24F},{0x894A, 0xD250},{0x894B, 0xD251},{0x894C, 0xD252},
- {0x894D, 0xD253},{0x894E, 0xD254},{0x894F, 0xD255},{0x8950, 0xD256},{0x8951, 0xD257},{0x8952, 0xD258},{0x8953, 0xD259},{0x8954, 0xD25A},
- {0x8955, 0xD25B},{0x8956, 0xD25C},{0x8957, 0xD25D},{0x8958, 0xD25E},{0x8959, 0xD25F},{0x895A, 0xD260},{0x895B, 0xD261},{0x895C, 0xD262},
- {0x895D, 0xD263},{0x895E, 0xF4C5},{0x895F, 0xBDF3},{0x8960, 0xD264},{0x8961, 0xD265},{0x8962, 0xD266},{0x8963, 0xD267},{0x8964, 0xD268},
- {0x8965, 0xD269},{0x8966, 0xF1E0},{0x8967, 0xD26A},{0x8968, 0xD26B},{0x8969, 0xD26C},{0x896A, 0xD26D},{0x896B, 0xD26E},{0x896C, 0xD26F},
- {0x896D, 0xD270},{0x896E, 0xD271},{0x896F, 0xD272},{0x8970, 0xD273},{0x8971, 0xD274},{0x8972, 0xD275},{0x8973, 0xD276},{0x8974, 0xD277},
- {0x8975, 0xD278},{0x8976, 0xD279},{0x8977, 0xD27A},{0x8978, 0xD27B},{0x8979, 0xD27C},{0x897A, 0xD27D},{0x897B, 0xF1E1},{0x897C, 0xD27E},
- {0x897D, 0xD280},{0x897E, 0xD281},{0x897F, 0xCEF7},{0x8980, 0xD282},{0x8981, 0xD2AA},{0x8982, 0xD283},{0x8983, 0xF1FB},{0x8984, 0xD284},
- {0x8985, 0xD285},{0x8986, 0xB8B2},{0x8987, 0xD286},{0x8988, 0xD287},{0x8989, 0xD288},{0x898A, 0xD289},{0x898B, 0xD28A},{0x898C, 0xD28B},
- {0x898D, 0xD28C},{0x898E, 0xD28D},{0x898F, 0xD28E},{0x8990, 0xD28F},{0x8991, 0xD290},{0x8992, 0xD291},{0x8993, 0xD292},{0x8994, 0xD293},
- {0x8995, 0xD294},{0x8996, 0xD295},{0x8997, 0xD296},{0x8998, 0xD297},{0x8999, 0xD298},{0x899A, 0xD299},{0x899B, 0xD29A},{0x899C, 0xD29B},
- {0x899D, 0xD29C},{0x899E, 0xD29D},{0x899F, 0xD29E},{0x89A0, 0xD29F},{0x89A1, 0xD2A0},{0x89A2, 0xD340},{0x89A3, 0xD341},{0x89A4, 0xD342},
- {0x89A5, 0xD343},{0x89A6, 0xD344},{0x89A7, 0xD345},{0x89A8, 0xD346},{0x89A9, 0xD347},{0x89AA, 0xD348},{0x89AB, 0xD349},{0x89AC, 0xD34A},
- {0x89AD, 0xD34B},{0x89AE, 0xD34C},{0x89AF, 0xD34D},{0x89B0, 0xD34E},{0x89B1, 0xD34F},{0x89B2, 0xD350},{0x89B3, 0xD351},{0x89B4, 0xD352},
- {0x89B5, 0xD353},{0x89B6, 0xD354},{0x89B7, 0xD355},{0x89B8, 0xD356},{0x89B9, 0xD357},{0x89BA, 0xD358},{0x89BB, 0xD359},{0x89BC, 0xD35A},
- {0x89BD, 0xD35B},{0x89BE, 0xD35C},{0x89BF, 0xD35D},{0x89C0, 0xD35E},{0x89C1, 0xBCFB},{0x89C2, 0xB9DB},{0x89C3, 0xD35F},{0x89C4, 0xB9E6},
- {0x89C5, 0xC3D9},{0x89C6, 0xCAD3},{0x89C7, 0xEAE8},{0x89C8, 0xC0C0},{0x89C9, 0xBEF5},{0x89CA, 0xEAE9},{0x89CB, 0xEAEA},{0x89CC, 0xEAEB},
- {0x89CD, 0xD360},{0x89CE, 0xEAEC},{0x89CF, 0xEAED},{0x89D0, 0xEAEE},{0x89D1, 0xEAEF},{0x89D2, 0xBDC7},{0x89D3, 0xD361},{0x89D4, 0xD362},
- {0x89D5, 0xD363},{0x89D6, 0xF5FB},{0x89D7, 0xD364},{0x89D8, 0xD365},{0x89D9, 0xD366},{0x89DA, 0xF5FD},{0x89DB, 0xD367},{0x89DC, 0xF5FE},
- {0x89DD, 0xD368},{0x89DE, 0xF5FC},{0x89DF, 0xD369},{0x89E0, 0xD36A},{0x89E1, 0xD36B},{0x89E2, 0xD36C},{0x89E3, 0xBDE2},{0x89E4, 0xD36D},
- {0x89E5, 0xF6A1},{0x89E6, 0xB4A5},{0x89E7, 0xD36E},{0x89E8, 0xD36F},{0x89E9, 0xD370},{0x89EA, 0xD371},{0x89EB, 0xF6A2},{0x89EC, 0xD372},
- {0x89ED, 0xD373},{0x89EE, 0xD374},{0x89EF, 0xF6A3},{0x89F0, 0xD375},{0x89F1, 0xD376},{0x89F2, 0xD377},{0x89F3, 0xECB2},{0x89F4, 0xD378},
- {0x89F5, 0xD379},{0x89F6, 0xD37A},{0x89F7, 0xD37B},{0x89F8, 0xD37C},{0x89F9, 0xD37D},{0x89FA, 0xD37E},{0x89FB, 0xD380},{0x89FC, 0xD381},
- {0x89FD, 0xD382},{0x89FE, 0xD383},{0x89FF, 0xD384},{0x8A00, 0xD1D4},{0x8A01, 0xD385},{0x8A02, 0xD386},{0x8A03, 0xD387},{0x8A04, 0xD388},
- {0x8A05, 0xD389},{0x8A06, 0xD38A},{0x8A07, 0xD9EA},{0x8A08, 0xD38B},{0x8A09, 0xD38C},{0x8A0A, 0xD38D},{0x8A0B, 0xD38E},{0x8A0C, 0xD38F},
- {0x8A0D, 0xD390},{0x8A0E, 0xD391},{0x8A0F, 0xD392},{0x8A10, 0xD393},{0x8A11, 0xD394},{0x8A12, 0xD395},{0x8A13, 0xD396},{0x8A14, 0xD397},
- {0x8A15, 0xD398},{0x8A16, 0xD399},{0x8A17, 0xD39A},{0x8A18, 0xD39B},{0x8A19, 0xD39C},{0x8A1A, 0xD39D},{0x8A1B, 0xD39E},{0x8A1C, 0xD39F},
- {0x8A1D, 0xD3A0},{0x8A1E, 0xD440},{0x8A1F, 0xD441},{0x8A20, 0xD442},{0x8A21, 0xD443},{0x8A22, 0xD444},{0x8A23, 0xD445},{0x8A24, 0xD446},
- {0x8A25, 0xD447},{0x8A26, 0xD448},{0x8A27, 0xD449},{0x8A28, 0xD44A},{0x8A29, 0xD44B},{0x8A2A, 0xD44C},{0x8A2B, 0xD44D},{0x8A2C, 0xD44E},
- {0x8A2D, 0xD44F},{0x8A2E, 0xD450},{0x8A2F, 0xD451},{0x8A30, 0xD452},{0x8A31, 0xD453},{0x8A32, 0xD454},{0x8A33, 0xD455},{0x8A34, 0xD456},
- {0x8A35, 0xD457},{0x8A36, 0xD458},{0x8A37, 0xD459},{0x8A38, 0xD45A},{0x8A39, 0xD45B},{0x8A3A, 0xD45C},{0x8A3B, 0xD45D},{0x8A3C, 0xD45E},
- {0x8A3D, 0xD45F},{0x8A3E, 0xF6A4},{0x8A3F, 0xD460},{0x8A40, 0xD461},{0x8A41, 0xD462},{0x8A42, 0xD463},{0x8A43, 0xD464},{0x8A44, 0xD465},
- {0x8A45, 0xD466},{0x8A46, 0xD467},{0x8A47, 0xD468},{0x8A48, 0xEEBA},{0x8A49, 0xD469},{0x8A4A, 0xD46A},{0x8A4B, 0xD46B},{0x8A4C, 0xD46C},
- {0x8A4D, 0xD46D},{0x8A4E, 0xD46E},{0x8A4F, 0xD46F},{0x8A50, 0xD470},{0x8A51, 0xD471},{0x8A52, 0xD472},{0x8A53, 0xD473},{0x8A54, 0xD474},
- {0x8A55, 0xD475},{0x8A56, 0xD476},{0x8A57, 0xD477},{0x8A58, 0xD478},{0x8A59, 0xD479},{0x8A5A, 0xD47A},{0x8A5B, 0xD47B},{0x8A5C, 0xD47C},
- {0x8A5D, 0xD47D},{0x8A5E, 0xD47E},{0x8A5F, 0xD480},{0x8A60, 0xD481},{0x8A61, 0xD482},{0x8A62, 0xD483},{0x8A63, 0xD484},{0x8A64, 0xD485},
- {0x8A65, 0xD486},{0x8A66, 0xD487},{0x8A67, 0xD488},{0x8A68, 0xD489},{0x8A69, 0xD48A},{0x8A6A, 0xD48B},{0x8A6B, 0xD48C},{0x8A6C, 0xD48D},
- {0x8A6D, 0xD48E},{0x8A6E, 0xD48F},{0x8A6F, 0xD490},{0x8A70, 0xD491},{0x8A71, 0xD492},{0x8A72, 0xD493},{0x8A73, 0xD494},{0x8A74, 0xD495},
- {0x8A75, 0xD496},{0x8A76, 0xD497},{0x8A77, 0xD498},{0x8A78, 0xD499},{0x8A79, 0xD5B2},{0x8A7A, 0xD49A},{0x8A7B, 0xD49B},{0x8A7C, 0xD49C},
- {0x8A7D, 0xD49D},{0x8A7E, 0xD49E},{0x8A7F, 0xD49F},{0x8A80, 0xD4A0},{0x8A81, 0xD540},{0x8A82, 0xD541},{0x8A83, 0xD542},{0x8A84, 0xD543},
- {0x8A85, 0xD544},{0x8A86, 0xD545},{0x8A87, 0xD546},{0x8A88, 0xD547},{0x8A89, 0xD3FE},{0x8A8A, 0xCCDC},{0x8A8B, 0xD548},{0x8A8C, 0xD549},
- {0x8A8D, 0xD54A},{0x8A8E, 0xD54B},{0x8A8F, 0xD54C},{0x8A90, 0xD54D},{0x8A91, 0xD54E},{0x8A92, 0xD54F},{0x8A93, 0xCAC4},{0x8A94, 0xD550},
- {0x8A95, 0xD551},{0x8A96, 0xD552},{0x8A97, 0xD553},{0x8A98, 0xD554},{0x8A99, 0xD555},{0x8A9A, 0xD556},{0x8A9B, 0xD557},{0x8A9C, 0xD558},
- {0x8A9D, 0xD559},{0x8A9E, 0xD55A},{0x8A9F, 0xD55B},{0x8AA0, 0xD55C},{0x8AA1, 0xD55D},{0x8AA2, 0xD55E},{0x8AA3, 0xD55F},{0x8AA4, 0xD560},
- {0x8AA5, 0xD561},{0x8AA6, 0xD562},{0x8AA7, 0xD563},{0x8AA8, 0xD564},{0x8AA9, 0xD565},{0x8AAA, 0xD566},{0x8AAB, 0xD567},{0x8AAC, 0xD568},
- {0x8AAD, 0xD569},{0x8AAE, 0xD56A},{0x8AAF, 0xD56B},{0x8AB0, 0xD56C},{0x8AB1, 0xD56D},{0x8AB2, 0xD56E},{0x8AB3, 0xD56F},{0x8AB4, 0xD570},
- {0x8AB5, 0xD571},{0x8AB6, 0xD572},{0x8AB7, 0xD573},{0x8AB8, 0xD574},{0x8AB9, 0xD575},{0x8ABA, 0xD576},{0x8ABB, 0xD577},{0x8ABC, 0xD578},
- {0x8ABD, 0xD579},{0x8ABE, 0xD57A},{0x8ABF, 0xD57B},{0x8AC0, 0xD57C},{0x8AC1, 0xD57D},{0x8AC2, 0xD57E},{0x8AC3, 0xD580},{0x8AC4, 0xD581},
- {0x8AC5, 0xD582},{0x8AC6, 0xD583},{0x8AC7, 0xD584},{0x8AC8, 0xD585},{0x8AC9, 0xD586},{0x8ACA, 0xD587},{0x8ACB, 0xD588},{0x8ACC, 0xD589},
- {0x8ACD, 0xD58A},{0x8ACE, 0xD58B},{0x8ACF, 0xD58C},{0x8AD0, 0xD58D},{0x8AD1, 0xD58E},{0x8AD2, 0xD58F},{0x8AD3, 0xD590},{0x8AD4, 0xD591},
- {0x8AD5, 0xD592},{0x8AD6, 0xD593},{0x8AD7, 0xD594},{0x8AD8, 0xD595},{0x8AD9, 0xD596},{0x8ADA, 0xD597},{0x8ADB, 0xD598},{0x8ADC, 0xD599},
- {0x8ADD, 0xD59A},{0x8ADE, 0xD59B},{0x8ADF, 0xD59C},{0x8AE0, 0xD59D},{0x8AE1, 0xD59E},{0x8AE2, 0xD59F},{0x8AE3, 0xD5A0},{0x8AE4, 0xD640},
- {0x8AE5, 0xD641},{0x8AE6, 0xD642},{0x8AE7, 0xD643},{0x8AE8, 0xD644},{0x8AE9, 0xD645},{0x8AEA, 0xD646},{0x8AEB, 0xD647},{0x8AEC, 0xD648},
- {0x8AED, 0xD649},{0x8AEE, 0xD64A},{0x8AEF, 0xD64B},{0x8AF0, 0xD64C},{0x8AF1, 0xD64D},{0x8AF2, 0xD64E},{0x8AF3, 0xD64F},{0x8AF4, 0xD650},
- {0x8AF5, 0xD651},{0x8AF6, 0xD652},{0x8AF7, 0xD653},{0x8AF8, 0xD654},{0x8AF9, 0xD655},{0x8AFA, 0xD656},{0x8AFB, 0xD657},{0x8AFC, 0xD658},
- {0x8AFD, 0xD659},{0x8AFE, 0xD65A},{0x8AFF, 0xD65B},{0x8B00, 0xD65C},{0x8B01, 0xD65D},{0x8B02, 0xD65E},{0x8B03, 0xD65F},{0x8B04, 0xD660},
- {0x8B05, 0xD661},{0x8B06, 0xD662},{0x8B07, 0xE5C0},{0x8B08, 0xD663},{0x8B09, 0xD664},{0x8B0A, 0xD665},{0x8B0B, 0xD666},{0x8B0C, 0xD667},
- {0x8B0D, 0xD668},{0x8B0E, 0xD669},{0x8B0F, 0xD66A},{0x8B10, 0xD66B},{0x8B11, 0xD66C},{0x8B12, 0xD66D},{0x8B13, 0xD66E},{0x8B14, 0xD66F},
- {0x8B15, 0xD670},{0x8B16, 0xD671},{0x8B17, 0xD672},{0x8B18, 0xD673},{0x8B19, 0xD674},{0x8B1A, 0xD675},{0x8B1B, 0xD676},{0x8B1C, 0xD677},
- {0x8B1D, 0xD678},{0x8B1E, 0xD679},{0x8B1F, 0xD67A},{0x8B20, 0xD67B},{0x8B21, 0xD67C},{0x8B22, 0xD67D},{0x8B23, 0xD67E},{0x8B24, 0xD680},
- {0x8B25, 0xD681},{0x8B26, 0xF6A5},{0x8B27, 0xD682},{0x8B28, 0xD683},{0x8B29, 0xD684},{0x8B2A, 0xD685},{0x8B2B, 0xD686},{0x8B2C, 0xD687},
- {0x8B2D, 0xD688},{0x8B2E, 0xD689},{0x8B2F, 0xD68A},{0x8B30, 0xD68B},{0x8B31, 0xD68C},{0x8B32, 0xD68D},{0x8B33, 0xD68E},{0x8B34, 0xD68F},
- {0x8B35, 0xD690},{0x8B36, 0xD691},{0x8B37, 0xD692},{0x8B38, 0xD693},{0x8B39, 0xD694},{0x8B3A, 0xD695},{0x8B3B, 0xD696},{0x8B3C, 0xD697},
- {0x8B3D, 0xD698},{0x8B3E, 0xD699},{0x8B3F, 0xD69A},{0x8B40, 0xD69B},{0x8B41, 0xD69C},{0x8B42, 0xD69D},{0x8B43, 0xD69E},{0x8B44, 0xD69F},
- {0x8B45, 0xD6A0},{0x8B46, 0xD740},{0x8B47, 0xD741},{0x8B48, 0xD742},{0x8B49, 0xD743},{0x8B4A, 0xD744},{0x8B4B, 0xD745},{0x8B4C, 0xD746},
- {0x8B4D, 0xD747},{0x8B4E, 0xD748},{0x8B4F, 0xD749},{0x8B50, 0xD74A},{0x8B51, 0xD74B},{0x8B52, 0xD74C},{0x8B53, 0xD74D},{0x8B54, 0xD74E},
- {0x8B55, 0xD74F},{0x8B56, 0xD750},{0x8B57, 0xD751},{0x8B58, 0xD752},{0x8B59, 0xD753},{0x8B5A, 0xD754},{0x8B5B, 0xD755},{0x8B5C, 0xD756},
- {0x8B5D, 0xD757},{0x8B5E, 0xD758},{0x8B5F, 0xD759},{0x8B60, 0xD75A},{0x8B61, 0xD75B},{0x8B62, 0xD75C},{0x8B63, 0xD75D},{0x8B64, 0xD75E},
- {0x8B65, 0xD75F},{0x8B66, 0xBEAF},{0x8B67, 0xD760},{0x8B68, 0xD761},{0x8B69, 0xD762},{0x8B6A, 0xD763},{0x8B6B, 0xD764},{0x8B6C, 0xC6A9},
- {0x8B6D, 0xD765},{0x8B6E, 0xD766},{0x8B6F, 0xD767},{0x8B70, 0xD768},{0x8B71, 0xD769},{0x8B72, 0xD76A},{0x8B73, 0xD76B},{0x8B74, 0xD76C},
- {0x8B75, 0xD76D},{0x8B76, 0xD76E},{0x8B77, 0xD76F},{0x8B78, 0xD770},{0x8B79, 0xD771},{0x8B7A, 0xD772},{0x8B7B, 0xD773},{0x8B7C, 0xD774},
- {0x8B7D, 0xD775},{0x8B7E, 0xD776},{0x8B7F, 0xD777},{0x8B80, 0xD778},{0x8B81, 0xD779},{0x8B82, 0xD77A},{0x8B83, 0xD77B},{0x8B84, 0xD77C},
- {0x8B85, 0xD77D},{0x8B86, 0xD77E},{0x8B87, 0xD780},{0x8B88, 0xD781},{0x8B89, 0xD782},{0x8B8A, 0xD783},{0x8B8B, 0xD784},{0x8B8C, 0xD785},
- {0x8B8D, 0xD786},{0x8B8E, 0xD787},{0x8B8F, 0xD788},{0x8B90, 0xD789},{0x8B91, 0xD78A},{0x8B92, 0xD78B},{0x8B93, 0xD78C},{0x8B94, 0xD78D},
- {0x8B95, 0xD78E},{0x8B96, 0xD78F},{0x8B97, 0xD790},{0x8B98, 0xD791},{0x8B99, 0xD792},{0x8B9A, 0xD793},{0x8B9B, 0xD794},{0x8B9C, 0xD795},
- {0x8B9D, 0xD796},{0x8B9E, 0xD797},{0x8B9F, 0xD798},{0x8BA0, 0xDAA5},{0x8BA1, 0xBCC6},{0x8BA2, 0xB6A9},{0x8BA3, 0xB8BC},{0x8BA4, 0xC8CF},
- {0x8BA5, 0xBCA5},{0x8BA6, 0xDAA6},{0x8BA7, 0xDAA7},{0x8BA8, 0xCCD6},{0x8BA9, 0xC8C3},{0x8BAA, 0xDAA8},{0x8BAB, 0xC6FD},{0x8BAC, 0xD799},
- {0x8BAD, 0xD1B5},{0x8BAE, 0xD2E9},{0x8BAF, 0xD1B6},{0x8BB0, 0xBCC7},{0x8BB1, 0xD79A},{0x8BB2, 0xBDB2},{0x8BB3, 0xBBE4},{0x8BB4, 0xDAA9},
- {0x8BB5, 0xDAAA},{0x8BB6, 0xD1C8},{0x8BB7, 0xDAAB},{0x8BB8, 0xD0ED},{0x8BB9, 0xB6EF},{0x8BBA, 0xC2DB},{0x8BBB, 0xD79B},{0x8BBC, 0xCBCF},
- {0x8BBD, 0xB7ED},{0x8BBE, 0xC9E8},{0x8BBF, 0xB7C3},{0x8BC0, 0xBEF7},{0x8BC1, 0xD6A4},{0x8BC2, 0xDAAC},{0x8BC3, 0xDAAD},{0x8BC4, 0xC6C0},
- {0x8BC5, 0xD7E7},{0x8BC6, 0xCAB6},{0x8BC7, 0xD79C},{0x8BC8, 0xD5A9},{0x8BC9, 0xCBDF},{0x8BCA, 0xD5EF},{0x8BCB, 0xDAAE},{0x8BCC, 0xD6DF},
- {0x8BCD, 0xB4CA},{0x8BCE, 0xDAB0},{0x8BCF, 0xDAAF},{0x8BD0, 0xD79D},{0x8BD1, 0xD2EB},{0x8BD2, 0xDAB1},{0x8BD3, 0xDAB2},{0x8BD4, 0xDAB3},
- {0x8BD5, 0xCAD4},{0x8BD6, 0xDAB4},{0x8BD7, 0xCAAB},{0x8BD8, 0xDAB5},{0x8BD9, 0xDAB6},{0x8BDA, 0xB3CF},{0x8BDB, 0xD6EF},{0x8BDC, 0xDAB7},
- {0x8BDD, 0xBBB0},{0x8BDE, 0xB5AE},{0x8BDF, 0xDAB8},{0x8BE0, 0xDAB9},{0x8BE1, 0xB9EE},{0x8BE2, 0xD1AF},{0x8BE3, 0xD2E8},{0x8BE4, 0xDABA},
- {0x8BE5, 0xB8C3},{0x8BE6, 0xCFEA},{0x8BE7, 0xB2EF},{0x8BE8, 0xDABB},{0x8BE9, 0xDABC},{0x8BEA, 0xD79E},{0x8BEB, 0xBDEB},{0x8BEC, 0xCEDC},
- {0x8BED, 0xD3EF},{0x8BEE, 0xDABD},{0x8BEF, 0xCEF3},{0x8BF0, 0xDABE},{0x8BF1, 0xD3D5},{0x8BF2, 0xBBE5},{0x8BF3, 0xDABF},{0x8BF4, 0xCBB5},
- {0x8BF5, 0xCBD0},{0x8BF6, 0xDAC0},{0x8BF7, 0xC7EB},{0x8BF8, 0xD6EE},{0x8BF9, 0xDAC1},{0x8BFA, 0xC5B5},{0x8BFB, 0xB6C1},{0x8BFC, 0xDAC2},
- {0x8BFD, 0xB7CC},{0x8BFE, 0xBFCE},{0x8BFF, 0xDAC3},{0x8C00, 0xDAC4},{0x8C01, 0xCBAD},{0x8C02, 0xDAC5},{0x8C03, 0xB5F7},{0x8C04, 0xDAC6},
- {0x8C05, 0xC1C2},{0x8C06, 0xD7BB},{0x8C07, 0xDAC7},{0x8C08, 0xCCB8},{0x8C09, 0xD79F},{0x8C0A, 0xD2EA},{0x8C0B, 0xC4B1},{0x8C0C, 0xDAC8},
- {0x8C0D, 0xB5FD},{0x8C0E, 0xBBD1},{0x8C0F, 0xDAC9},{0x8C10, 0xD0B3},{0x8C11, 0xDACA},{0x8C12, 0xDACB},{0x8C13, 0xCEBD},{0x8C14, 0xDACC},
- {0x8C15, 0xDACD},{0x8C16, 0xDACE},{0x8C17, 0xB2F7},{0x8C18, 0xDAD1},{0x8C19, 0xDACF},{0x8C1A, 0xD1E8},{0x8C1B, 0xDAD0},{0x8C1C, 0xC3D5},
- {0x8C1D, 0xDAD2},{0x8C1E, 0xD7A0},{0x8C1F, 0xDAD3},{0x8C20, 0xDAD4},{0x8C21, 0xDAD5},{0x8C22, 0xD0BB},{0x8C23, 0xD2A5},{0x8C24, 0xB0F9},
- {0x8C25, 0xDAD6},{0x8C26, 0xC7AB},{0x8C27, 0xDAD7},{0x8C28, 0xBDF7},{0x8C29, 0xC3A1},{0x8C2A, 0xDAD8},{0x8C2B, 0xDAD9},{0x8C2C, 0xC3FD},
- {0x8C2D, 0xCCB7},{0x8C2E, 0xDADA},{0x8C2F, 0xDADB},{0x8C30, 0xC0BE},{0x8C31, 0xC6D7},{0x8C32, 0xDADC},{0x8C33, 0xDADD},{0x8C34, 0xC7B4},
- {0x8C35, 0xDADE},{0x8C36, 0xDADF},{0x8C37, 0xB9C8},{0x8C38, 0xD840},{0x8C39, 0xD841},{0x8C3A, 0xD842},{0x8C3B, 0xD843},{0x8C3C, 0xD844},
- {0x8C3D, 0xD845},{0x8C3E, 0xD846},{0x8C3F, 0xD847},{0x8C40, 0xD848},{0x8C41, 0xBBED},{0x8C42, 0xD849},{0x8C43, 0xD84A},{0x8C44, 0xD84B},
- {0x8C45, 0xD84C},{0x8C46, 0xB6B9},{0x8C47, 0xF4F8},{0x8C48, 0xD84D},{0x8C49, 0xF4F9},{0x8C4A, 0xD84E},{0x8C4B, 0xD84F},{0x8C4C, 0xCDE3},
- {0x8C4D, 0xD850},{0x8C4E, 0xD851},{0x8C4F, 0xD852},{0x8C50, 0xD853},{0x8C51, 0xD854},{0x8C52, 0xD855},{0x8C53, 0xD856},{0x8C54, 0xD857},
- {0x8C55, 0xF5B9},{0x8C56, 0xD858},{0x8C57, 0xD859},{0x8C58, 0xD85A},{0x8C59, 0xD85B},{0x8C5A, 0xEBE0},{0x8C5B, 0xD85C},{0x8C5C, 0xD85D},
- {0x8C5D, 0xD85E},{0x8C5E, 0xD85F},{0x8C5F, 0xD860},{0x8C60, 0xD861},{0x8C61, 0xCFF3},{0x8C62, 0xBBBF},{0x8C63, 0xD862},{0x8C64, 0xD863},
- {0x8C65, 0xD864},{0x8C66, 0xD865},{0x8C67, 0xD866},{0x8C68, 0xD867},{0x8C69, 0xD868},{0x8C6A, 0xBAC0},{0x8C6B, 0xD4A5},{0x8C6C, 0xD869},
- {0x8C6D, 0xD86A},{0x8C6E, 0xD86B},{0x8C6F, 0xD86C},{0x8C70, 0xD86D},{0x8C71, 0xD86E},{0x8C72, 0xD86F},{0x8C73, 0xE1D9},{0x8C74, 0xD870},
- {0x8C75, 0xD871},{0x8C76, 0xD872},{0x8C77, 0xD873},{0x8C78, 0xF5F4},{0x8C79, 0xB1AA},{0x8C7A, 0xB2F2},{0x8C7B, 0xD874},{0x8C7C, 0xD875},
- {0x8C7D, 0xD876},{0x8C7E, 0xD877},{0x8C7F, 0xD878},{0x8C80, 0xD879},{0x8C81, 0xD87A},{0x8C82, 0xF5F5},{0x8C83, 0xD87B},{0x8C84, 0xD87C},
- {0x8C85, 0xF5F7},{0x8C86, 0xD87D},{0x8C87, 0xD87E},{0x8C88, 0xD880},{0x8C89, 0xBAD1},{0x8C8A, 0xF5F6},{0x8C8B, 0xD881},{0x8C8C, 0xC3B2},
- {0x8C8D, 0xD882},{0x8C8E, 0xD883},{0x8C8F, 0xD884},{0x8C90, 0xD885},{0x8C91, 0xD886},{0x8C92, 0xD887},{0x8C93, 0xD888},{0x8C94, 0xF5F9},
- {0x8C95, 0xD889},{0x8C96, 0xD88A},{0x8C97, 0xD88B},{0x8C98, 0xF5F8},{0x8C99, 0xD88C},{0x8C9A, 0xD88D},{0x8C9B, 0xD88E},{0x8C9C, 0xD88F},
- {0x8C9D, 0xD890},{0x8C9E, 0xD891},{0x8C9F, 0xD892},{0x8CA0, 0xD893},{0x8CA1, 0xD894},{0x8CA2, 0xD895},{0x8CA3, 0xD896},{0x8CA4, 0xD897},
- {0x8CA5, 0xD898},{0x8CA6, 0xD899},{0x8CA7, 0xD89A},{0x8CA8, 0xD89B},{0x8CA9, 0xD89C},{0x8CAA, 0xD89D},{0x8CAB, 0xD89E},{0x8CAC, 0xD89F},
- {0x8CAD, 0xD8A0},{0x8CAE, 0xD940},{0x8CAF, 0xD941},{0x8CB0, 0xD942},{0x8CB1, 0xD943},{0x8CB2, 0xD944},{0x8CB3, 0xD945},{0x8CB4, 0xD946},
- {0x8CB5, 0xD947},{0x8CB6, 0xD948},{0x8CB7, 0xD949},{0x8CB8, 0xD94A},{0x8CB9, 0xD94B},{0x8CBA, 0xD94C},{0x8CBB, 0xD94D},{0x8CBC, 0xD94E},
- {0x8CBD, 0xD94F},{0x8CBE, 0xD950},{0x8CBF, 0xD951},{0x8CC0, 0xD952},{0x8CC1, 0xD953},{0x8CC2, 0xD954},{0x8CC3, 0xD955},{0x8CC4, 0xD956},
- {0x8CC5, 0xD957},{0x8CC6, 0xD958},{0x8CC7, 0xD959},{0x8CC8, 0xD95A},{0x8CC9, 0xD95B},{0x8CCA, 0xD95C},{0x8CCB, 0xD95D},{0x8CCC, 0xD95E},
- {0x8CCD, 0xD95F},{0x8CCE, 0xD960},{0x8CCF, 0xD961},{0x8CD0, 0xD962},{0x8CD1, 0xD963},{0x8CD2, 0xD964},{0x8CD3, 0xD965},{0x8CD4, 0xD966},
- {0x8CD5, 0xD967},{0x8CD6, 0xD968},{0x8CD7, 0xD969},{0x8CD8, 0xD96A},{0x8CD9, 0xD96B},{0x8CDA, 0xD96C},{0x8CDB, 0xD96D},{0x8CDC, 0xD96E},
- {0x8CDD, 0xD96F},{0x8CDE, 0xD970},{0x8CDF, 0xD971},{0x8CE0, 0xD972},{0x8CE1, 0xD973},{0x8CE2, 0xD974},{0x8CE3, 0xD975},{0x8CE4, 0xD976},
- {0x8CE5, 0xD977},{0x8CE6, 0xD978},{0x8CE7, 0xD979},{0x8CE8, 0xD97A},{0x8CE9, 0xD97B},{0x8CEA, 0xD97C},{0x8CEB, 0xD97D},{0x8CEC, 0xD97E},
- {0x8CED, 0xD980},{0x8CEE, 0xD981},{0x8CEF, 0xD982},{0x8CF0, 0xD983},{0x8CF1, 0xD984},{0x8CF2, 0xD985},{0x8CF3, 0xD986},{0x8CF4, 0xD987},
- {0x8CF5, 0xD988},{0x8CF6, 0xD989},{0x8CF7, 0xD98A},{0x8CF8, 0xD98B},{0x8CF9, 0xD98C},{0x8CFA, 0xD98D},{0x8CFB, 0xD98E},{0x8CFC, 0xD98F},
- {0x8CFD, 0xD990},{0x8CFE, 0xD991},{0x8CFF, 0xD992},{0x8D00, 0xD993},{0x8D01, 0xD994},{0x8D02, 0xD995},{0x8D03, 0xD996},{0x8D04, 0xD997},
- {0x8D05, 0xD998},{0x8D06, 0xD999},{0x8D07, 0xD99A},{0x8D08, 0xD99B},{0x8D09, 0xD99C},{0x8D0A, 0xD99D},{0x8D0B, 0xD99E},{0x8D0C, 0xD99F},
- {0x8D0D, 0xD9A0},{0x8D0E, 0xDA40},{0x8D0F, 0xDA41},{0x8D10, 0xDA42},{0x8D11, 0xDA43},{0x8D12, 0xDA44},{0x8D13, 0xDA45},{0x8D14, 0xDA46},
- {0x8D15, 0xDA47},{0x8D16, 0xDA48},{0x8D17, 0xDA49},{0x8D18, 0xDA4A},{0x8D19, 0xDA4B},{0x8D1A, 0xDA4C},{0x8D1B, 0xDA4D},{0x8D1C, 0xDA4E},
- {0x8D1D, 0xB1B4},{0x8D1E, 0xD5EA},{0x8D1F, 0xB8BA},{0x8D20, 0xDA4F},{0x8D21, 0xB9B1},{0x8D22, 0xB2C6},{0x8D23, 0xD4F0},{0x8D24, 0xCFCD},
- {0x8D25, 0xB0DC},{0x8D26, 0xD5CB},{0x8D27, 0xBBF5},{0x8D28, 0xD6CA},{0x8D29, 0xB7B7},{0x8D2A, 0xCCB0},{0x8D2B, 0xC6B6},{0x8D2C, 0xB1E1},
- {0x8D2D, 0xB9BA},{0x8D2E, 0xD6FC},{0x8D2F, 0xB9E1},{0x8D30, 0xB7A1},{0x8D31, 0xBCFA},{0x8D32, 0xEADA},{0x8D33, 0xEADB},{0x8D34, 0xCCF9},
- {0x8D35, 0xB9F3},{0x8D36, 0xEADC},{0x8D37, 0xB4FB},{0x8D38, 0xC3B3},{0x8D39, 0xB7D1},{0x8D3A, 0xBAD8},{0x8D3B, 0xEADD},{0x8D3C, 0xD4F4},
- {0x8D3D, 0xEADE},{0x8D3E, 0xBCD6},{0x8D3F, 0xBBDF},{0x8D40, 0xEADF},{0x8D41, 0xC1DE},{0x8D42, 0xC2B8},{0x8D43, 0xD4DF},{0x8D44, 0xD7CA},
- {0x8D45, 0xEAE0},{0x8D46, 0xEAE1},{0x8D47, 0xEAE4},{0x8D48, 0xEAE2},{0x8D49, 0xEAE3},{0x8D4A, 0xC9DE},{0x8D4B, 0xB8B3},{0x8D4C, 0xB6C4},
- {0x8D4D, 0xEAE5},{0x8D4E, 0xCAEA},{0x8D4F, 0xC9CD},{0x8D50, 0xB4CD},{0x8D51, 0xDA50},{0x8D52, 0xDA51},{0x8D53, 0xE2D9},{0x8D54, 0xC5E2},
- {0x8D55, 0xEAE6},{0x8D56, 0xC0B5},{0x8D57, 0xDA52},{0x8D58, 0xD7B8},{0x8D59, 0xEAE7},{0x8D5A, 0xD7AC},{0x8D5B, 0xC8FC},{0x8D5C, 0xD8D3},
- {0x8D5D, 0xD8CD},{0x8D5E, 0xD4DE},{0x8D5F, 0xDA53},{0x8D60, 0xD4F9},{0x8D61, 0xC9C4},{0x8D62, 0xD3AE},{0x8D63, 0xB8D3},{0x8D64, 0xB3E0},
- {0x8D65, 0xDA54},{0x8D66, 0xC9E2},{0x8D67, 0xF4F6},{0x8D68, 0xDA55},{0x8D69, 0xDA56},{0x8D6A, 0xDA57},{0x8D6B, 0xBAD5},{0x8D6C, 0xDA58},
- {0x8D6D, 0xF4F7},{0x8D6E, 0xDA59},{0x8D6F, 0xDA5A},{0x8D70, 0xD7DF},{0x8D71, 0xDA5B},{0x8D72, 0xDA5C},{0x8D73, 0xF4F1},{0x8D74, 0xB8B0},
- {0x8D75, 0xD5D4},{0x8D76, 0xB8CF},{0x8D77, 0xC6F0},{0x8D78, 0xDA5D},{0x8D79, 0xDA5E},{0x8D7A, 0xDA5F},{0x8D7B, 0xDA60},{0x8D7C, 0xDA61},
- {0x8D7D, 0xDA62},{0x8D7E, 0xDA63},{0x8D7F, 0xDA64},{0x8D80, 0xDA65},{0x8D81, 0xB3C3},{0x8D82, 0xDA66},{0x8D83, 0xDA67},{0x8D84, 0xF4F2},
- {0x8D85, 0xB3AC},{0x8D86, 0xDA68},{0x8D87, 0xDA69},{0x8D88, 0xDA6A},{0x8D89, 0xDA6B},{0x8D8A, 0xD4BD},{0x8D8B, 0xC7F7},{0x8D8C, 0xDA6C},
- {0x8D8D, 0xDA6D},{0x8D8E, 0xDA6E},{0x8D8F, 0xDA6F},{0x8D90, 0xDA70},{0x8D91, 0xF4F4},{0x8D92, 0xDA71},{0x8D93, 0xDA72},{0x8D94, 0xF4F3},
- {0x8D95, 0xDA73},{0x8D96, 0xDA74},{0x8D97, 0xDA75},{0x8D98, 0xDA76},{0x8D99, 0xDA77},{0x8D9A, 0xDA78},{0x8D9B, 0xDA79},{0x8D9C, 0xDA7A},
- {0x8D9D, 0xDA7B},{0x8D9E, 0xDA7C},{0x8D9F, 0xCCCB},{0x8DA0, 0xDA7D},{0x8DA1, 0xDA7E},{0x8DA2, 0xDA80},{0x8DA3, 0xC8A4},{0x8DA4, 0xDA81},
- {0x8DA5, 0xDA82},{0x8DA6, 0xDA83},{0x8DA7, 0xDA84},{0x8DA8, 0xDA85},{0x8DA9, 0xDA86},{0x8DAA, 0xDA87},{0x8DAB, 0xDA88},{0x8DAC, 0xDA89},
- {0x8DAD, 0xDA8A},{0x8DAE, 0xDA8B},{0x8DAF, 0xDA8C},{0x8DB0, 0xDA8D},{0x8DB1, 0xF4F5},{0x8DB2, 0xDA8E},{0x8DB3, 0xD7E3},{0x8DB4, 0xC5BF},
- {0x8DB5, 0xF5C0},{0x8DB6, 0xDA8F},{0x8DB7, 0xDA90},{0x8DB8, 0xF5BB},{0x8DB9, 0xDA91},{0x8DBA, 0xF5C3},{0x8DBB, 0xDA92},{0x8DBC, 0xF5C2},
- {0x8DBD, 0xDA93},{0x8DBE, 0xD6BA},{0x8DBF, 0xF5C1},{0x8DC0, 0xDA94},{0x8DC1, 0xDA95},{0x8DC2, 0xDA96},{0x8DC3, 0xD4BE},{0x8DC4, 0xF5C4},
- {0x8DC5, 0xDA97},{0x8DC6, 0xF5CC},{0x8DC7, 0xDA98},{0x8DC8, 0xDA99},{0x8DC9, 0xDA9A},{0x8DCA, 0xDA9B},{0x8DCB, 0xB0CF},{0x8DCC, 0xB5F8},
- {0x8DCD, 0xDA9C},{0x8DCE, 0xF5C9},{0x8DCF, 0xF5CA},{0x8DD0, 0xDA9D},{0x8DD1, 0xC5DC},{0x8DD2, 0xDA9E},{0x8DD3, 0xDA9F},{0x8DD4, 0xDAA0},
- {0x8DD5, 0xDB40},{0x8DD6, 0xF5C5},{0x8DD7, 0xF5C6},{0x8DD8, 0xDB41},{0x8DD9, 0xDB42},{0x8DDA, 0xF5C7},{0x8DDB, 0xF5CB},{0x8DDC, 0xDB43},
- {0x8DDD, 0xBEE0},{0x8DDE, 0xF5C8},{0x8DDF, 0xB8FA},{0x8DE0, 0xDB44},{0x8DE1, 0xDB45},{0x8DE2, 0xDB46},{0x8DE3, 0xF5D0},{0x8DE4, 0xF5D3},
- {0x8DE5, 0xDB47},{0x8DE6, 0xDB48},{0x8DE7, 0xDB49},{0x8DE8, 0xBFE7},{0x8DE9, 0xDB4A},{0x8DEA, 0xB9F2},{0x8DEB, 0xF5BC},{0x8DEC, 0xF5CD},
- {0x8DED, 0xDB4B},{0x8DEE, 0xDB4C},{0x8DEF, 0xC2B7},{0x8DF0, 0xDB4D},{0x8DF1, 0xDB4E},{0x8DF2, 0xDB4F},{0x8DF3, 0xCCF8},{0x8DF4, 0xDB50},
- {0x8DF5, 0xBCF9},{0x8DF6, 0xDB51},{0x8DF7, 0xF5CE},{0x8DF8, 0xF5CF},{0x8DF9, 0xF5D1},{0x8DFA, 0xB6E5},{0x8DFB, 0xF5D2},{0x8DFC, 0xDB52},
- {0x8DFD, 0xF5D5},{0x8DFE, 0xDB53},{0x8DFF, 0xDB54},{0x8E00, 0xDB55},{0x8E01, 0xDB56},{0x8E02, 0xDB57},{0x8E03, 0xDB58},{0x8E04, 0xDB59},
- {0x8E05, 0xF5BD},{0x8E06, 0xDB5A},{0x8E07, 0xDB5B},{0x8E08, 0xDB5C},{0x8E09, 0xF5D4},{0x8E0A, 0xD3BB},{0x8E0B, 0xDB5D},{0x8E0C, 0xB3EC},
- {0x8E0D, 0xDB5E},{0x8E0E, 0xDB5F},{0x8E0F, 0xCCA4},{0x8E10, 0xDB60},{0x8E11, 0xDB61},{0x8E12, 0xDB62},{0x8E13, 0xDB63},{0x8E14, 0xF5D6},
- {0x8E15, 0xDB64},{0x8E16, 0xDB65},{0x8E17, 0xDB66},{0x8E18, 0xDB67},{0x8E19, 0xDB68},{0x8E1A, 0xDB69},{0x8E1B, 0xDB6A},{0x8E1C, 0xDB6B},
- {0x8E1D, 0xF5D7},{0x8E1E, 0xBEE1},{0x8E1F, 0xF5D8},{0x8E20, 0xDB6C},{0x8E21, 0xDB6D},{0x8E22, 0xCCDF},{0x8E23, 0xF5DB},{0x8E24, 0xDB6E},
- {0x8E25, 0xDB6F},{0x8E26, 0xDB70},{0x8E27, 0xDB71},{0x8E28, 0xDB72},{0x8E29, 0xB2C8},{0x8E2A, 0xD7D9},{0x8E2B, 0xDB73},{0x8E2C, 0xF5D9},
- {0x8E2D, 0xDB74},{0x8E2E, 0xF5DA},{0x8E2F, 0xF5DC},{0x8E30, 0xDB75},{0x8E31, 0xF5E2},{0x8E32, 0xDB76},{0x8E33, 0xDB77},{0x8E34, 0xDB78},
- {0x8E35, 0xF5E0},{0x8E36, 0xDB79},{0x8E37, 0xDB7A},{0x8E38, 0xDB7B},{0x8E39, 0xF5DF},{0x8E3A, 0xF5DD},{0x8E3B, 0xDB7C},{0x8E3C, 0xDB7D},
- {0x8E3D, 0xF5E1},{0x8E3E, 0xDB7E},{0x8E3F, 0xDB80},{0x8E40, 0xF5DE},{0x8E41, 0xF5E4},{0x8E42, 0xF5E5},{0x8E43, 0xDB81},{0x8E44, 0xCCE3},
- {0x8E45, 0xDB82},{0x8E46, 0xDB83},{0x8E47, 0xE5BF},{0x8E48, 0xB5B8},{0x8E49, 0xF5E3},{0x8E4A, 0xF5E8},{0x8E4B, 0xCCA3},{0x8E4C, 0xDB84},
- {0x8E4D, 0xDB85},{0x8E4E, 0xDB86},{0x8E4F, 0xDB87},{0x8E50, 0xDB88},{0x8E51, 0xF5E6},{0x8E52, 0xF5E7},{0x8E53, 0xDB89},{0x8E54, 0xDB8A},
- {0x8E55, 0xDB8B},{0x8E56, 0xDB8C},{0x8E57, 0xDB8D},{0x8E58, 0xDB8E},{0x8E59, 0xF5BE},{0x8E5A, 0xDB8F},{0x8E5B, 0xDB90},{0x8E5C, 0xDB91},
- {0x8E5D, 0xDB92},{0x8E5E, 0xDB93},{0x8E5F, 0xDB94},{0x8E60, 0xDB95},{0x8E61, 0xDB96},{0x8E62, 0xDB97},{0x8E63, 0xDB98},{0x8E64, 0xDB99},
- {0x8E65, 0xDB9A},{0x8E66, 0xB1C4},{0x8E67, 0xDB9B},{0x8E68, 0xDB9C},{0x8E69, 0xF5BF},{0x8E6A, 0xDB9D},{0x8E6B, 0xDB9E},{0x8E6C, 0xB5C5},
- {0x8E6D, 0xB2E4},{0x8E6E, 0xDB9F},{0x8E6F, 0xF5EC},{0x8E70, 0xF5E9},{0x8E71, 0xDBA0},{0x8E72, 0xB6D7},{0x8E73, 0xDC40},{0x8E74, 0xF5ED},
- {0x8E75, 0xDC41},{0x8E76, 0xF5EA},{0x8E77, 0xDC42},{0x8E78, 0xDC43},{0x8E79, 0xDC44},{0x8E7A, 0xDC45},{0x8E7B, 0xDC46},{0x8E7C, 0xF5EB},
- {0x8E7D, 0xDC47},{0x8E7E, 0xDC48},{0x8E7F, 0xB4DA},{0x8E80, 0xDC49},{0x8E81, 0xD4EA},{0x8E82, 0xDC4A},{0x8E83, 0xDC4B},{0x8E84, 0xDC4C},
- {0x8E85, 0xF5EE},{0x8E86, 0xDC4D},{0x8E87, 0xB3F9},{0x8E88, 0xDC4E},{0x8E89, 0xDC4F},{0x8E8A, 0xDC50},{0x8E8B, 0xDC51},{0x8E8C, 0xDC52},
- {0x8E8D, 0xDC53},{0x8E8E, 0xDC54},{0x8E8F, 0xF5EF},{0x8E90, 0xF5F1},{0x8E91, 0xDC55},{0x8E92, 0xDC56},{0x8E93, 0xDC57},{0x8E94, 0xF5F0},
- {0x8E95, 0xDC58},{0x8E96, 0xDC59},{0x8E97, 0xDC5A},{0x8E98, 0xDC5B},{0x8E99, 0xDC5C},{0x8E9A, 0xDC5D},{0x8E9B, 0xDC5E},{0x8E9C, 0xF5F2},
- {0x8E9D, 0xDC5F},{0x8E9E, 0xF5F3},{0x8E9F, 0xDC60},{0x8EA0, 0xDC61},{0x8EA1, 0xDC62},{0x8EA2, 0xDC63},{0x8EA3, 0xDC64},{0x8EA4, 0xDC65},
- {0x8EA5, 0xDC66},{0x8EA6, 0xDC67},{0x8EA7, 0xDC68},{0x8EA8, 0xDC69},{0x8EA9, 0xDC6A},{0x8EAA, 0xDC6B},{0x8EAB, 0xC9ED},{0x8EAC, 0xB9AA},
- {0x8EAD, 0xDC6C},{0x8EAE, 0xDC6D},{0x8EAF, 0xC7FB},{0x8EB0, 0xDC6E},{0x8EB1, 0xDC6F},{0x8EB2, 0xB6E3},{0x8EB3, 0xDC70},{0x8EB4, 0xDC71},
- {0x8EB5, 0xDC72},{0x8EB6, 0xDC73},{0x8EB7, 0xDC74},{0x8EB8, 0xDC75},{0x8EB9, 0xDC76},{0x8EBA, 0xCCC9},{0x8EBB, 0xDC77},{0x8EBC, 0xDC78},
- {0x8EBD, 0xDC79},{0x8EBE, 0xDC7A},{0x8EBF, 0xDC7B},{0x8EC0, 0xDC7C},{0x8EC1, 0xDC7D},{0x8EC2, 0xDC7E},{0x8EC3, 0xDC80},{0x8EC4, 0xDC81},
- {0x8EC5, 0xDC82},{0x8EC6, 0xDC83},{0x8EC7, 0xDC84},{0x8EC8, 0xDC85},{0x8EC9, 0xDC86},{0x8ECA, 0xDC87},{0x8ECB, 0xDC88},{0x8ECC, 0xDC89},
- {0x8ECD, 0xDC8A},{0x8ECE, 0xEAA6},{0x8ECF, 0xDC8B},{0x8ED0, 0xDC8C},{0x8ED1, 0xDC8D},{0x8ED2, 0xDC8E},{0x8ED3, 0xDC8F},{0x8ED4, 0xDC90},
- {0x8ED5, 0xDC91},{0x8ED6, 0xDC92},{0x8ED7, 0xDC93},{0x8ED8, 0xDC94},{0x8ED9, 0xDC95},{0x8EDA, 0xDC96},{0x8EDB, 0xDC97},{0x8EDC, 0xDC98},
- {0x8EDD, 0xDC99},{0x8EDE, 0xDC9A},{0x8EDF, 0xDC9B},{0x8EE0, 0xDC9C},{0x8EE1, 0xDC9D},{0x8EE2, 0xDC9E},{0x8EE3, 0xDC9F},{0x8EE4, 0xDCA0},
- {0x8EE5, 0xDD40},{0x8EE6, 0xDD41},{0x8EE7, 0xDD42},{0x8EE8, 0xDD43},{0x8EE9, 0xDD44},{0x8EEA, 0xDD45},{0x8EEB, 0xDD46},{0x8EEC, 0xDD47},
- {0x8EED, 0xDD48},{0x8EEE, 0xDD49},{0x8EEF, 0xDD4A},{0x8EF0, 0xDD4B},{0x8EF1, 0xDD4C},{0x8EF2, 0xDD4D},{0x8EF3, 0xDD4E},{0x8EF4, 0xDD4F},
- {0x8EF5, 0xDD50},{0x8EF6, 0xDD51},{0x8EF7, 0xDD52},{0x8EF8, 0xDD53},{0x8EF9, 0xDD54},{0x8EFA, 0xDD55},{0x8EFB, 0xDD56},{0x8EFC, 0xDD57},
- {0x8EFD, 0xDD58},{0x8EFE, 0xDD59},{0x8EFF, 0xDD5A},{0x8F00, 0xDD5B},{0x8F01, 0xDD5C},{0x8F02, 0xDD5D},{0x8F03, 0xDD5E},{0x8F04, 0xDD5F},
- {0x8F05, 0xDD60},{0x8F06, 0xDD61},{0x8F07, 0xDD62},{0x8F08, 0xDD63},{0x8F09, 0xDD64},{0x8F0A, 0xDD65},{0x8F0B, 0xDD66},{0x8F0C, 0xDD67},
- {0x8F0D, 0xDD68},{0x8F0E, 0xDD69},{0x8F0F, 0xDD6A},{0x8F10, 0xDD6B},{0x8F11, 0xDD6C},{0x8F12, 0xDD6D},{0x8F13, 0xDD6E},{0x8F14, 0xDD6F},
- {0x8F15, 0xDD70},{0x8F16, 0xDD71},{0x8F17, 0xDD72},{0x8F18, 0xDD73},{0x8F19, 0xDD74},{0x8F1A, 0xDD75},{0x8F1B, 0xDD76},{0x8F1C, 0xDD77},
- {0x8F1D, 0xDD78},{0x8F1E, 0xDD79},{0x8F1F, 0xDD7A},{0x8F20, 0xDD7B},{0x8F21, 0xDD7C},{0x8F22, 0xDD7D},{0x8F23, 0xDD7E},{0x8F24, 0xDD80},
- {0x8F25, 0xDD81},{0x8F26, 0xDD82},{0x8F27, 0xDD83},{0x8F28, 0xDD84},{0x8F29, 0xDD85},{0x8F2A, 0xDD86},{0x8F2B, 0xDD87},{0x8F2C, 0xDD88},
- {0x8F2D, 0xDD89},{0x8F2E, 0xDD8A},{0x8F2F, 0xDD8B},{0x8F30, 0xDD8C},{0x8F31, 0xDD8D},{0x8F32, 0xDD8E},{0x8F33, 0xDD8F},{0x8F34, 0xDD90},
- {0x8F35, 0xDD91},{0x8F36, 0xDD92},{0x8F37, 0xDD93},{0x8F38, 0xDD94},{0x8F39, 0xDD95},{0x8F3A, 0xDD96},{0x8F3B, 0xDD97},{0x8F3C, 0xDD98},
- {0x8F3D, 0xDD99},{0x8F3E, 0xDD9A},{0x8F3F, 0xDD9B},{0x8F40, 0xDD9C},{0x8F41, 0xDD9D},{0x8F42, 0xDD9E},{0x8F43, 0xDD9F},{0x8F44, 0xDDA0},
- {0x8F45, 0xDE40},{0x8F46, 0xDE41},{0x8F47, 0xDE42},{0x8F48, 0xDE43},{0x8F49, 0xDE44},{0x8F4A, 0xDE45},{0x8F4B, 0xDE46},{0x8F4C, 0xDE47},
- {0x8F4D, 0xDE48},{0x8F4E, 0xDE49},{0x8F4F, 0xDE4A},{0x8F50, 0xDE4B},{0x8F51, 0xDE4C},{0x8F52, 0xDE4D},{0x8F53, 0xDE4E},{0x8F54, 0xDE4F},
- {0x8F55, 0xDE50},{0x8F56, 0xDE51},{0x8F57, 0xDE52},{0x8F58, 0xDE53},{0x8F59, 0xDE54},{0x8F5A, 0xDE55},{0x8F5B, 0xDE56},{0x8F5C, 0xDE57},
- {0x8F5D, 0xDE58},{0x8F5E, 0xDE59},{0x8F5F, 0xDE5A},{0x8F60, 0xDE5B},{0x8F61, 0xDE5C},{0x8F62, 0xDE5D},{0x8F63, 0xDE5E},{0x8F64, 0xDE5F},
- {0x8F65, 0xDE60},{0x8F66, 0xB3B5},{0x8F67, 0xD4FE},{0x8F68, 0xB9EC},{0x8F69, 0xD0F9},{0x8F6A, 0xDE61},{0x8F6B, 0xE9ED},{0x8F6C, 0xD7AA},
- {0x8F6D, 0xE9EE},{0x8F6E, 0xC2D6},{0x8F6F, 0xC8ED},{0x8F70, 0xBAE4},{0x8F71, 0xE9EF},{0x8F72, 0xE9F0},{0x8F73, 0xE9F1},{0x8F74, 0xD6E1},
- {0x8F75, 0xE9F2},{0x8F76, 0xE9F3},{0x8F77, 0xE9F5},{0x8F78, 0xE9F4},{0x8F79, 0xE9F6},{0x8F7A, 0xE9F7},{0x8F7B, 0xC7E1},{0x8F7C, 0xE9F8},
- {0x8F7D, 0xD4D8},{0x8F7E, 0xE9F9},{0x8F7F, 0xBDCE},{0x8F80, 0xDE62},{0x8F81, 0xE9FA},{0x8F82, 0xE9FB},{0x8F83, 0xBDCF},{0x8F84, 0xE9FC},
- {0x8F85, 0xB8A8},{0x8F86, 0xC1BE},{0x8F87, 0xE9FD},{0x8F88, 0xB1B2},{0x8F89, 0xBBD4},{0x8F8A, 0xB9F5},{0x8F8B, 0xE9FE},{0x8F8C, 0xDE63},
- {0x8F8D, 0xEAA1},{0x8F8E, 0xEAA2},{0x8F8F, 0xEAA3},{0x8F90, 0xB7F8},{0x8F91, 0xBCAD},{0x8F92, 0xDE64},{0x8F93, 0xCAE4},{0x8F94, 0xE0CE},
- {0x8F95, 0xD4AF},{0x8F96, 0xCFBD},{0x8F97, 0xD5B7},{0x8F98, 0xEAA4},{0x8F99, 0xD5DE},{0x8F9A, 0xEAA5},{0x8F9B, 0xD0C1},{0x8F9C, 0xB9BC},
- {0x8F9D, 0xDE65},{0x8F9E, 0xB4C7},{0x8F9F, 0xB1D9},{0x8FA0, 0xDE66},{0x8FA1, 0xDE67},{0x8FA2, 0xDE68},{0x8FA3, 0xC0B1},{0x8FA4, 0xDE69},
- {0x8FA5, 0xDE6A},{0x8FA6, 0xDE6B},{0x8FA7, 0xDE6C},{0x8FA8, 0xB1E6},{0x8FA9, 0xB1E7},{0x8FAA, 0xDE6D},{0x8FAB, 0xB1E8},{0x8FAC, 0xDE6E},
- {0x8FAD, 0xDE6F},{0x8FAE, 0xDE70},{0x8FAF, 0xDE71},{0x8FB0, 0xB3BD},{0x8FB1, 0xC8E8},{0x8FB2, 0xDE72},{0x8FB3, 0xDE73},{0x8FB4, 0xDE74},
- {0x8FB5, 0xDE75},{0x8FB6, 0xE5C1},{0x8FB7, 0xDE76},{0x8FB8, 0xDE77},{0x8FB9, 0xB1DF},{0x8FBA, 0xDE78},{0x8FBB, 0xDE79},{0x8FBC, 0xDE7A},
- {0x8FBD, 0xC1C9},{0x8FBE, 0xB4EF},{0x8FBF, 0xDE7B},{0x8FC0, 0xDE7C},{0x8FC1, 0xC7A8},{0x8FC2, 0xD3D8},{0x8FC3, 0xDE7D},{0x8FC4, 0xC6F9},
- {0x8FC5, 0xD1B8},{0x8FC6, 0xDE7E},{0x8FC7, 0xB9FD},{0x8FC8, 0xC2F5},{0x8FC9, 0xDE80},{0x8FCA, 0xDE81},{0x8FCB, 0xDE82},{0x8FCC, 0xDE83},
- {0x8FCD, 0xDE84},{0x8FCE, 0xD3AD},{0x8FCF, 0xDE85},{0x8FD0, 0xD4CB},{0x8FD1, 0xBDFC},{0x8FD2, 0xDE86},{0x8FD3, 0xE5C2},{0x8FD4, 0xB7B5},
- {0x8FD5, 0xE5C3},{0x8FD6, 0xDE87},{0x8FD7, 0xDE88},{0x8FD8, 0xBBB9},{0x8FD9, 0xD5E2},{0x8FDA, 0xDE89},{0x8FDB, 0xBDF8},{0x8FDC, 0xD4B6},
- {0x8FDD, 0xCEA5},{0x8FDE, 0xC1AC},{0x8FDF, 0xB3D9},{0x8FE0, 0xDE8A},{0x8FE1, 0xDE8B},{0x8FE2, 0xCCF6},{0x8FE3, 0xDE8C},{0x8FE4, 0xE5C6},
- {0x8FE5, 0xE5C4},{0x8FE6, 0xE5C8},{0x8FE7, 0xDE8D},{0x8FE8, 0xE5CA},{0x8FE9, 0xE5C7},{0x8FEA, 0xB5CF},{0x8FEB, 0xC6C8},{0x8FEC, 0xDE8E},
- {0x8FED, 0xB5FC},{0x8FEE, 0xE5C5},{0x8FEF, 0xDE8F},{0x8FF0, 0xCAF6},{0x8FF1, 0xDE90},{0x8FF2, 0xDE91},{0x8FF3, 0xE5C9},{0x8FF4, 0xDE92},
- {0x8FF5, 0xDE93},{0x8FF6, 0xDE94},{0x8FF7, 0xC3D4},{0x8FF8, 0xB1C5},{0x8FF9, 0xBCA3},{0x8FFA, 0xDE95},{0x8FFB, 0xDE96},{0x8FFC, 0xDE97},
- {0x8FFD, 0xD7B7},{0x8FFE, 0xDE98},{0x8FFF, 0xDE99},{0x9000, 0xCDCB},{0x9001, 0xCBCD},{0x9002, 0xCACA},{0x9003, 0xCCD3},{0x9004, 0xE5CC},
- {0x9005, 0xE5CB},{0x9006, 0xC4E6},{0x9007, 0xDE9A},{0x9008, 0xDE9B},{0x9009, 0xD1A1},{0x900A, 0xD1B7},{0x900B, 0xE5CD},{0x900C, 0xDE9C},
- {0x900D, 0xE5D0},{0x900E, 0xDE9D},{0x900F, 0xCDB8},{0x9010, 0xD6F0},{0x9011, 0xE5CF},{0x9012, 0xB5DD},{0x9013, 0xDE9E},{0x9014, 0xCDBE},
- {0x9015, 0xDE9F},{0x9016, 0xE5D1},{0x9017, 0xB6BA},{0x9018, 0xDEA0},{0x9019, 0xDF40},{0x901A, 0xCDA8},{0x901B, 0xB9E4},{0x901C, 0xDF41},
- {0x901D, 0xCAC5},{0x901E, 0xB3D1},{0x901F, 0xCBD9},{0x9020, 0xD4EC},{0x9021, 0xE5D2},{0x9022, 0xB7EA},{0x9023, 0xDF42},{0x9024, 0xDF43},
- {0x9025, 0xDF44},{0x9026, 0xE5CE},{0x9027, 0xDF45},{0x9028, 0xDF46},{0x9029, 0xDF47},{0x902A, 0xDF48},{0x902B, 0xDF49},{0x902C, 0xDF4A},
- {0x902D, 0xE5D5},{0x902E, 0xB4FE},{0x902F, 0xE5D6},{0x9030, 0xDF4B},{0x9031, 0xDF4C},{0x9032, 0xDF4D},{0x9033, 0xDF4E},{0x9034, 0xDF4F},
- {0x9035, 0xE5D3},{0x9036, 0xE5D4},{0x9037, 0xDF50},{0x9038, 0xD2DD},{0x9039, 0xDF51},{0x903A, 0xDF52},{0x903B, 0xC2DF},{0x903C, 0xB1C6},
- {0x903D, 0xDF53},{0x903E, 0xD3E2},{0x903F, 0xDF54},{0x9040, 0xDF55},{0x9041, 0xB6DD},{0x9042, 0xCBEC},{0x9043, 0xDF56},{0x9044, 0xE5D7},
- {0x9045, 0xDF57},{0x9046, 0xDF58},{0x9047, 0xD3F6},{0x9048, 0xDF59},{0x9049, 0xDF5A},{0x904A, 0xDF5B},{0x904B, 0xDF5C},{0x904C, 0xDF5D},
- {0x904D, 0xB1E9},{0x904E, 0xDF5E},{0x904F, 0xB6F4},{0x9050, 0xE5DA},{0x9051, 0xE5D8},{0x9052, 0xE5D9},{0x9053, 0xB5C0},{0x9054, 0xDF5F},
- {0x9055, 0xDF60},{0x9056, 0xDF61},{0x9057, 0xD2C5},{0x9058, 0xE5DC},{0x9059, 0xDF62},{0x905A, 0xDF63},{0x905B, 0xE5DE},{0x905C, 0xDF64},
- {0x905D, 0xDF65},{0x905E, 0xDF66},{0x905F, 0xDF67},{0x9060, 0xDF68},{0x9061, 0xDF69},{0x9062, 0xE5DD},{0x9063, 0xC7B2},{0x9064, 0xDF6A},
- {0x9065, 0xD2A3},{0x9066, 0xDF6B},{0x9067, 0xDF6C},{0x9068, 0xE5DB},{0x9069, 0xDF6D},{0x906A, 0xDF6E},{0x906B, 0xDF6F},{0x906C, 0xDF70},
- {0x906D, 0xD4E2},{0x906E, 0xD5DA},{0x906F, 0xDF71},{0x9070, 0xDF72},{0x9071, 0xDF73},{0x9072, 0xDF74},{0x9073, 0xDF75},{0x9074, 0xE5E0},
- {0x9075, 0xD7F1},{0x9076, 0xDF76},{0x9077, 0xDF77},{0x9078, 0xDF78},{0x9079, 0xDF79},{0x907A, 0xDF7A},{0x907B, 0xDF7B},{0x907C, 0xDF7C},
- {0x907D, 0xE5E1},{0x907E, 0xDF7D},{0x907F, 0xB1DC},{0x9080, 0xD1FB},{0x9081, 0xDF7E},{0x9082, 0xE5E2},{0x9083, 0xE5E4},{0x9084, 0xDF80},
- {0x9085, 0xDF81},{0x9086, 0xDF82},{0x9087, 0xDF83},{0x9088, 0xE5E3},{0x9089, 0xDF84},{0x908A, 0xDF85},{0x908B, 0xE5E5},{0x908C, 0xDF86},
- {0x908D, 0xDF87},{0x908E, 0xDF88},{0x908F, 0xDF89},{0x9090, 0xDF8A},{0x9091, 0xD2D8},{0x9092, 0xDF8B},{0x9093, 0xB5CB},{0x9094, 0xDF8C},
- {0x9095, 0xE7DF},{0x9096, 0xDF8D},{0x9097, 0xDAF5},{0x9098, 0xDF8E},{0x9099, 0xDAF8},{0x909A, 0xDF8F},{0x909B, 0xDAF6},{0x909C, 0xDF90},
- {0x909D, 0xDAF7},{0x909E, 0xDF91},{0x909F, 0xDF92},{0x90A0, 0xDF93},{0x90A1, 0xDAFA},{0x90A2, 0xD0CF},{0x90A3, 0xC4C7},{0x90A4, 0xDF94},
- {0x90A5, 0xDF95},{0x90A6, 0xB0EE},{0x90A7, 0xDF96},{0x90A8, 0xDF97},{0x90A9, 0xDF98},{0x90AA, 0xD0B0},{0x90AB, 0xDF99},{0x90AC, 0xDAF9},
- {0x90AD, 0xDF9A},{0x90AE, 0xD3CA},{0x90AF, 0xBAAA},{0x90B0, 0xDBA2},{0x90B1, 0xC7F1},{0x90B2, 0xDF9B},{0x90B3, 0xDAFC},{0x90B4, 0xDAFB},
- {0x90B5, 0xC9DB},{0x90B6, 0xDAFD},{0x90B7, 0xDF9C},{0x90B8, 0xDBA1},{0x90B9, 0xD7DE},{0x90BA, 0xDAFE},{0x90BB, 0xC1DA},{0x90BC, 0xDF9D},
- {0x90BD, 0xDF9E},{0x90BE, 0xDBA5},{0x90BF, 0xDF9F},{0x90C0, 0xDFA0},{0x90C1, 0xD3F4},{0x90C2, 0xE040},{0x90C3, 0xE041},{0x90C4, 0xDBA7},
- {0x90C5, 0xDBA4},{0x90C6, 0xE042},{0x90C7, 0xDBA8},{0x90C8, 0xE043},{0x90C9, 0xE044},{0x90CA, 0xBDBC},{0x90CB, 0xE045},{0x90CC, 0xE046},
- {0x90CD, 0xE047},{0x90CE, 0xC0C9},{0x90CF, 0xDBA3},{0x90D0, 0xDBA6},{0x90D1, 0xD6A3},{0x90D2, 0xE048},{0x90D3, 0xDBA9},{0x90D4, 0xE049},
- {0x90D5, 0xE04A},{0x90D6, 0xE04B},{0x90D7, 0xDBAD},{0x90D8, 0xE04C},{0x90D9, 0xE04D},{0x90DA, 0xE04E},{0x90DB, 0xDBAE},{0x90DC, 0xDBAC},
- {0x90DD, 0xBAC2},{0x90DE, 0xE04F},{0x90DF, 0xE050},{0x90E0, 0xE051},{0x90E1, 0xBFA4},{0x90E2, 0xDBAB},{0x90E3, 0xE052},{0x90E4, 0xE053},
- {0x90E5, 0xE054},{0x90E6, 0xDBAA},{0x90E7, 0xD4C7},{0x90E8, 0xB2BF},{0x90E9, 0xE055},{0x90EA, 0xE056},{0x90EB, 0xDBAF},{0x90EC, 0xE057},
- {0x90ED, 0xB9F9},{0x90EE, 0xE058},{0x90EF, 0xDBB0},{0x90F0, 0xE059},{0x90F1, 0xE05A},{0x90F2, 0xE05B},{0x90F3, 0xE05C},{0x90F4, 0xB3BB},
- {0x90F5, 0xE05D},{0x90F6, 0xE05E},{0x90F7, 0xE05F},{0x90F8, 0xB5A6},{0x90F9, 0xE060},{0x90FA, 0xE061},{0x90FB, 0xE062},{0x90FC, 0xE063},
- {0x90FD, 0xB6BC},{0x90FE, 0xDBB1},{0x90FF, 0xE064},{0x9100, 0xE065},{0x9101, 0xE066},{0x9102, 0xB6F5},{0x9103, 0xE067},{0x9104, 0xDBB2},
- {0x9105, 0xE068},{0x9106, 0xE069},{0x9107, 0xE06A},{0x9108, 0xE06B},{0x9109, 0xE06C},{0x910A, 0xE06D},{0x910B, 0xE06E},{0x910C, 0xE06F},
- {0x910D, 0xE070},{0x910E, 0xE071},{0x910F, 0xE072},{0x9110, 0xE073},{0x9111, 0xE074},{0x9112, 0xE075},{0x9113, 0xE076},{0x9114, 0xE077},
- {0x9115, 0xE078},{0x9116, 0xE079},{0x9117, 0xE07A},{0x9118, 0xE07B},{0x9119, 0xB1C9},{0x911A, 0xE07C},{0x911B, 0xE07D},{0x911C, 0xE07E},
- {0x911D, 0xE080},{0x911E, 0xDBB4},{0x911F, 0xE081},{0x9120, 0xE082},{0x9121, 0xE083},{0x9122, 0xDBB3},{0x9123, 0xDBB5},{0x9124, 0xE084},
- {0x9125, 0xE085},{0x9126, 0xE086},{0x9127, 0xE087},{0x9128, 0xE088},{0x9129, 0xE089},{0x912A, 0xE08A},{0x912B, 0xE08B},{0x912C, 0xE08C},
- {0x912D, 0xE08D},{0x912E, 0xE08E},{0x912F, 0xDBB7},{0x9130, 0xE08F},{0x9131, 0xDBB6},{0x9132, 0xE090},{0x9133, 0xE091},{0x9134, 0xE092},
- {0x9135, 0xE093},{0x9136, 0xE094},{0x9137, 0xE095},{0x9138, 0xE096},{0x9139, 0xDBB8},{0x913A, 0xE097},{0x913B, 0xE098},{0x913C, 0xE099},
- {0x913D, 0xE09A},{0x913E, 0xE09B},{0x913F, 0xE09C},{0x9140, 0xE09D},{0x9141, 0xE09E},{0x9142, 0xE09F},{0x9143, 0xDBB9},{0x9144, 0xE0A0},
- {0x9145, 0xE140},{0x9146, 0xDBBA},{0x9147, 0xE141},{0x9148, 0xE142},{0x9149, 0xD3CF},{0x914A, 0xF4FA},{0x914B, 0xC7F5},{0x914C, 0xD7C3},
- {0x914D, 0xC5E4},{0x914E, 0xF4FC},{0x914F, 0xF4FD},{0x9150, 0xF4FB},{0x9151, 0xE143},{0x9152, 0xBEC6},{0x9153, 0xE144},{0x9154, 0xE145},
- {0x9155, 0xE146},{0x9156, 0xE147},{0x9157, 0xD0EF},{0x9158, 0xE148},{0x9159, 0xE149},{0x915A, 0xB7D3},{0x915B, 0xE14A},{0x915C, 0xE14B},
- {0x915D, 0xD4CD},{0x915E, 0xCCAA},{0x915F, 0xE14C},{0x9160, 0xE14D},{0x9161, 0xF5A2},{0x9162, 0xF5A1},{0x9163, 0xBAA8},{0x9164, 0xF4FE},
- {0x9165, 0xCBD6},{0x9166, 0xE14E},{0x9167, 0xE14F},{0x9168, 0xE150},{0x9169, 0xF5A4},{0x916A, 0xC0D2},{0x916B, 0xE151},{0x916C, 0xB3EA},
- {0x916D, 0xE152},{0x916E, 0xCDAA},{0x916F, 0xF5A5},{0x9170, 0xF5A3},{0x9171, 0xBDB4},{0x9172, 0xF5A8},{0x9173, 0xE153},{0x9174, 0xF5A9},
- {0x9175, 0xBDCD},{0x9176, 0xC3B8},{0x9177, 0xBFE1},{0x9178, 0xCBE1},{0x9179, 0xF5AA},{0x917A, 0xE154},{0x917B, 0xE155},{0x917C, 0xE156},
- {0x917D, 0xF5A6},{0x917E, 0xF5A7},{0x917F, 0xC4F0},{0x9180, 0xE157},{0x9181, 0xE158},{0x9182, 0xE159},{0x9183, 0xE15A},{0x9184, 0xE15B},
- {0x9185, 0xF5AC},{0x9186, 0xE15C},{0x9187, 0xB4BC},{0x9188, 0xE15D},{0x9189, 0xD7ED},{0x918A, 0xE15E},{0x918B, 0xB4D7},{0x918C, 0xF5AB},
- {0x918D, 0xF5AE},{0x918E, 0xE15F},{0x918F, 0xE160},{0x9190, 0xF5AD},{0x9191, 0xF5AF},{0x9192, 0xD0D1},{0x9193, 0xE161},{0x9194, 0xE162},
- {0x9195, 0xE163},{0x9196, 0xE164},{0x9197, 0xE165},{0x9198, 0xE166},{0x9199, 0xE167},{0x919A, 0xC3D1},{0x919B, 0xC8A9},{0x919C, 0xE168},
- {0x919D, 0xE169},{0x919E, 0xE16A},{0x919F, 0xE16B},{0x91A0, 0xE16C},{0x91A1, 0xE16D},{0x91A2, 0xF5B0},{0x91A3, 0xF5B1},{0x91A4, 0xE16E},
- {0x91A5, 0xE16F},{0x91A6, 0xE170},{0x91A7, 0xE171},{0x91A8, 0xE172},{0x91A9, 0xE173},{0x91AA, 0xF5B2},{0x91AB, 0xE174},{0x91AC, 0xE175},
- {0x91AD, 0xF5B3},{0x91AE, 0xF5B4},{0x91AF, 0xF5B5},{0x91B0, 0xE176},{0x91B1, 0xE177},{0x91B2, 0xE178},{0x91B3, 0xE179},{0x91B4, 0xF5B7},
- {0x91B5, 0xF5B6},{0x91B6, 0xE17A},{0x91B7, 0xE17B},{0x91B8, 0xE17C},{0x91B9, 0xE17D},{0x91BA, 0xF5B8},{0x91BB, 0xE17E},{0x91BC, 0xE180},
- {0x91BD, 0xE181},{0x91BE, 0xE182},{0x91BF, 0xE183},{0x91C0, 0xE184},{0x91C1, 0xE185},{0x91C2, 0xE186},{0x91C3, 0xE187},{0x91C4, 0xE188},
- {0x91C5, 0xE189},{0x91C6, 0xE18A},{0x91C7, 0xB2C9},{0x91C8, 0xE18B},{0x91C9, 0xD3D4},{0x91CA, 0xCACD},{0x91CB, 0xE18C},{0x91CC, 0xC0EF},
- {0x91CD, 0xD6D8},{0x91CE, 0xD2B0},{0x91CF, 0xC1BF},{0x91D0, 0xE18D},{0x91D1, 0xBDF0},{0x91D2, 0xE18E},{0x91D3, 0xE18F},{0x91D4, 0xE190},
- {0x91D5, 0xE191},{0x91D6, 0xE192},{0x91D7, 0xE193},{0x91D8, 0xE194},{0x91D9, 0xE195},{0x91DA, 0xE196},{0x91DB, 0xE197},{0x91DC, 0xB8AA},
- {0x91DD, 0xE198},{0x91DE, 0xE199},{0x91DF, 0xE19A},{0x91E0, 0xE19B},{0x91E1, 0xE19C},{0x91E2, 0xE19D},{0x91E3, 0xE19E},{0x91E4, 0xE19F},
- {0x91E5, 0xE1A0},{0x91E6, 0xE240},{0x91E7, 0xE241},{0x91E8, 0xE242},{0x91E9, 0xE243},{0x91EA, 0xE244},{0x91EB, 0xE245},{0x91EC, 0xE246},
- {0x91ED, 0xE247},{0x91EE, 0xE248},{0x91EF, 0xE249},{0x91F0, 0xE24A},{0x91F1, 0xE24B},{0x91F2, 0xE24C},{0x91F3, 0xE24D},{0x91F4, 0xE24E},
- {0x91F5, 0xE24F},{0x91F6, 0xE250},{0x91F7, 0xE251},{0x91F8, 0xE252},{0x91F9, 0xE253},{0x91FA, 0xE254},{0x91FB, 0xE255},{0x91FC, 0xE256},
- {0x91FD, 0xE257},{0x91FE, 0xE258},{0x91FF, 0xE259},{0x9200, 0xE25A},{0x9201, 0xE25B},{0x9202, 0xE25C},{0x9203, 0xE25D},{0x9204, 0xE25E},
- {0x9205, 0xE25F},{0x9206, 0xE260},{0x9207, 0xE261},{0x9208, 0xE262},{0x9209, 0xE263},{0x920A, 0xE264},{0x920B, 0xE265},{0x920C, 0xE266},
- {0x920D, 0xE267},{0x920E, 0xE268},{0x920F, 0xE269},{0x9210, 0xE26A},{0x9211, 0xE26B},{0x9212, 0xE26C},{0x9213, 0xE26D},{0x9214, 0xE26E},
- {0x9215, 0xE26F},{0x9216, 0xE270},{0x9217, 0xE271},{0x9218, 0xE272},{0x9219, 0xE273},{0x921A, 0xE274},{0x921B, 0xE275},{0x921C, 0xE276},
- {0x921D, 0xE277},{0x921E, 0xE278},{0x921F, 0xE279},{0x9220, 0xE27A},{0x9221, 0xE27B},{0x9222, 0xE27C},{0x9223, 0xE27D},{0x9224, 0xE27E},
- {0x9225, 0xE280},{0x9226, 0xE281},{0x9227, 0xE282},{0x9228, 0xE283},{0x9229, 0xE284},{0x922A, 0xE285},{0x922B, 0xE286},{0x922C, 0xE287},
- {0x922D, 0xE288},{0x922E, 0xE289},{0x922F, 0xE28A},{0x9230, 0xE28B},{0x9231, 0xE28C},{0x9232, 0xE28D},{0x9233, 0xE28E},{0x9234, 0xE28F},
- {0x9235, 0xE290},{0x9236, 0xE291},{0x9237, 0xE292},{0x9238, 0xE293},{0x9239, 0xE294},{0x923A, 0xE295},{0x923B, 0xE296},{0x923C, 0xE297},
- {0x923D, 0xE298},{0x923E, 0xE299},{0x923F, 0xE29A},{0x9240, 0xE29B},{0x9241, 0xE29C},{0x9242, 0xE29D},{0x9243, 0xE29E},{0x9244, 0xE29F},
- {0x9245, 0xE2A0},{0x9246, 0xE340},{0x9247, 0xE341},{0x9248, 0xE342},{0x9249, 0xE343},{0x924A, 0xE344},{0x924B, 0xE345},{0x924C, 0xE346},
- {0x924D, 0xE347},{0x924E, 0xE348},{0x924F, 0xE349},{0x9250, 0xE34A},{0x9251, 0xE34B},{0x9252, 0xE34C},{0x9253, 0xE34D},{0x9254, 0xE34E},
- {0x9255, 0xE34F},{0x9256, 0xE350},{0x9257, 0xE351},{0x9258, 0xE352},{0x9259, 0xE353},{0x925A, 0xE354},{0x925B, 0xE355},{0x925C, 0xE356},
- {0x925D, 0xE357},{0x925E, 0xE358},{0x925F, 0xE359},{0x9260, 0xE35A},{0x9261, 0xE35B},{0x9262, 0xE35C},{0x9263, 0xE35D},{0x9264, 0xE35E},
- {0x9265, 0xE35F},{0x9266, 0xE360},{0x9267, 0xE361},{0x9268, 0xE362},{0x9269, 0xE363},{0x926A, 0xE364},{0x926B, 0xE365},{0x926C, 0xE366},
- {0x926D, 0xE367},{0x926E, 0xE368},{0x926F, 0xE369},{0x9270, 0xE36A},{0x9271, 0xE36B},{0x9272, 0xE36C},{0x9273, 0xE36D},{0x9274, 0xBCF8},
- {0x9275, 0xE36E},{0x9276, 0xE36F},{0x9277, 0xE370},{0x9278, 0xE371},{0x9279, 0xE372},{0x927A, 0xE373},{0x927B, 0xE374},{0x927C, 0xE375},
- {0x927D, 0xE376},{0x927E, 0xE377},{0x927F, 0xE378},{0x9280, 0xE379},{0x9281, 0xE37A},{0x9282, 0xE37B},{0x9283, 0xE37C},{0x9284, 0xE37D},
- {0x9285, 0xE37E},{0x9286, 0xE380},{0x9287, 0xE381},{0x9288, 0xE382},{0x9289, 0xE383},{0x928A, 0xE384},{0x928B, 0xE385},{0x928C, 0xE386},
- {0x928D, 0xE387},{0x928E, 0xF6C6},{0x928F, 0xE388},{0x9290, 0xE389},{0x9291, 0xE38A},{0x9292, 0xE38B},{0x9293, 0xE38C},{0x9294, 0xE38D},
- {0x9295, 0xE38E},{0x9296, 0xE38F},{0x9297, 0xE390},{0x9298, 0xE391},{0x9299, 0xE392},{0x929A, 0xE393},{0x929B, 0xE394},{0x929C, 0xE395},
- {0x929D, 0xE396},{0x929E, 0xE397},{0x929F, 0xE398},{0x92A0, 0xE399},{0x92A1, 0xE39A},{0x92A2, 0xE39B},{0x92A3, 0xE39C},{0x92A4, 0xE39D},
- {0x92A5, 0xE39E},{0x92A6, 0xE39F},{0x92A7, 0xE3A0},{0x92A8, 0xE440},{0x92A9, 0xE441},{0x92AA, 0xE442},{0x92AB, 0xE443},{0x92AC, 0xE444},
- {0x92AD, 0xE445},{0x92AE, 0xF6C7},{0x92AF, 0xE446},{0x92B0, 0xE447},{0x92B1, 0xE448},{0x92B2, 0xE449},{0x92B3, 0xE44A},{0x92B4, 0xE44B},
- {0x92B5, 0xE44C},{0x92B6, 0xE44D},{0x92B7, 0xE44E},{0x92B8, 0xE44F},{0x92B9, 0xE450},{0x92BA, 0xE451},{0x92BB, 0xE452},{0x92BC, 0xE453},
- {0x92BD, 0xE454},{0x92BE, 0xE455},{0x92BF, 0xE456},{0x92C0, 0xE457},{0x92C1, 0xE458},{0x92C2, 0xE459},{0x92C3, 0xE45A},{0x92C4, 0xE45B},
- {0x92C5, 0xE45C},{0x92C6, 0xE45D},{0x92C7, 0xE45E},{0x92C8, 0xF6C8},{0x92C9, 0xE45F},{0x92CA, 0xE460},{0x92CB, 0xE461},{0x92CC, 0xE462},
- {0x92CD, 0xE463},{0x92CE, 0xE464},{0x92CF, 0xE465},{0x92D0, 0xE466},{0x92D1, 0xE467},{0x92D2, 0xE468},{0x92D3, 0xE469},{0x92D4, 0xE46A},
- {0x92D5, 0xE46B},{0x92D6, 0xE46C},{0x92D7, 0xE46D},{0x92D8, 0xE46E},{0x92D9, 0xE46F},{0x92DA, 0xE470},{0x92DB, 0xE471},{0x92DC, 0xE472},
- {0x92DD, 0xE473},{0x92DE, 0xE474},{0x92DF, 0xE475},{0x92E0, 0xE476},{0x92E1, 0xE477},{0x92E2, 0xE478},{0x92E3, 0xE479},{0x92E4, 0xE47A},
- {0x92E5, 0xE47B},{0x92E6, 0xE47C},{0x92E7, 0xE47D},{0x92E8, 0xE47E},{0x92E9, 0xE480},{0x92EA, 0xE481},{0x92EB, 0xE482},{0x92EC, 0xE483},
- {0x92ED, 0xE484},{0x92EE, 0xE485},{0x92EF, 0xE486},{0x92F0, 0xE487},{0x92F1, 0xE488},{0x92F2, 0xE489},{0x92F3, 0xE48A},{0x92F4, 0xE48B},
- {0x92F5, 0xE48C},{0x92F6, 0xE48D},{0x92F7, 0xE48E},{0x92F8, 0xE48F},{0x92F9, 0xE490},{0x92FA, 0xE491},{0x92FB, 0xE492},{0x92FC, 0xE493},
- {0x92FD, 0xE494},{0x92FE, 0xE495},{0x92FF, 0xE496},{0x9300, 0xE497},{0x9301, 0xE498},{0x9302, 0xE499},{0x9303, 0xE49A},{0x9304, 0xE49B},
- {0x9305, 0xE49C},{0x9306, 0xE49D},{0x9307, 0xE49E},{0x9308, 0xE49F},{0x9309, 0xE4A0},{0x930A, 0xE540},{0x930B, 0xE541},{0x930C, 0xE542},
- {0x930D, 0xE543},{0x930E, 0xE544},{0x930F, 0xE545},{0x9310, 0xE546},{0x9311, 0xE547},{0x9312, 0xE548},{0x9313, 0xE549},{0x9314, 0xE54A},
- {0x9315, 0xE54B},{0x9316, 0xE54C},{0x9317, 0xE54D},{0x9318, 0xE54E},{0x9319, 0xE54F},{0x931A, 0xE550},{0x931B, 0xE551},{0x931C, 0xE552},
- {0x931D, 0xE553},{0x931E, 0xE554},{0x931F, 0xE555},{0x9320, 0xE556},{0x9321, 0xE557},{0x9322, 0xE558},{0x9323, 0xE559},{0x9324, 0xE55A},
- {0x9325, 0xE55B},{0x9326, 0xE55C},{0x9327, 0xE55D},{0x9328, 0xE55E},{0x9329, 0xE55F},{0x932A, 0xE560},{0x932B, 0xE561},{0x932C, 0xE562},
- {0x932D, 0xE563},{0x932E, 0xE564},{0x932F, 0xE565},{0x9330, 0xE566},{0x9331, 0xE567},{0x9332, 0xE568},{0x9333, 0xE569},{0x9334, 0xE56A},
- {0x9335, 0xE56B},{0x9336, 0xE56C},{0x9337, 0xE56D},{0x9338, 0xE56E},{0x9339, 0xE56F},{0x933A, 0xE570},{0x933B, 0xE571},{0x933C, 0xE572},
- {0x933D, 0xE573},{0x933E, 0xF6C9},{0x933F, 0xE574},{0x9340, 0xE575},{0x9341, 0xE576},{0x9342, 0xE577},{0x9343, 0xE578},{0x9344, 0xE579},
- {0x9345, 0xE57A},{0x9346, 0xE57B},{0x9347, 0xE57C},{0x9348, 0xE57D},{0x9349, 0xE57E},{0x934A, 0xE580},{0x934B, 0xE581},{0x934C, 0xE582},
- {0x934D, 0xE583},{0x934E, 0xE584},{0x934F, 0xE585},{0x9350, 0xE586},{0x9351, 0xE587},{0x9352, 0xE588},{0x9353, 0xE589},{0x9354, 0xE58A},
- {0x9355, 0xE58B},{0x9356, 0xE58C},{0x9357, 0xE58D},{0x9358, 0xE58E},{0x9359, 0xE58F},{0x935A, 0xE590},{0x935B, 0xE591},{0x935C, 0xE592},
- {0x935D, 0xE593},{0x935E, 0xE594},{0x935F, 0xE595},{0x9360, 0xE596},{0x9361, 0xE597},{0x9362, 0xE598},{0x9363, 0xE599},{0x9364, 0xE59A},
- {0x9365, 0xE59B},{0x9366, 0xE59C},{0x9367, 0xE59D},{0x9368, 0xE59E},{0x9369, 0xE59F},{0x936A, 0xF6CA},{0x936B, 0xE5A0},{0x936C, 0xE640},
- {0x936D, 0xE641},{0x936E, 0xE642},{0x936F, 0xE643},{0x9370, 0xE644},{0x9371, 0xE645},{0x9372, 0xE646},{0x9373, 0xE647},{0x9374, 0xE648},
- {0x9375, 0xE649},{0x9376, 0xE64A},{0x9377, 0xE64B},{0x9378, 0xE64C},{0x9379, 0xE64D},{0x937A, 0xE64E},{0x937B, 0xE64F},{0x937C, 0xE650},
- {0x937D, 0xE651},{0x937E, 0xE652},{0x937F, 0xE653},{0x9380, 0xE654},{0x9381, 0xE655},{0x9382, 0xE656},{0x9383, 0xE657},{0x9384, 0xE658},
- {0x9385, 0xE659},{0x9386, 0xE65A},{0x9387, 0xE65B},{0x9388, 0xE65C},{0x9389, 0xE65D},{0x938A, 0xE65E},{0x938B, 0xE65F},{0x938C, 0xE660},
- {0x938D, 0xE661},{0x938E, 0xE662},{0x938F, 0xF6CC},{0x9390, 0xE663},{0x9391, 0xE664},{0x9392, 0xE665},{0x9393, 0xE666},{0x9394, 0xE667},
- {0x9395, 0xE668},{0x9396, 0xE669},{0x9397, 0xE66A},{0x9398, 0xE66B},{0x9399, 0xE66C},{0x939A, 0xE66D},{0x939B, 0xE66E},{0x939C, 0xE66F},
- {0x939D, 0xE670},{0x939E, 0xE671},{0x939F, 0xE672},{0x93A0, 0xE673},{0x93A1, 0xE674},{0x93A2, 0xE675},{0x93A3, 0xE676},{0x93A4, 0xE677},
- {0x93A5, 0xE678},{0x93A6, 0xE679},{0x93A7, 0xE67A},{0x93A8, 0xE67B},{0x93A9, 0xE67C},{0x93AA, 0xE67D},{0x93AB, 0xE67E},{0x93AC, 0xE680},
- {0x93AD, 0xE681},{0x93AE, 0xE682},{0x93AF, 0xE683},{0x93B0, 0xE684},{0x93B1, 0xE685},{0x93B2, 0xE686},{0x93B3, 0xE687},{0x93B4, 0xE688},
- {0x93B5, 0xE689},{0x93B6, 0xE68A},{0x93B7, 0xE68B},{0x93B8, 0xE68C},{0x93B9, 0xE68D},{0x93BA, 0xE68E},{0x93BB, 0xE68F},{0x93BC, 0xE690},
- {0x93BD, 0xE691},{0x93BE, 0xE692},{0x93BF, 0xE693},{0x93C0, 0xE694},{0x93C1, 0xE695},{0x93C2, 0xE696},{0x93C3, 0xE697},{0x93C4, 0xE698},
- {0x93C5, 0xE699},{0x93C6, 0xE69A},{0x93C7, 0xE69B},{0x93C8, 0xE69C},{0x93C9, 0xE69D},{0x93CA, 0xF6CB},{0x93CB, 0xE69E},{0x93CC, 0xE69F},
- {0x93CD, 0xE6A0},{0x93CE, 0xE740},{0x93CF, 0xE741},{0x93D0, 0xE742},{0x93D1, 0xE743},{0x93D2, 0xE744},{0x93D3, 0xE745},{0x93D4, 0xE746},
- {0x93D5, 0xE747},{0x93D6, 0xF7E9},{0x93D7, 0xE748},{0x93D8, 0xE749},{0x93D9, 0xE74A},{0x93DA, 0xE74B},{0x93DB, 0xE74C},{0x93DC, 0xE74D},
- {0x93DD, 0xE74E},{0x93DE, 0xE74F},{0x93DF, 0xE750},{0x93E0, 0xE751},{0x93E1, 0xE752},{0x93E2, 0xE753},{0x93E3, 0xE754},{0x93E4, 0xE755},
- {0x93E5, 0xE756},{0x93E6, 0xE757},{0x93E7, 0xE758},{0x93E8, 0xE759},{0x93E9, 0xE75A},{0x93EA, 0xE75B},{0x93EB, 0xE75C},{0x93EC, 0xE75D},
- {0x93ED, 0xE75E},{0x93EE, 0xE75F},{0x93EF, 0xE760},{0x93F0, 0xE761},{0x93F1, 0xE762},{0x93F2, 0xE763},{0x93F3, 0xE764},{0x93F4, 0xE765},
- {0x93F5, 0xE766},{0x93F6, 0xE767},{0x93F7, 0xE768},{0x93F8, 0xE769},{0x93F9, 0xE76A},{0x93FA, 0xE76B},{0x93FB, 0xE76C},{0x93FC, 0xE76D},
- {0x93FD, 0xE76E},{0x93FE, 0xE76F},{0x93FF, 0xE770},{0x9400, 0xE771},{0x9401, 0xE772},{0x9402, 0xE773},{0x9403, 0xE774},{0x9404, 0xE775},
- {0x9405, 0xE776},{0x9406, 0xE777},{0x9407, 0xE778},{0x9408, 0xE779},{0x9409, 0xE77A},{0x940A, 0xE77B},{0x940B, 0xE77C},{0x940C, 0xE77D},
- {0x940D, 0xE77E},{0x940E, 0xE780},{0x940F, 0xE781},{0x9410, 0xE782},{0x9411, 0xE783},{0x9412, 0xE784},{0x9413, 0xE785},{0x9414, 0xE786},
- {0x9415, 0xE787},{0x9416, 0xE788},{0x9417, 0xE789},{0x9418, 0xE78A},{0x9419, 0xE78B},{0x941A, 0xE78C},{0x941B, 0xE78D},{0x941C, 0xE78E},
- {0x941D, 0xE78F},{0x941E, 0xE790},{0x941F, 0xE791},{0x9420, 0xE792},{0x9421, 0xE793},{0x9422, 0xE794},{0x9423, 0xE795},{0x9424, 0xE796},
- {0x9425, 0xE797},{0x9426, 0xE798},{0x9427, 0xE799},{0x9428, 0xE79A},{0x9429, 0xE79B},{0x942A, 0xE79C},{0x942B, 0xE79D},{0x942C, 0xE79E},
- {0x942D, 0xE79F},{0x942E, 0xE7A0},{0x942F, 0xE840},{0x9430, 0xE841},{0x9431, 0xE842},{0x9432, 0xE843},{0x9433, 0xE844},{0x9434, 0xE845},
- {0x9435, 0xE846},{0x9436, 0xE847},{0x9437, 0xE848},{0x9438, 0xE849},{0x9439, 0xE84A},{0x943A, 0xE84B},{0x943B, 0xE84C},{0x943C, 0xE84D},
- {0x943D, 0xE84E},{0x943E, 0xF6CD},{0x943F, 0xE84F},{0x9440, 0xE850},{0x9441, 0xE851},{0x9442, 0xE852},{0x9443, 0xE853},{0x9444, 0xE854},
- {0x9445, 0xE855},{0x9446, 0xE856},{0x9447, 0xE857},{0x9448, 0xE858},{0x9449, 0xE859},{0x944A, 0xE85A},{0x944B, 0xE85B},{0x944C, 0xE85C},
- {0x944D, 0xE85D},{0x944E, 0xE85E},{0x944F, 0xE85F},{0x9450, 0xE860},{0x9451, 0xE861},{0x9452, 0xE862},{0x9453, 0xE863},{0x9454, 0xE864},
- {0x9455, 0xE865},{0x9456, 0xE866},{0x9457, 0xE867},{0x9458, 0xE868},{0x9459, 0xE869},{0x945A, 0xE86A},{0x945B, 0xE86B},{0x945C, 0xE86C},
- {0x945D, 0xE86D},{0x945E, 0xE86E},{0x945F, 0xE86F},{0x9460, 0xE870},{0x9461, 0xE871},{0x9462, 0xE872},{0x9463, 0xE873},{0x9464, 0xE874},
- {0x9465, 0xE875},{0x9466, 0xE876},{0x9467, 0xE877},{0x9468, 0xE878},{0x9469, 0xE879},{0x946A, 0xE87A},{0x946B, 0xF6CE},{0x946C, 0xE87B},
- {0x946D, 0xE87C},{0x946E, 0xE87D},{0x946F, 0xE87E},{0x9470, 0xE880},{0x9471, 0xE881},{0x9472, 0xE882},{0x9473, 0xE883},{0x9474, 0xE884},
- {0x9475, 0xE885},{0x9476, 0xE886},{0x9477, 0xE887},{0x9478, 0xE888},{0x9479, 0xE889},{0x947A, 0xE88A},{0x947B, 0xE88B},{0x947C, 0xE88C},
- {0x947D, 0xE88D},{0x947E, 0xE88E},{0x947F, 0xE88F},{0x9480, 0xE890},{0x9481, 0xE891},{0x9482, 0xE892},{0x9483, 0xE893},{0x9484, 0xE894},
- {0x9485, 0xEEC4},{0x9486, 0xEEC5},{0x9487, 0xEEC6},{0x9488, 0xD5EB},{0x9489, 0xB6A4},{0x948A, 0xEEC8},{0x948B, 0xEEC7},{0x948C, 0xEEC9},
- {0x948D, 0xEECA},{0x948E, 0xC7A5},{0x948F, 0xEECB},{0x9490, 0xEECC},{0x9491, 0xE895},{0x9492, 0xB7B0},{0x9493, 0xB5F6},{0x9494, 0xEECD},
- {0x9495, 0xEECF},{0x9496, 0xE896},{0x9497, 0xEECE},{0x9498, 0xE897},{0x9499, 0xB8C6},{0x949A, 0xEED0},{0x949B, 0xEED1},{0x949C, 0xEED2},
- {0x949D, 0xB6DB},{0x949E, 0xB3AE},{0x949F, 0xD6D3},{0x94A0, 0xC4C6},{0x94A1, 0xB1B5},{0x94A2, 0xB8D6},{0x94A3, 0xEED3},{0x94A4, 0xEED4},
- {0x94A5, 0xD4BF},{0x94A6, 0xC7D5},{0x94A7, 0xBEFB},{0x94A8, 0xCED9},{0x94A9, 0xB9B3},{0x94AA, 0xEED6},{0x94AB, 0xEED5},{0x94AC, 0xEED8},
- {0x94AD, 0xEED7},{0x94AE, 0xC5A5},{0x94AF, 0xEED9},{0x94B0, 0xEEDA},{0x94B1, 0xC7AE},{0x94B2, 0xEEDB},{0x94B3, 0xC7AF},{0x94B4, 0xEEDC},
- {0x94B5, 0xB2A7},{0x94B6, 0xEEDD},{0x94B7, 0xEEDE},{0x94B8, 0xEEDF},{0x94B9, 0xEEE0},{0x94BA, 0xEEE1},{0x94BB, 0xD7EA},{0x94BC, 0xEEE2},
- {0x94BD, 0xEEE3},{0x94BE, 0xBCD8},{0x94BF, 0xEEE4},{0x94C0, 0xD3CB},{0x94C1, 0xCCFA},{0x94C2, 0xB2AC},{0x94C3, 0xC1E5},{0x94C4, 0xEEE5},
- {0x94C5, 0xC7A6},{0x94C6, 0xC3AD},{0x94C7, 0xE898},{0x94C8, 0xEEE6},{0x94C9, 0xEEE7},{0x94CA, 0xEEE8},{0x94CB, 0xEEE9},{0x94CC, 0xEEEA},
- {0x94CD, 0xEEEB},{0x94CE, 0xEEEC},{0x94CF, 0xE899},{0x94D0, 0xEEED},{0x94D1, 0xEEEE},{0x94D2, 0xEEEF},{0x94D3, 0xE89A},{0x94D4, 0xE89B},
- {0x94D5, 0xEEF0},{0x94D6, 0xEEF1},{0x94D7, 0xEEF2},{0x94D8, 0xEEF4},{0x94D9, 0xEEF3},{0x94DA, 0xE89C},{0x94DB, 0xEEF5},{0x94DC, 0xCDAD},
- {0x94DD, 0xC2C1},{0x94DE, 0xEEF6},{0x94DF, 0xEEF7},{0x94E0, 0xEEF8},{0x94E1, 0xD5A1},{0x94E2, 0xEEF9},{0x94E3, 0xCFB3},{0x94E4, 0xEEFA},
- {0x94E5, 0xEEFB},{0x94E6, 0xE89D},{0x94E7, 0xEEFC},{0x94E8, 0xEEFD},{0x94E9, 0xEFA1},{0x94EA, 0xEEFE},{0x94EB, 0xEFA2},{0x94EC, 0xB8F5},
- {0x94ED, 0xC3FA},{0x94EE, 0xEFA3},{0x94EF, 0xEFA4},{0x94F0, 0xBDC2},{0x94F1, 0xD2BF},{0x94F2, 0xB2F9},{0x94F3, 0xEFA5},{0x94F4, 0xEFA6},
- {0x94F5, 0xEFA7},{0x94F6, 0xD2F8},{0x94F7, 0xEFA8},{0x94F8, 0xD6FD},{0x94F9, 0xEFA9},{0x94FA, 0xC6CC},{0x94FB, 0xE89E},{0x94FC, 0xEFAA},
- {0x94FD, 0xEFAB},{0x94FE, 0xC1B4},{0x94FF, 0xEFAC},{0x9500, 0xCFFA},{0x9501, 0xCBF8},{0x9502, 0xEFAE},{0x9503, 0xEFAD},{0x9504, 0xB3FA},
- {0x9505, 0xB9F8},{0x9506, 0xEFAF},{0x9507, 0xEFB0},{0x9508, 0xD0E2},{0x9509, 0xEFB1},{0x950A, 0xEFB2},{0x950B, 0xB7E6},{0x950C, 0xD0BF},
- {0x950D, 0xEFB3},{0x950E, 0xEFB4},{0x950F, 0xEFB5},{0x9510, 0xC8F1},{0x9511, 0xCCE0},{0x9512, 0xEFB6},{0x9513, 0xEFB7},{0x9514, 0xEFB8},
- {0x9515, 0xEFB9},{0x9516, 0xEFBA},{0x9517, 0xD5E0},{0x9518, 0xEFBB},{0x9519, 0xB4ED},{0x951A, 0xC3AA},{0x951B, 0xEFBC},{0x951C, 0xE89F},
- {0x951D, 0xEFBD},{0x951E, 0xEFBE},{0x951F, 0xEFBF},{0x9520, 0xE8A0},{0x9521, 0xCEFD},{0x9522, 0xEFC0},{0x9523, 0xC2E0},{0x9524, 0xB4B8},
- {0x9525, 0xD7B6},{0x9526, 0xBDF5},{0x9527, 0xE940},{0x9528, 0xCFC7},{0x9529, 0xEFC3},{0x952A, 0xEFC1},{0x952B, 0xEFC2},{0x952C, 0xEFC4},
- {0x952D, 0xB6A7},{0x952E, 0xBCFC},{0x952F, 0xBEE2},{0x9530, 0xC3CC},{0x9531, 0xEFC5},{0x9532, 0xEFC6},{0x9533, 0xE941},{0x9534, 0xEFC7},
- {0x9535, 0xEFCF},{0x9536, 0xEFC8},{0x9537, 0xEFC9},{0x9538, 0xEFCA},{0x9539, 0xC7C2},{0x953A, 0xEFF1},{0x953B, 0xB6CD},{0x953C, 0xEFCB},
- {0x953D, 0xE942},{0x953E, 0xEFCC},{0x953F, 0xEFCD},{0x9540, 0xB6C6},{0x9541, 0xC3BE},{0x9542, 0xEFCE},{0x9543, 0xE943},{0x9544, 0xEFD0},
- {0x9545, 0xEFD1},{0x9546, 0xEFD2},{0x9547, 0xD5F2},{0x9548, 0xE944},{0x9549, 0xEFD3},{0x954A, 0xC4F7},{0x954B, 0xE945},{0x954C, 0xEFD4},
- {0x954D, 0xC4F8},{0x954E, 0xEFD5},{0x954F, 0xEFD6},{0x9550, 0xB8E4},{0x9551, 0xB0F7},{0x9552, 0xEFD7},{0x9553, 0xEFD8},{0x9554, 0xEFD9},
- {0x9555, 0xE946},{0x9556, 0xEFDA},{0x9557, 0xEFDB},{0x9558, 0xEFDC},{0x9559, 0xEFDD},{0x955A, 0xE947},{0x955B, 0xEFDE},{0x955C, 0xBEB5},
- {0x955D, 0xEFE1},{0x955E, 0xEFDF},{0x955F, 0xEFE0},{0x9560, 0xE948},{0x9561, 0xEFE2},{0x9562, 0xEFE3},{0x9563, 0xC1CD},{0x9564, 0xEFE4},
- {0x9565, 0xEFE5},{0x9566, 0xEFE6},{0x9567, 0xEFE7},{0x9568, 0xEFE8},{0x9569, 0xEFE9},{0x956A, 0xEFEA},{0x956B, 0xEFEB},{0x956C, 0xEFEC},
- {0x956D, 0xC0D8},{0x956E, 0xE949},{0x956F, 0xEFED},{0x9570, 0xC1AD},{0x9571, 0xEFEE},{0x9572, 0xEFEF},{0x9573, 0xEFF0},{0x9574, 0xE94A},
- {0x9575, 0xE94B},{0x9576, 0xCFE2},{0x9577, 0xE94C},{0x9578, 0xE94D},{0x9579, 0xE94E},{0x957A, 0xE94F},{0x957B, 0xE950},{0x957C, 0xE951},
- {0x957D, 0xE952},{0x957E, 0xE953},{0x957F, 0xB3A4},{0x9580, 0xE954},{0x9581, 0xE955},{0x9582, 0xE956},{0x9583, 0xE957},{0x9584, 0xE958},
- {0x9585, 0xE959},{0x9586, 0xE95A},{0x9587, 0xE95B},{0x9588, 0xE95C},{0x9589, 0xE95D},{0x958A, 0xE95E},{0x958B, 0xE95F},{0x958C, 0xE960},
- {0x958D, 0xE961},{0x958E, 0xE962},{0x958F, 0xE963},{0x9590, 0xE964},{0x9591, 0xE965},{0x9592, 0xE966},{0x9593, 0xE967},{0x9594, 0xE968},
- {0x9595, 0xE969},{0x9596, 0xE96A},{0x9597, 0xE96B},{0x9598, 0xE96C},{0x9599, 0xE96D},{0x959A, 0xE96E},{0x959B, 0xE96F},{0x959C, 0xE970},
- {0x959D, 0xE971},{0x959E, 0xE972},{0x959F, 0xE973},{0x95A0, 0xE974},{0x95A1, 0xE975},{0x95A2, 0xE976},{0x95A3, 0xE977},{0x95A4, 0xE978},
- {0x95A5, 0xE979},{0x95A6, 0xE97A},{0x95A7, 0xE97B},{0x95A8, 0xE97C},{0x95A9, 0xE97D},{0x95AA, 0xE97E},{0x95AB, 0xE980},{0x95AC, 0xE981},
- {0x95AD, 0xE982},{0x95AE, 0xE983},{0x95AF, 0xE984},{0x95B0, 0xE985},{0x95B1, 0xE986},{0x95B2, 0xE987},{0x95B3, 0xE988},{0x95B4, 0xE989},
- {0x95B5, 0xE98A},{0x95B6, 0xE98B},{0x95B7, 0xE98C},{0x95B8, 0xE98D},{0x95B9, 0xE98E},{0x95BA, 0xE98F},{0x95BB, 0xE990},{0x95BC, 0xE991},
- {0x95BD, 0xE992},{0x95BE, 0xE993},{0x95BF, 0xE994},{0x95C0, 0xE995},{0x95C1, 0xE996},{0x95C2, 0xE997},{0x95C3, 0xE998},{0x95C4, 0xE999},
- {0x95C5, 0xE99A},{0x95C6, 0xE99B},{0x95C7, 0xE99C},{0x95C8, 0xE99D},{0x95C9, 0xE99E},{0x95CA, 0xE99F},{0x95CB, 0xE9A0},{0x95CC, 0xEA40},
- {0x95CD, 0xEA41},{0x95CE, 0xEA42},{0x95CF, 0xEA43},{0x95D0, 0xEA44},{0x95D1, 0xEA45},{0x95D2, 0xEA46},{0x95D3, 0xEA47},{0x95D4, 0xEA48},
- {0x95D5, 0xEA49},{0x95D6, 0xEA4A},{0x95D7, 0xEA4B},{0x95D8, 0xEA4C},{0x95D9, 0xEA4D},{0x95DA, 0xEA4E},{0x95DB, 0xEA4F},{0x95DC, 0xEA50},
- {0x95DD, 0xEA51},{0x95DE, 0xEA52},{0x95DF, 0xEA53},{0x95E0, 0xEA54},{0x95E1, 0xEA55},{0x95E2, 0xEA56},{0x95E3, 0xEA57},{0x95E4, 0xEA58},
- {0x95E5, 0xEA59},{0x95E6, 0xEA5A},{0x95E7, 0xEA5B},{0x95E8, 0xC3C5},{0x95E9, 0xE3C5},{0x95EA, 0xC9C1},{0x95EB, 0xE3C6},{0x95EC, 0xEA5C},
- {0x95ED, 0xB1D5},{0x95EE, 0xCECA},{0x95EF, 0xB4B3},{0x95F0, 0xC8F2},{0x95F1, 0xE3C7},{0x95F2, 0xCFD0},{0x95F3, 0xE3C8},{0x95F4, 0xBCE4},
- {0x95F5, 0xE3C9},{0x95F6, 0xE3CA},{0x95F7, 0xC3C6},{0x95F8, 0xD5A2},{0x95F9, 0xC4D6},{0x95FA, 0xB9EB},{0x95FB, 0xCEC5},{0x95FC, 0xE3CB},
- {0x95FD, 0xC3F6},{0x95FE, 0xE3CC},{0x95FF, 0xEA5D},{0x9600, 0xB7A7},{0x9601, 0xB8F3},{0x9602, 0xBAD2},{0x9603, 0xE3CD},{0x9604, 0xE3CE},
- {0x9605, 0xD4C4},{0x9606, 0xE3CF},{0x9607, 0xEA5E},{0x9608, 0xE3D0},{0x9609, 0xD1CB},{0x960A, 0xE3D1},{0x960B, 0xE3D2},{0x960C, 0xE3D3},
- {0x960D, 0xE3D4},{0x960E, 0xD1D6},{0x960F, 0xE3D5},{0x9610, 0xB2FB},{0x9611, 0xC0BB},{0x9612, 0xE3D6},{0x9613, 0xEA5F},{0x9614, 0xC0AB},
- {0x9615, 0xE3D7},{0x9616, 0xE3D8},{0x9617, 0xE3D9},{0x9618, 0xEA60},{0x9619, 0xE3DA},{0x961A, 0xE3DB},{0x961B, 0xEA61},{0x961C, 0xB8B7},
- {0x961D, 0xDAE2},{0x961E, 0xEA62},{0x961F, 0xB6D3},{0x9620, 0xEA63},{0x9621, 0xDAE4},{0x9622, 0xDAE3},{0x9623, 0xEA64},{0x9624, 0xEA65},
- {0x9625, 0xEA66},{0x9626, 0xEA67},{0x9627, 0xEA68},{0x9628, 0xEA69},{0x9629, 0xEA6A},{0x962A, 0xDAE6},{0x962B, 0xEA6B},{0x962C, 0xEA6C},
- {0x962D, 0xEA6D},{0x962E, 0xC8EE},{0x962F, 0xEA6E},{0x9630, 0xEA6F},{0x9631, 0xDAE5},{0x9632, 0xB7C0},{0x9633, 0xD1F4},{0x9634, 0xD2F5},
- {0x9635, 0xD5F3},{0x9636, 0xBDD7},{0x9637, 0xEA70},{0x9638, 0xEA71},{0x9639, 0xEA72},{0x963A, 0xEA73},{0x963B, 0xD7E8},{0x963C, 0xDAE8},
- {0x963D, 0xDAE7},{0x963E, 0xEA74},{0x963F, 0xB0A2},{0x9640, 0xCDD3},{0x9641, 0xEA75},{0x9642, 0xDAE9},{0x9643, 0xEA76},{0x9644, 0xB8BD},
- {0x9645, 0xBCCA},{0x9646, 0xC2BD},{0x9647, 0xC2A4},{0x9648, 0xB3C2},{0x9649, 0xDAEA},{0x964A, 0xEA77},{0x964B, 0xC2AA},{0x964C, 0xC4B0},
- {0x964D, 0xBDB5},{0x964E, 0xEA78},{0x964F, 0xEA79},{0x9650, 0xCFDE},{0x9651, 0xEA7A},{0x9652, 0xEA7B},{0x9653, 0xEA7C},{0x9654, 0xDAEB},
- {0x9655, 0xC9C2},{0x9656, 0xEA7D},{0x9657, 0xEA7E},{0x9658, 0xEA80},{0x9659, 0xEA81},{0x965A, 0xEA82},{0x965B, 0xB1DD},{0x965C, 0xEA83},
- {0x965D, 0xEA84},{0x965E, 0xEA85},{0x965F, 0xDAEC},{0x9660, 0xEA86},{0x9661, 0xB6B8},{0x9662, 0xD4BA},{0x9663, 0xEA87},{0x9664, 0xB3FD},
- {0x9665, 0xEA88},{0x9666, 0xEA89},{0x9667, 0xDAED},{0x9668, 0xD4C9},{0x9669, 0xCFD5},{0x966A, 0xC5E3},{0x966B, 0xEA8A},{0x966C, 0xDAEE},
- {0x966D, 0xEA8B},{0x966E, 0xEA8C},{0x966F, 0xEA8D},{0x9670, 0xEA8E},{0x9671, 0xEA8F},{0x9672, 0xDAEF},{0x9673, 0xEA90},{0x9674, 0xDAF0},
- {0x9675, 0xC1EA},{0x9676, 0xCCD5},{0x9677, 0xCFDD},{0x9678, 0xEA91},{0x9679, 0xEA92},{0x967A, 0xEA93},{0x967B, 0xEA94},{0x967C, 0xEA95},
- {0x967D, 0xEA96},{0x967E, 0xEA97},{0x967F, 0xEA98},{0x9680, 0xEA99},{0x9681, 0xEA9A},{0x9682, 0xEA9B},{0x9683, 0xEA9C},{0x9684, 0xEA9D},
- {0x9685, 0xD3E7},{0x9686, 0xC2A1},{0x9687, 0xEA9E},{0x9688, 0xDAF1},{0x9689, 0xEA9F},{0x968A, 0xEAA0},{0x968B, 0xCBE5},{0x968C, 0xEB40},
- {0x968D, 0xDAF2},{0x968E, 0xEB41},{0x968F, 0xCBE6},{0x9690, 0xD2FE},{0x9691, 0xEB42},{0x9692, 0xEB43},{0x9693, 0xEB44},{0x9694, 0xB8F4},
- {0x9695, 0xEB45},{0x9696, 0xEB46},{0x9697, 0xDAF3},{0x9698, 0xB0AF},{0x9699, 0xCFB6},{0x969A, 0xEB47},{0x969B, 0xEB48},{0x969C, 0xD5CF},
- {0x969D, 0xEB49},{0x969E, 0xEB4A},{0x969F, 0xEB4B},{0x96A0, 0xEB4C},{0x96A1, 0xEB4D},{0x96A2, 0xEB4E},{0x96A3, 0xEB4F},{0x96A4, 0xEB50},
- {0x96A5, 0xEB51},{0x96A6, 0xEB52},{0x96A7, 0xCBED},{0x96A8, 0xEB53},{0x96A9, 0xEB54},{0x96AA, 0xEB55},{0x96AB, 0xEB56},{0x96AC, 0xEB57},
- {0x96AD, 0xEB58},{0x96AE, 0xEB59},{0x96AF, 0xEB5A},{0x96B0, 0xDAF4},{0x96B1, 0xEB5B},{0x96B2, 0xEB5C},{0x96B3, 0xE3C4},{0x96B4, 0xEB5D},
- {0x96B5, 0xEB5E},{0x96B6, 0xC1A5},{0x96B7, 0xEB5F},{0x96B8, 0xEB60},{0x96B9, 0xF6BF},{0x96BA, 0xEB61},{0x96BB, 0xEB62},{0x96BC, 0xF6C0},
- {0x96BD, 0xF6C1},{0x96BE, 0xC4D1},{0x96BF, 0xEB63},{0x96C0, 0xC8B8},{0x96C1, 0xD1E3},{0x96C2, 0xEB64},{0x96C3, 0xEB65},{0x96C4, 0xD0DB},
- {0x96C5, 0xD1C5},{0x96C6, 0xBCAF},{0x96C7, 0xB9CD},{0x96C8, 0xEB66},{0x96C9, 0xEFF4},{0x96CA, 0xEB67},{0x96CB, 0xEB68},{0x96CC, 0xB4C6},
- {0x96CD, 0xD3BA},{0x96CE, 0xF6C2},{0x96CF, 0xB3FB},{0x96D0, 0xEB69},{0x96D1, 0xEB6A},{0x96D2, 0xF6C3},{0x96D3, 0xEB6B},{0x96D4, 0xEB6C},
- {0x96D5, 0xB5F1},{0x96D6, 0xEB6D},{0x96D7, 0xEB6E},{0x96D8, 0xEB6F},{0x96D9, 0xEB70},{0x96DA, 0xEB71},{0x96DB, 0xEB72},{0x96DC, 0xEB73},
- {0x96DD, 0xEB74},{0x96DE, 0xEB75},{0x96DF, 0xEB76},{0x96E0, 0xF6C5},{0x96E1, 0xEB77},{0x96E2, 0xEB78},{0x96E3, 0xEB79},{0x96E4, 0xEB7A},
- {0x96E5, 0xEB7B},{0x96E6, 0xEB7C},{0x96E7, 0xEB7D},{0x96E8, 0xD3EA},{0x96E9, 0xF6A7},{0x96EA, 0xD1A9},{0x96EB, 0xEB7E},{0x96EC, 0xEB80},
- {0x96ED, 0xEB81},{0x96EE, 0xEB82},{0x96EF, 0xF6A9},{0x96F0, 0xEB83},{0x96F1, 0xEB84},{0x96F2, 0xEB85},{0x96F3, 0xF6A8},{0x96F4, 0xEB86},
- {0x96F5, 0xEB87},{0x96F6, 0xC1E3},{0x96F7, 0xC0D7},{0x96F8, 0xEB88},{0x96F9, 0xB1A2},{0x96FA, 0xEB89},{0x96FB, 0xEB8A},{0x96FC, 0xEB8B},
- {0x96FD, 0xEB8C},{0x96FE, 0xCEED},{0x96FF, 0xEB8D},{0x9700, 0xD0E8},{0x9701, 0xF6AB},{0x9702, 0xEB8E},{0x9703, 0xEB8F},{0x9704, 0xCFF6},
- {0x9705, 0xEB90},{0x9706, 0xF6AA},{0x9707, 0xD5F0},{0x9708, 0xF6AC},{0x9709, 0xC3B9},{0x970A, 0xEB91},{0x970B, 0xEB92},{0x970C, 0xEB93},
- {0x970D, 0xBBF4},{0x970E, 0xF6AE},{0x970F, 0xF6AD},{0x9710, 0xEB94},{0x9711, 0xEB95},{0x9712, 0xEB96},{0x9713, 0xC4DE},{0x9714, 0xEB97},
- {0x9715, 0xEB98},{0x9716, 0xC1D8},{0x9717, 0xEB99},{0x9718, 0xEB9A},{0x9719, 0xEB9B},{0x971A, 0xEB9C},{0x971B, 0xEB9D},{0x971C, 0xCBAA},
- {0x971D, 0xEB9E},{0x971E, 0xCFBC},{0x971F, 0xEB9F},{0x9720, 0xEBA0},{0x9721, 0xEC40},{0x9722, 0xEC41},{0x9723, 0xEC42},{0x9724, 0xEC43},
- {0x9725, 0xEC44},{0x9726, 0xEC45},{0x9727, 0xEC46},{0x9728, 0xEC47},{0x9729, 0xEC48},{0x972A, 0xF6AF},{0x972B, 0xEC49},{0x972C, 0xEC4A},
- {0x972D, 0xF6B0},{0x972E, 0xEC4B},{0x972F, 0xEC4C},{0x9730, 0xF6B1},{0x9731, 0xEC4D},{0x9732, 0xC2B6},{0x9733, 0xEC4E},{0x9734, 0xEC4F},
- {0x9735, 0xEC50},{0x9736, 0xEC51},{0x9737, 0xEC52},{0x9738, 0xB0D4},{0x9739, 0xC5F9},{0x973A, 0xEC53},{0x973B, 0xEC54},{0x973C, 0xEC55},
- {0x973D, 0xEC56},{0x973E, 0xF6B2},{0x973F, 0xEC57},{0x9740, 0xEC58},{0x9741, 0xEC59},{0x9742, 0xEC5A},{0x9743, 0xEC5B},{0x9744, 0xEC5C},
- {0x9745, 0xEC5D},{0x9746, 0xEC5E},{0x9747, 0xEC5F},{0x9748, 0xEC60},{0x9749, 0xEC61},{0x974A, 0xEC62},{0x974B, 0xEC63},{0x974C, 0xEC64},
- {0x974D, 0xEC65},{0x974E, 0xEC66},{0x974F, 0xEC67},{0x9750, 0xEC68},{0x9751, 0xEC69},{0x9752, 0xC7E0},{0x9753, 0xF6A6},{0x9754, 0xEC6A},
- {0x9755, 0xEC6B},{0x9756, 0xBEB8},{0x9757, 0xEC6C},{0x9758, 0xEC6D},{0x9759, 0xBEB2},{0x975A, 0xEC6E},{0x975B, 0xB5E5},{0x975C, 0xEC6F},
- {0x975D, 0xEC70},{0x975E, 0xB7C7},{0x975F, 0xEC71},{0x9760, 0xBFBF},{0x9761, 0xC3D2},{0x9762, 0xC3E6},{0x9763, 0xEC72},{0x9764, 0xEC73},
- {0x9765, 0xD8CC},{0x9766, 0xEC74},{0x9767, 0xEC75},{0x9768, 0xEC76},{0x9769, 0xB8EF},{0x976A, 0xEC77},{0x976B, 0xEC78},{0x976C, 0xEC79},
- {0x976D, 0xEC7A},{0x976E, 0xEC7B},{0x976F, 0xEC7C},{0x9770, 0xEC7D},{0x9771, 0xEC7E},{0x9772, 0xEC80},{0x9773, 0xBDF9},{0x9774, 0xD1A5},
- {0x9775, 0xEC81},{0x9776, 0xB0D0},{0x9777, 0xEC82},{0x9778, 0xEC83},{0x9779, 0xEC84},{0x977A, 0xEC85},{0x977B, 0xEC86},{0x977C, 0xF7B0},
- {0x977D, 0xEC87},{0x977E, 0xEC88},{0x977F, 0xEC89},{0x9780, 0xEC8A},{0x9781, 0xEC8B},{0x9782, 0xEC8C},{0x9783, 0xEC8D},{0x9784, 0xEC8E},
- {0x9785, 0xF7B1},{0x9786, 0xEC8F},{0x9787, 0xEC90},{0x9788, 0xEC91},{0x9789, 0xEC92},{0x978A, 0xEC93},{0x978B, 0xD0AC},{0x978C, 0xEC94},
- {0x978D, 0xB0B0},{0x978E, 0xEC95},{0x978F, 0xEC96},{0x9790, 0xEC97},{0x9791, 0xF7B2},{0x9792, 0xF7B3},{0x9793, 0xEC98},{0x9794, 0xF7B4},
- {0x9795, 0xEC99},{0x9796, 0xEC9A},{0x9797, 0xEC9B},{0x9798, 0xC7CA},{0x9799, 0xEC9C},{0x979A, 0xEC9D},{0x979B, 0xEC9E},{0x979C, 0xEC9F},
- {0x979D, 0xECA0},{0x979E, 0xED40},{0x979F, 0xED41},{0x97A0, 0xBECF},{0x97A1, 0xED42},{0x97A2, 0xED43},{0x97A3, 0xF7B7},{0x97A4, 0xED44},
- {0x97A5, 0xED45},{0x97A6, 0xED46},{0x97A7, 0xED47},{0x97A8, 0xED48},{0x97A9, 0xED49},{0x97AA, 0xED4A},{0x97AB, 0xF7B6},{0x97AC, 0xED4B},
- {0x97AD, 0xB1DE},{0x97AE, 0xED4C},{0x97AF, 0xF7B5},{0x97B0, 0xED4D},{0x97B1, 0xED4E},{0x97B2, 0xF7B8},{0x97B3, 0xED4F},{0x97B4, 0xF7B9},
- {0x97B5, 0xED50},{0x97B6, 0xED51},{0x97B7, 0xED52},{0x97B8, 0xED53},{0x97B9, 0xED54},{0x97BA, 0xED55},{0x97BB, 0xED56},{0x97BC, 0xED57},
- {0x97BD, 0xED58},{0x97BE, 0xED59},{0x97BF, 0xED5A},{0x97C0, 0xED5B},{0x97C1, 0xED5C},{0x97C2, 0xED5D},{0x97C3, 0xED5E},{0x97C4, 0xED5F},
- {0x97C5, 0xED60},{0x97C6, 0xED61},{0x97C7, 0xED62},{0x97C8, 0xED63},{0x97C9, 0xED64},{0x97CA, 0xED65},{0x97CB, 0xED66},{0x97CC, 0xED67},
- {0x97CD, 0xED68},{0x97CE, 0xED69},{0x97CF, 0xED6A},{0x97D0, 0xED6B},{0x97D1, 0xED6C},{0x97D2, 0xED6D},{0x97D3, 0xED6E},{0x97D4, 0xED6F},
- {0x97D5, 0xED70},{0x97D6, 0xED71},{0x97D7, 0xED72},{0x97D8, 0xED73},{0x97D9, 0xED74},{0x97DA, 0xED75},{0x97DB, 0xED76},{0x97DC, 0xED77},
- {0x97DD, 0xED78},{0x97DE, 0xED79},{0x97DF, 0xED7A},{0x97E0, 0xED7B},{0x97E1, 0xED7C},{0x97E2, 0xED7D},{0x97E3, 0xED7E},{0x97E4, 0xED80},
- {0x97E5, 0xED81},{0x97E6, 0xCEA4},{0x97E7, 0xC8CD},{0x97E8, 0xED82},{0x97E9, 0xBAAB},{0x97EA, 0xE8B8},{0x97EB, 0xE8B9},{0x97EC, 0xE8BA},
- {0x97ED, 0xBEC2},{0x97EE, 0xED83},{0x97EF, 0xED84},{0x97F0, 0xED85},{0x97F1, 0xED86},{0x97F2, 0xED87},{0x97F3, 0xD2F4},{0x97F4, 0xED88},
- {0x97F5, 0xD4CF},{0x97F6, 0xC9D8},{0x97F7, 0xED89},{0x97F8, 0xED8A},{0x97F9, 0xED8B},{0x97FA, 0xED8C},{0x97FB, 0xED8D},{0x97FC, 0xED8E},
- {0x97FD, 0xED8F},{0x97FE, 0xED90},{0x97FF, 0xED91},{0x9800, 0xED92},{0x9801, 0xED93},{0x9802, 0xED94},{0x9803, 0xED95},{0x9804, 0xED96},
- {0x9805, 0xED97},{0x9806, 0xED98},{0x9807, 0xED99},{0x9808, 0xED9A},{0x9809, 0xED9B},{0x980A, 0xED9C},{0x980B, 0xED9D},{0x980C, 0xED9E},
- {0x980D, 0xED9F},{0x980E, 0xEDA0},{0x980F, 0xEE40},{0x9810, 0xEE41},{0x9811, 0xEE42},{0x9812, 0xEE43},{0x9813, 0xEE44},{0x9814, 0xEE45},
- {0x9815, 0xEE46},{0x9816, 0xEE47},{0x9817, 0xEE48},{0x9818, 0xEE49},{0x9819, 0xEE4A},{0x981A, 0xEE4B},{0x981B, 0xEE4C},{0x981C, 0xEE4D},
- {0x981D, 0xEE4E},{0x981E, 0xEE4F},{0x981F, 0xEE50},{0x9820, 0xEE51},{0x9821, 0xEE52},{0x9822, 0xEE53},{0x9823, 0xEE54},{0x9824, 0xEE55},
- {0x9825, 0xEE56},{0x9826, 0xEE57},{0x9827, 0xEE58},{0x9828, 0xEE59},{0x9829, 0xEE5A},{0x982A, 0xEE5B},{0x982B, 0xEE5C},{0x982C, 0xEE5D},
- {0x982D, 0xEE5E},{0x982E, 0xEE5F},{0x982F, 0xEE60},{0x9830, 0xEE61},{0x9831, 0xEE62},{0x9832, 0xEE63},{0x9833, 0xEE64},{0x9834, 0xEE65},
- {0x9835, 0xEE66},{0x9836, 0xEE67},{0x9837, 0xEE68},{0x9838, 0xEE69},{0x9839, 0xEE6A},{0x983A, 0xEE6B},{0x983B, 0xEE6C},{0x983C, 0xEE6D},
- {0x983D, 0xEE6E},{0x983E, 0xEE6F},{0x983F, 0xEE70},{0x9840, 0xEE71},{0x9841, 0xEE72},{0x9842, 0xEE73},{0x9843, 0xEE74},{0x9844, 0xEE75},
- {0x9845, 0xEE76},{0x9846, 0xEE77},{0x9847, 0xEE78},{0x9848, 0xEE79},{0x9849, 0xEE7A},{0x984A, 0xEE7B},{0x984B, 0xEE7C},{0x984C, 0xEE7D},
- {0x984D, 0xEE7E},{0x984E, 0xEE80},{0x984F, 0xEE81},{0x9850, 0xEE82},{0x9851, 0xEE83},{0x9852, 0xEE84},{0x9853, 0xEE85},{0x9854, 0xEE86},
- {0x9855, 0xEE87},{0x9856, 0xEE88},{0x9857, 0xEE89},{0x9858, 0xEE8A},{0x9859, 0xEE8B},{0x985A, 0xEE8C},{0x985B, 0xEE8D},{0x985C, 0xEE8E},
- {0x985D, 0xEE8F},{0x985E, 0xEE90},{0x985F, 0xEE91},{0x9860, 0xEE92},{0x9861, 0xEE93},{0x9862, 0xEE94},{0x9863, 0xEE95},{0x9864, 0xEE96},
- {0x9865, 0xEE97},{0x9866, 0xEE98},{0x9867, 0xEE99},{0x9868, 0xEE9A},{0x9869, 0xEE9B},{0x986A, 0xEE9C},{0x986B, 0xEE9D},{0x986C, 0xEE9E},
- {0x986D, 0xEE9F},{0x986E, 0xEEA0},{0x986F, 0xEF40},{0x9870, 0xEF41},{0x9871, 0xEF42},{0x9872, 0xEF43},{0x9873, 0xEF44},{0x9874, 0xEF45},
- {0x9875, 0xD2B3},{0x9876, 0xB6A5},{0x9877, 0xC7EA},{0x9878, 0xF1FC},{0x9879, 0xCFEE},{0x987A, 0xCBB3},{0x987B, 0xD0EB},{0x987C, 0xE7EF},
- {0x987D, 0xCDE7},{0x987E, 0xB9CB},{0x987F, 0xB6D9},{0x9880, 0xF1FD},{0x9881, 0xB0E4},{0x9882, 0xCBCC},{0x9883, 0xF1FE},{0x9884, 0xD4A4},
- {0x9885, 0xC2AD},{0x9886, 0xC1EC},{0x9887, 0xC6C4},{0x9888, 0xBEB1},{0x9889, 0xF2A1},{0x988A, 0xBCD5},{0x988B, 0xEF46},{0x988C, 0xF2A2},
- {0x988D, 0xF2A3},{0x988E, 0xEF47},{0x988F, 0xF2A4},{0x9890, 0xD2C3},{0x9891, 0xC6B5},{0x9892, 0xEF48},{0x9893, 0xCDC7},{0x9894, 0xF2A5},
- {0x9895, 0xEF49},{0x9896, 0xD3B1},{0x9897, 0xBFC5},{0x9898, 0xCCE2},{0x9899, 0xEF4A},{0x989A, 0xF2A6},{0x989B, 0xF2A7},{0x989C, 0xD1D5},
- {0x989D, 0xB6EE},{0x989E, 0xF2A8},{0x989F, 0xF2A9},{0x98A0, 0xB5DF},{0x98A1, 0xF2AA},{0x98A2, 0xF2AB},{0x98A3, 0xEF4B},{0x98A4, 0xB2FC},
- {0x98A5, 0xF2AC},{0x98A6, 0xF2AD},{0x98A7, 0xC8A7},{0x98A8, 0xEF4C},{0x98A9, 0xEF4D},{0x98AA, 0xEF4E},{0x98AB, 0xEF4F},{0x98AC, 0xEF50},
- {0x98AD, 0xEF51},{0x98AE, 0xEF52},{0x98AF, 0xEF53},{0x98B0, 0xEF54},{0x98B1, 0xEF55},{0x98B2, 0xEF56},{0x98B3, 0xEF57},{0x98B4, 0xEF58},
- {0x98B5, 0xEF59},{0x98B6, 0xEF5A},{0x98B7, 0xEF5B},{0x98B8, 0xEF5C},{0x98B9, 0xEF5D},{0x98BA, 0xEF5E},{0x98BB, 0xEF5F},{0x98BC, 0xEF60},
- {0x98BD, 0xEF61},{0x98BE, 0xEF62},{0x98BF, 0xEF63},{0x98C0, 0xEF64},{0x98C1, 0xEF65},{0x98C2, 0xEF66},{0x98C3, 0xEF67},{0x98C4, 0xEF68},
- {0x98C5, 0xEF69},{0x98C6, 0xEF6A},{0x98C7, 0xEF6B},{0x98C8, 0xEF6C},{0x98C9, 0xEF6D},{0x98CA, 0xEF6E},{0x98CB, 0xEF6F},{0x98CC, 0xEF70},
- {0x98CD, 0xEF71},{0x98CE, 0xB7E7},{0x98CF, 0xEF72},{0x98D0, 0xEF73},{0x98D1, 0xECA9},{0x98D2, 0xECAA},{0x98D3, 0xECAB},{0x98D4, 0xEF74},
- {0x98D5, 0xECAC},{0x98D6, 0xEF75},{0x98D7, 0xEF76},{0x98D8, 0xC6AE},{0x98D9, 0xECAD},{0x98DA, 0xECAE},{0x98DB, 0xEF77},{0x98DC, 0xEF78},
- {0x98DD, 0xEF79},{0x98DE, 0xB7C9},{0x98DF, 0xCAB3},{0x98E0, 0xEF7A},{0x98E1, 0xEF7B},{0x98E2, 0xEF7C},{0x98E3, 0xEF7D},{0x98E4, 0xEF7E},
- {0x98E5, 0xEF80},{0x98E6, 0xEF81},{0x98E7, 0xE2B8},{0x98E8, 0xF7CF},{0x98E9, 0xEF82},{0x98EA, 0xEF83},{0x98EB, 0xEF84},{0x98EC, 0xEF85},
- {0x98ED, 0xEF86},{0x98EE, 0xEF87},{0x98EF, 0xEF88},{0x98F0, 0xEF89},{0x98F1, 0xEF8A},{0x98F2, 0xEF8B},{0x98F3, 0xEF8C},{0x98F4, 0xEF8D},
- {0x98F5, 0xEF8E},{0x98F6, 0xEF8F},{0x98F7, 0xEF90},{0x98F8, 0xEF91},{0x98F9, 0xEF92},{0x98FA, 0xEF93},{0x98FB, 0xEF94},{0x98FC, 0xEF95},
- {0x98FD, 0xEF96},{0x98FE, 0xEF97},{0x98FF, 0xEF98},{0x9900, 0xEF99},{0x9901, 0xEF9A},{0x9902, 0xEF9B},{0x9903, 0xEF9C},{0x9904, 0xEF9D},
- {0x9905, 0xEF9E},{0x9906, 0xEF9F},{0x9907, 0xEFA0},{0x9908, 0xF040},{0x9909, 0xF041},{0x990A, 0xF042},{0x990B, 0xF043},{0x990C, 0xF044},
- {0x990D, 0xF7D0},{0x990E, 0xF045},{0x990F, 0xF046},{0x9910, 0xB2CD},{0x9911, 0xF047},{0x9912, 0xF048},{0x9913, 0xF049},{0x9914, 0xF04A},
- {0x9915, 0xF04B},{0x9916, 0xF04C},{0x9917, 0xF04D},{0x9918, 0xF04E},{0x9919, 0xF04F},{0x991A, 0xF050},{0x991B, 0xF051},{0x991C, 0xF052},
- {0x991D, 0xF053},{0x991E, 0xF054},{0x991F, 0xF055},{0x9920, 0xF056},{0x9921, 0xF057},{0x9922, 0xF058},{0x9923, 0xF059},{0x9924, 0xF05A},
- {0x9925, 0xF05B},{0x9926, 0xF05C},{0x9927, 0xF05D},{0x9928, 0xF05E},{0x9929, 0xF05F},{0x992A, 0xF060},{0x992B, 0xF061},{0x992C, 0xF062},
- {0x992D, 0xF063},{0x992E, 0xF7D1},{0x992F, 0xF064},{0x9930, 0xF065},{0x9931, 0xF066},{0x9932, 0xF067},{0x9933, 0xF068},{0x9934, 0xF069},
- {0x9935, 0xF06A},{0x9936, 0xF06B},{0x9937, 0xF06C},{0x9938, 0xF06D},{0x9939, 0xF06E},{0x993A, 0xF06F},{0x993B, 0xF070},{0x993C, 0xF071},
- {0x993D, 0xF072},{0x993E, 0xF073},{0x993F, 0xF074},{0x9940, 0xF075},{0x9941, 0xF076},{0x9942, 0xF077},{0x9943, 0xF078},{0x9944, 0xF079},
- {0x9945, 0xF07A},{0x9946, 0xF07B},{0x9947, 0xF07C},{0x9948, 0xF07D},{0x9949, 0xF07E},{0x994A, 0xF080},{0x994B, 0xF081},{0x994C, 0xF082},
- {0x994D, 0xF083},{0x994E, 0xF084},{0x994F, 0xF085},{0x9950, 0xF086},{0x9951, 0xF087},{0x9952, 0xF088},{0x9953, 0xF089},{0x9954, 0xF7D3},
- {0x9955, 0xF7D2},{0x9956, 0xF08A},{0x9957, 0xF08B},{0x9958, 0xF08C},{0x9959, 0xF08D},{0x995A, 0xF08E},{0x995B, 0xF08F},{0x995C, 0xF090},
- {0x995D, 0xF091},{0x995E, 0xF092},{0x995F, 0xF093},{0x9960, 0xF094},{0x9961, 0xF095},{0x9962, 0xF096},{0x9963, 0xE2BB},{0x9964, 0xF097},
- {0x9965, 0xBCA2},{0x9966, 0xF098},{0x9967, 0xE2BC},{0x9968, 0xE2BD},{0x9969, 0xE2BE},{0x996A, 0xE2BF},{0x996B, 0xE2C0},{0x996C, 0xE2C1},
- {0x996D, 0xB7B9},{0x996E, 0xD2FB},{0x996F, 0xBDA4},{0x9970, 0xCACE},{0x9971, 0xB1A5},{0x9972, 0xCBC7},{0x9973, 0xF099},{0x9974, 0xE2C2},
- {0x9975, 0xB6FC},{0x9976, 0xC8C4},{0x9977, 0xE2C3},{0x9978, 0xF09A},{0x9979, 0xF09B},{0x997A, 0xBDC8},{0x997B, 0xF09C},{0x997C, 0xB1FD},
- {0x997D, 0xE2C4},{0x997E, 0xF09D},{0x997F, 0xB6F6},{0x9980, 0xE2C5},{0x9981, 0xC4D9},{0x9982, 0xF09E},{0x9983, 0xF09F},{0x9984, 0xE2C6},
- {0x9985, 0xCFDA},{0x9986, 0xB9DD},{0x9987, 0xE2C7},{0x9988, 0xC0A1},{0x9989, 0xF0A0},{0x998A, 0xE2C8},{0x998B, 0xB2F6},{0x998C, 0xF140},
- {0x998D, 0xE2C9},{0x998E, 0xF141},{0x998F, 0xC1F3},{0x9990, 0xE2CA},{0x9991, 0xE2CB},{0x9992, 0xC2F8},{0x9993, 0xE2CC},{0x9994, 0xE2CD},
- {0x9995, 0xE2CE},{0x9996, 0xCAD7},{0x9997, 0xD8B8},{0x9998, 0xD9E5},{0x9999, 0xCFE3},{0x999A, 0xF142},{0x999B, 0xF143},{0x999C, 0xF144},
- {0x999D, 0xF145},{0x999E, 0xF146},{0x999F, 0xF147},{0x99A0, 0xF148},{0x99A1, 0xF149},{0x99A2, 0xF14A},{0x99A3, 0xF14B},{0x99A4, 0xF14C},
- {0x99A5, 0xF0A5},{0x99A6, 0xF14D},{0x99A7, 0xF14E},{0x99A8, 0xDCB0},{0x99A9, 0xF14F},{0x99AA, 0xF150},{0x99AB, 0xF151},{0x99AC, 0xF152},
- {0x99AD, 0xF153},{0x99AE, 0xF154},{0x99AF, 0xF155},{0x99B0, 0xF156},{0x99B1, 0xF157},{0x99B2, 0xF158},{0x99B3, 0xF159},{0x99B4, 0xF15A},
- {0x99B5, 0xF15B},{0x99B6, 0xF15C},{0x99B7, 0xF15D},{0x99B8, 0xF15E},{0x99B9, 0xF15F},{0x99BA, 0xF160},{0x99BB, 0xF161},{0x99BC, 0xF162},
- {0x99BD, 0xF163},{0x99BE, 0xF164},{0x99BF, 0xF165},{0x99C0, 0xF166},{0x99C1, 0xF167},{0x99C2, 0xF168},{0x99C3, 0xF169},{0x99C4, 0xF16A},
- {0x99C5, 0xF16B},{0x99C6, 0xF16C},{0x99C7, 0xF16D},{0x99C8, 0xF16E},{0x99C9, 0xF16F},{0x99CA, 0xF170},{0x99CB, 0xF171},{0x99CC, 0xF172},
- {0x99CD, 0xF173},{0x99CE, 0xF174},{0x99CF, 0xF175},{0x99D0, 0xF176},{0x99D1, 0xF177},{0x99D2, 0xF178},{0x99D3, 0xF179},{0x99D4, 0xF17A},
- {0x99D5, 0xF17B},{0x99D6, 0xF17C},{0x99D7, 0xF17D},{0x99D8, 0xF17E},{0x99D9, 0xF180},{0x99DA, 0xF181},{0x99DB, 0xF182},{0x99DC, 0xF183},
- {0x99DD, 0xF184},{0x99DE, 0xF185},{0x99DF, 0xF186},{0x99E0, 0xF187},{0x99E1, 0xF188},{0x99E2, 0xF189},{0x99E3, 0xF18A},{0x99E4, 0xF18B},
- {0x99E5, 0xF18C},{0x99E6, 0xF18D},{0x99E7, 0xF18E},{0x99E8, 0xF18F},{0x99E9, 0xF190},{0x99EA, 0xF191},{0x99EB, 0xF192},{0x99EC, 0xF193},
- {0x99ED, 0xF194},{0x99EE, 0xF195},{0x99EF, 0xF196},{0x99F0, 0xF197},{0x99F1, 0xF198},{0x99F2, 0xF199},{0x99F3, 0xF19A},{0x99F4, 0xF19B},
- {0x99F5, 0xF19C},{0x99F6, 0xF19D},{0x99F7, 0xF19E},{0x99F8, 0xF19F},{0x99F9, 0xF1A0},{0x99FA, 0xF240},{0x99FB, 0xF241},{0x99FC, 0xF242},
- {0x99FD, 0xF243},{0x99FE, 0xF244},{0x99FF, 0xF245},{0x9A00, 0xF246},{0x9A01, 0xF247},{0x9A02, 0xF248},{0x9A03, 0xF249},{0x9A04, 0xF24A},
- {0x9A05, 0xF24B},{0x9A06, 0xF24C},{0x9A07, 0xF24D},{0x9A08, 0xF24E},{0x9A09, 0xF24F},{0x9A0A, 0xF250},{0x9A0B, 0xF251},{0x9A0C, 0xF252},
- {0x9A0D, 0xF253},{0x9A0E, 0xF254},{0x9A0F, 0xF255},{0x9A10, 0xF256},{0x9A11, 0xF257},{0x9A12, 0xF258},{0x9A13, 0xF259},{0x9A14, 0xF25A},
- {0x9A15, 0xF25B},{0x9A16, 0xF25C},{0x9A17, 0xF25D},{0x9A18, 0xF25E},{0x9A19, 0xF25F},{0x9A1A, 0xF260},{0x9A1B, 0xF261},{0x9A1C, 0xF262},
- {0x9A1D, 0xF263},{0x9A1E, 0xF264},{0x9A1F, 0xF265},{0x9A20, 0xF266},{0x9A21, 0xF267},{0x9A22, 0xF268},{0x9A23, 0xF269},{0x9A24, 0xF26A},
- {0x9A25, 0xF26B},{0x9A26, 0xF26C},{0x9A27, 0xF26D},{0x9A28, 0xF26E},{0x9A29, 0xF26F},{0x9A2A, 0xF270},{0x9A2B, 0xF271},{0x9A2C, 0xF272},
- {0x9A2D, 0xF273},{0x9A2E, 0xF274},{0x9A2F, 0xF275},{0x9A30, 0xF276},{0x9A31, 0xF277},{0x9A32, 0xF278},{0x9A33, 0xF279},{0x9A34, 0xF27A},
- {0x9A35, 0xF27B},{0x9A36, 0xF27C},{0x9A37, 0xF27D},{0x9A38, 0xF27E},{0x9A39, 0xF280},{0x9A3A, 0xF281},{0x9A3B, 0xF282},{0x9A3C, 0xF283},
- {0x9A3D, 0xF284},{0x9A3E, 0xF285},{0x9A3F, 0xF286},{0x9A40, 0xF287},{0x9A41, 0xF288},{0x9A42, 0xF289},{0x9A43, 0xF28A},{0x9A44, 0xF28B},
- {0x9A45, 0xF28C},{0x9A46, 0xF28D},{0x9A47, 0xF28E},{0x9A48, 0xF28F},{0x9A49, 0xF290},{0x9A4A, 0xF291},{0x9A4B, 0xF292},{0x9A4C, 0xF293},
- {0x9A4D, 0xF294},{0x9A4E, 0xF295},{0x9A4F, 0xF296},{0x9A50, 0xF297},{0x9A51, 0xF298},{0x9A52, 0xF299},{0x9A53, 0xF29A},{0x9A54, 0xF29B},
- {0x9A55, 0xF29C},{0x9A56, 0xF29D},{0x9A57, 0xF29E},{0x9A58, 0xF29F},{0x9A59, 0xF2A0},{0x9A5A, 0xF340},{0x9A5B, 0xF341},{0x9A5C, 0xF342},
- {0x9A5D, 0xF343},{0x9A5E, 0xF344},{0x9A5F, 0xF345},{0x9A60, 0xF346},{0x9A61, 0xF347},{0x9A62, 0xF348},{0x9A63, 0xF349},{0x9A64, 0xF34A},
- {0x9A65, 0xF34B},{0x9A66, 0xF34C},{0x9A67, 0xF34D},{0x9A68, 0xF34E},{0x9A69, 0xF34F},{0x9A6A, 0xF350},{0x9A6B, 0xF351},{0x9A6C, 0xC2ED},
- {0x9A6D, 0xD4A6},{0x9A6E, 0xCDD4},{0x9A6F, 0xD1B1},{0x9A70, 0xB3DB},{0x9A71, 0xC7FD},{0x9A72, 0xF352},{0x9A73, 0xB2B5},{0x9A74, 0xC2BF},
- {0x9A75, 0xE6E0},{0x9A76, 0xCABB},{0x9A77, 0xE6E1},{0x9A78, 0xE6E2},{0x9A79, 0xBED4},{0x9A7A, 0xE6E3},{0x9A7B, 0xD7A4},{0x9A7C, 0xCDD5},
- {0x9A7D, 0xE6E5},{0x9A7E, 0xBCDD},{0x9A7F, 0xE6E4},{0x9A80, 0xE6E6},{0x9A81, 0xE6E7},{0x9A82, 0xC2EE},{0x9A83, 0xF353},{0x9A84, 0xBDBE},
- {0x9A85, 0xE6E8},{0x9A86, 0xC2E6},{0x9A87, 0xBAA7},{0x9A88, 0xE6E9},{0x9A89, 0xF354},{0x9A8A, 0xE6EA},{0x9A8B, 0xB3D2},{0x9A8C, 0xD1E9},
- {0x9A8D, 0xF355},{0x9A8E, 0xF356},{0x9A8F, 0xBFA5},{0x9A90, 0xE6EB},{0x9A91, 0xC6EF},{0x9A92, 0xE6EC},{0x9A93, 0xE6ED},{0x9A94, 0xF357},
- {0x9A95, 0xF358},{0x9A96, 0xE6EE},{0x9A97, 0xC6AD},{0x9A98, 0xE6EF},{0x9A99, 0xF359},{0x9A9A, 0xC9A7},{0x9A9B, 0xE6F0},{0x9A9C, 0xE6F1},
- {0x9A9D, 0xE6F2},{0x9A9E, 0xE5B9},{0x9A9F, 0xE6F3},{0x9AA0, 0xE6F4},{0x9AA1, 0xC2E2},{0x9AA2, 0xE6F5},{0x9AA3, 0xE6F6},{0x9AA4, 0xD6E8},
- {0x9AA5, 0xE6F7},{0x9AA6, 0xF35A},{0x9AA7, 0xE6F8},{0x9AA8, 0xB9C7},{0x9AA9, 0xF35B},{0x9AAA, 0xF35C},{0x9AAB, 0xF35D},{0x9AAC, 0xF35E},
- {0x9AAD, 0xF35F},{0x9AAE, 0xF360},{0x9AAF, 0xF361},{0x9AB0, 0xF7BB},{0x9AB1, 0xF7BA},{0x9AB2, 0xF362},{0x9AB3, 0xF363},{0x9AB4, 0xF364},
- {0x9AB5, 0xF365},{0x9AB6, 0xF7BE},{0x9AB7, 0xF7BC},{0x9AB8, 0xBAA1},{0x9AB9, 0xF366},{0x9ABA, 0xF7BF},{0x9ABB, 0xF367},{0x9ABC, 0xF7C0},
- {0x9ABD, 0xF368},{0x9ABE, 0xF369},{0x9ABF, 0xF36A},{0x9AC0, 0xF7C2},{0x9AC1, 0xF7C1},{0x9AC2, 0xF7C4},{0x9AC3, 0xF36B},{0x9AC4, 0xF36C},
- {0x9AC5, 0xF7C3},{0x9AC6, 0xF36D},{0x9AC7, 0xF36E},{0x9AC8, 0xF36F},{0x9AC9, 0xF370},{0x9ACA, 0xF371},{0x9ACB, 0xF7C5},{0x9ACC, 0xF7C6},
- {0x9ACD, 0xF372},{0x9ACE, 0xF373},{0x9ACF, 0xF374},{0x9AD0, 0xF375},{0x9AD1, 0xF7C7},{0x9AD2, 0xF376},{0x9AD3, 0xCBE8},{0x9AD4, 0xF377},
- {0x9AD5, 0xF378},{0x9AD6, 0xF379},{0x9AD7, 0xF37A},{0x9AD8, 0xB8DF},{0x9AD9, 0xF37B},{0x9ADA, 0xF37C},{0x9ADB, 0xF37D},{0x9ADC, 0xF37E},
- {0x9ADD, 0xF380},{0x9ADE, 0xF381},{0x9ADF, 0xF7D4},{0x9AE0, 0xF382},{0x9AE1, 0xF7D5},{0x9AE2, 0xF383},{0x9AE3, 0xF384},{0x9AE4, 0xF385},
- {0x9AE5, 0xF386},{0x9AE6, 0xF7D6},{0x9AE7, 0xF387},{0x9AE8, 0xF388},{0x9AE9, 0xF389},{0x9AEA, 0xF38A},{0x9AEB, 0xF7D8},{0x9AEC, 0xF38B},
- {0x9AED, 0xF7DA},{0x9AEE, 0xF38C},{0x9AEF, 0xF7D7},{0x9AF0, 0xF38D},{0x9AF1, 0xF38E},{0x9AF2, 0xF38F},{0x9AF3, 0xF390},{0x9AF4, 0xF391},
- {0x9AF5, 0xF392},{0x9AF6, 0xF393},{0x9AF7, 0xF394},{0x9AF8, 0xF395},{0x9AF9, 0xF7DB},{0x9AFA, 0xF396},{0x9AFB, 0xF7D9},{0x9AFC, 0xF397},
- {0x9AFD, 0xF398},{0x9AFE, 0xF399},{0x9AFF, 0xF39A},{0x9B00, 0xF39B},{0x9B01, 0xF39C},{0x9B02, 0xF39D},{0x9B03, 0xD7D7},{0x9B04, 0xF39E},
- {0x9B05, 0xF39F},{0x9B06, 0xF3A0},{0x9B07, 0xF440},{0x9B08, 0xF7DC},{0x9B09, 0xF441},{0x9B0A, 0xF442},{0x9B0B, 0xF443},{0x9B0C, 0xF444},
- {0x9B0D, 0xF445},{0x9B0E, 0xF446},{0x9B0F, 0xF7DD},{0x9B10, 0xF447},{0x9B11, 0xF448},{0x9B12, 0xF449},{0x9B13, 0xF7DE},{0x9B14, 0xF44A},
- {0x9B15, 0xF44B},{0x9B16, 0xF44C},{0x9B17, 0xF44D},{0x9B18, 0xF44E},{0x9B19, 0xF44F},{0x9B1A, 0xF450},{0x9B1B, 0xF451},{0x9B1C, 0xF452},
- {0x9B1D, 0xF453},{0x9B1E, 0xF454},{0x9B1F, 0xF7DF},{0x9B20, 0xF455},{0x9B21, 0xF456},{0x9B22, 0xF457},{0x9B23, 0xF7E0},{0x9B24, 0xF458},
- {0x9B25, 0xF459},{0x9B26, 0xF45A},{0x9B27, 0xF45B},{0x9B28, 0xF45C},{0x9B29, 0xF45D},{0x9B2A, 0xF45E},{0x9B2B, 0xF45F},{0x9B2C, 0xF460},
- {0x9B2D, 0xF461},{0x9B2E, 0xF462},{0x9B2F, 0xDBCB},{0x9B30, 0xF463},{0x9B31, 0xF464},{0x9B32, 0xD8AA},{0x9B33, 0xF465},{0x9B34, 0xF466},
- {0x9B35, 0xF467},{0x9B36, 0xF468},{0x9B37, 0xF469},{0x9B38, 0xF46A},{0x9B39, 0xF46B},{0x9B3A, 0xF46C},{0x9B3B, 0xE5F7},{0x9B3C, 0xB9ED},
- {0x9B3D, 0xF46D},{0x9B3E, 0xF46E},{0x9B3F, 0xF46F},{0x9B40, 0xF470},{0x9B41, 0xBFFD},{0x9B42, 0xBBEA},{0x9B43, 0xF7C9},{0x9B44, 0xC6C7},
- {0x9B45, 0xF7C8},{0x9B46, 0xF471},{0x9B47, 0xF7CA},{0x9B48, 0xF7CC},{0x9B49, 0xF7CB},{0x9B4A, 0xF472},{0x9B4B, 0xF473},{0x9B4C, 0xF474},
- {0x9B4D, 0xF7CD},{0x9B4E, 0xF475},{0x9B4F, 0xCEBA},{0x9B50, 0xF476},{0x9B51, 0xF7CE},{0x9B52, 0xF477},{0x9B53, 0xF478},{0x9B54, 0xC4A7},
- {0x9B55, 0xF479},{0x9B56, 0xF47A},{0x9B57, 0xF47B},{0x9B58, 0xF47C},{0x9B59, 0xF47D},{0x9B5A, 0xF47E},{0x9B5B, 0xF480},{0x9B5C, 0xF481},
- {0x9B5D, 0xF482},{0x9B5E, 0xF483},{0x9B5F, 0xF484},{0x9B60, 0xF485},{0x9B61, 0xF486},{0x9B62, 0xF487},{0x9B63, 0xF488},{0x9B64, 0xF489},
- {0x9B65, 0xF48A},{0x9B66, 0xF48B},{0x9B67, 0xF48C},{0x9B68, 0xF48D},{0x9B69, 0xF48E},{0x9B6A, 0xF48F},{0x9B6B, 0xF490},{0x9B6C, 0xF491},
- {0x9B6D, 0xF492},{0x9B6E, 0xF493},{0x9B6F, 0xF494},{0x9B70, 0xF495},{0x9B71, 0xF496},{0x9B72, 0xF497},{0x9B73, 0xF498},{0x9B74, 0xF499},
- {0x9B75, 0xF49A},{0x9B76, 0xF49B},{0x9B77, 0xF49C},{0x9B78, 0xF49D},{0x9B79, 0xF49E},{0x9B7A, 0xF49F},{0x9B7B, 0xF4A0},{0x9B7C, 0xF540},
- {0x9B7D, 0xF541},{0x9B7E, 0xF542},{0x9B7F, 0xF543},{0x9B80, 0xF544},{0x9B81, 0xF545},{0x9B82, 0xF546},{0x9B83, 0xF547},{0x9B84, 0xF548},
- {0x9B85, 0xF549},{0x9B86, 0xF54A},{0x9B87, 0xF54B},{0x9B88, 0xF54C},{0x9B89, 0xF54D},{0x9B8A, 0xF54E},{0x9B8B, 0xF54F},{0x9B8C, 0xF550},
- {0x9B8D, 0xF551},{0x9B8E, 0xF552},{0x9B8F, 0xF553},{0x9B90, 0xF554},{0x9B91, 0xF555},{0x9B92, 0xF556},{0x9B93, 0xF557},{0x9B94, 0xF558},
- {0x9B95, 0xF559},{0x9B96, 0xF55A},{0x9B97, 0xF55B},{0x9B98, 0xF55C},{0x9B99, 0xF55D},{0x9B9A, 0xF55E},{0x9B9B, 0xF55F},{0x9B9C, 0xF560},
- {0x9B9D, 0xF561},{0x9B9E, 0xF562},{0x9B9F, 0xF563},{0x9BA0, 0xF564},{0x9BA1, 0xF565},{0x9BA2, 0xF566},{0x9BA3, 0xF567},{0x9BA4, 0xF568},
- {0x9BA5, 0xF569},{0x9BA6, 0xF56A},{0x9BA7, 0xF56B},{0x9BA8, 0xF56C},{0x9BA9, 0xF56D},{0x9BAA, 0xF56E},{0x9BAB, 0xF56F},{0x9BAC, 0xF570},
- {0x9BAD, 0xF571},{0x9BAE, 0xF572},{0x9BAF, 0xF573},{0x9BB0, 0xF574},{0x9BB1, 0xF575},{0x9BB2, 0xF576},{0x9BB3, 0xF577},{0x9BB4, 0xF578},
- {0x9BB5, 0xF579},{0x9BB6, 0xF57A},{0x9BB7, 0xF57B},{0x9BB8, 0xF57C},{0x9BB9, 0xF57D},{0x9BBA, 0xF57E},{0x9BBB, 0xF580},{0x9BBC, 0xF581},
- {0x9BBD, 0xF582},{0x9BBE, 0xF583},{0x9BBF, 0xF584},{0x9BC0, 0xF585},{0x9BC1, 0xF586},{0x9BC2, 0xF587},{0x9BC3, 0xF588},{0x9BC4, 0xF589},
- {0x9BC5, 0xF58A},{0x9BC6, 0xF58B},{0x9BC7, 0xF58C},{0x9BC8, 0xF58D},{0x9BC9, 0xF58E},{0x9BCA, 0xF58F},{0x9BCB, 0xF590},{0x9BCC, 0xF591},
- {0x9BCD, 0xF592},{0x9BCE, 0xF593},{0x9BCF, 0xF594},{0x9BD0, 0xF595},{0x9BD1, 0xF596},{0x9BD2, 0xF597},{0x9BD3, 0xF598},{0x9BD4, 0xF599},
- {0x9BD5, 0xF59A},{0x9BD6, 0xF59B},{0x9BD7, 0xF59C},{0x9BD8, 0xF59D},{0x9BD9, 0xF59E},{0x9BDA, 0xF59F},{0x9BDB, 0xF5A0},{0x9BDC, 0xF640},
- {0x9BDD, 0xF641},{0x9BDE, 0xF642},{0x9BDF, 0xF643},{0x9BE0, 0xF644},{0x9BE1, 0xF645},{0x9BE2, 0xF646},{0x9BE3, 0xF647},{0x9BE4, 0xF648},
- {0x9BE5, 0xF649},{0x9BE6, 0xF64A},{0x9BE7, 0xF64B},{0x9BE8, 0xF64C},{0x9BE9, 0xF64D},{0x9BEA, 0xF64E},{0x9BEB, 0xF64F},{0x9BEC, 0xF650},
- {0x9BED, 0xF651},{0x9BEE, 0xF652},{0x9BEF, 0xF653},{0x9BF0, 0xF654},{0x9BF1, 0xF655},{0x9BF2, 0xF656},{0x9BF3, 0xF657},{0x9BF4, 0xF658},
- {0x9BF5, 0xF659},{0x9BF6, 0xF65A},{0x9BF7, 0xF65B},{0x9BF8, 0xF65C},{0x9BF9, 0xF65D},{0x9BFA, 0xF65E},{0x9BFB, 0xF65F},{0x9BFC, 0xF660},
- {0x9BFD, 0xF661},{0x9BFE, 0xF662},{0x9BFF, 0xF663},{0x9C00, 0xF664},{0x9C01, 0xF665},{0x9C02, 0xF666},{0x9C03, 0xF667},{0x9C04, 0xF668},
- {0x9C05, 0xF669},{0x9C06, 0xF66A},{0x9C07, 0xF66B},{0x9C08, 0xF66C},{0x9C09, 0xF66D},{0x9C0A, 0xF66E},{0x9C0B, 0xF66F},{0x9C0C, 0xF670},
- {0x9C0D, 0xF671},{0x9C0E, 0xF672},{0x9C0F, 0xF673},{0x9C10, 0xF674},{0x9C11, 0xF675},{0x9C12, 0xF676},{0x9C13, 0xF677},{0x9C14, 0xF678},
- {0x9C15, 0xF679},{0x9C16, 0xF67A},{0x9C17, 0xF67B},{0x9C18, 0xF67C},{0x9C19, 0xF67D},{0x9C1A, 0xF67E},{0x9C1B, 0xF680},{0x9C1C, 0xF681},
- {0x9C1D, 0xF682},{0x9C1E, 0xF683},{0x9C1F, 0xF684},{0x9C20, 0xF685},{0x9C21, 0xF686},{0x9C22, 0xF687},{0x9C23, 0xF688},{0x9C24, 0xF689},
- {0x9C25, 0xF68A},{0x9C26, 0xF68B},{0x9C27, 0xF68C},{0x9C28, 0xF68D},{0x9C29, 0xF68E},{0x9C2A, 0xF68F},{0x9C2B, 0xF690},{0x9C2C, 0xF691},
- {0x9C2D, 0xF692},{0x9C2E, 0xF693},{0x9C2F, 0xF694},{0x9C30, 0xF695},{0x9C31, 0xF696},{0x9C32, 0xF697},{0x9C33, 0xF698},{0x9C34, 0xF699},
- {0x9C35, 0xF69A},{0x9C36, 0xF69B},{0x9C37, 0xF69C},{0x9C38, 0xF69D},{0x9C39, 0xF69E},{0x9C3A, 0xF69F},{0x9C3B, 0xF6A0},{0x9C3C, 0xF740},
- {0x9C3D, 0xF741},{0x9C3E, 0xF742},{0x9C3F, 0xF743},{0x9C40, 0xF744},{0x9C41, 0xF745},{0x9C42, 0xF746},{0x9C43, 0xF747},{0x9C44, 0xF748},
- {0x9C45, 0xF749},{0x9C46, 0xF74A},{0x9C47, 0xF74B},{0x9C48, 0xF74C},{0x9C49, 0xF74D},{0x9C4A, 0xF74E},{0x9C4B, 0xF74F},{0x9C4C, 0xF750},
- {0x9C4D, 0xF751},{0x9C4E, 0xF752},{0x9C4F, 0xF753},{0x9C50, 0xF754},{0x9C51, 0xF755},{0x9C52, 0xF756},{0x9C53, 0xF757},{0x9C54, 0xF758},
- {0x9C55, 0xF759},{0x9C56, 0xF75A},{0x9C57, 0xF75B},{0x9C58, 0xF75C},{0x9C59, 0xF75D},{0x9C5A, 0xF75E},{0x9C5B, 0xF75F},{0x9C5C, 0xF760},
- {0x9C5D, 0xF761},{0x9C5E, 0xF762},{0x9C5F, 0xF763},{0x9C60, 0xF764},{0x9C61, 0xF765},{0x9C62, 0xF766},{0x9C63, 0xF767},{0x9C64, 0xF768},
- {0x9C65, 0xF769},{0x9C66, 0xF76A},{0x9C67, 0xF76B},{0x9C68, 0xF76C},{0x9C69, 0xF76D},{0x9C6A, 0xF76E},{0x9C6B, 0xF76F},{0x9C6C, 0xF770},
- {0x9C6D, 0xF771},{0x9C6E, 0xF772},{0x9C6F, 0xF773},{0x9C70, 0xF774},{0x9C71, 0xF775},{0x9C72, 0xF776},{0x9C73, 0xF777},{0x9C74, 0xF778},
- {0x9C75, 0xF779},{0x9C76, 0xF77A},{0x9C77, 0xF77B},{0x9C78, 0xF77C},{0x9C79, 0xF77D},{0x9C7A, 0xF77E},{0x9C7B, 0xF780},{0x9C7C, 0xD3E3},
- {0x9C7D, 0xF781},{0x9C7E, 0xF782},{0x9C7F, 0xF6CF},{0x9C80, 0xF783},{0x9C81, 0xC2B3},{0x9C82, 0xF6D0},{0x9C83, 0xF784},{0x9C84, 0xF785},
- {0x9C85, 0xF6D1},{0x9C86, 0xF6D2},{0x9C87, 0xF6D3},{0x9C88, 0xF6D4},{0x9C89, 0xF786},{0x9C8A, 0xF787},{0x9C8B, 0xF6D6},{0x9C8C, 0xF788},
- {0x9C8D, 0xB1AB},{0x9C8E, 0xF6D7},{0x9C8F, 0xF789},{0x9C90, 0xF6D8},{0x9C91, 0xF6D9},{0x9C92, 0xF6DA},{0x9C93, 0xF78A},{0x9C94, 0xF6DB},
- {0x9C95, 0xF6DC},{0x9C96, 0xF78B},{0x9C97, 0xF78C},{0x9C98, 0xF78D},{0x9C99, 0xF78E},{0x9C9A, 0xF6DD},{0x9C9B, 0xF6DE},{0x9C9C, 0xCFCA},
- {0x9C9D, 0xF78F},{0x9C9E, 0xF6DF},{0x9C9F, 0xF6E0},{0x9CA0, 0xF6E1},{0x9CA1, 0xF6E2},{0x9CA2, 0xF6E3},{0x9CA3, 0xF6E4},{0x9CA4, 0xC0F0},
- {0x9CA5, 0xF6E5},{0x9CA6, 0xF6E6},{0x9CA7, 0xF6E7},{0x9CA8, 0xF6E8},{0x9CA9, 0xF6E9},{0x9CAA, 0xF790},{0x9CAB, 0xF6EA},{0x9CAC, 0xF791},
- {0x9CAD, 0xF6EB},{0x9CAE, 0xF6EC},{0x9CAF, 0xF792},{0x9CB0, 0xF6ED},{0x9CB1, 0xF6EE},{0x9CB2, 0xF6EF},{0x9CB3, 0xF6F0},{0x9CB4, 0xF6F1},
- {0x9CB5, 0xF6F2},{0x9CB6, 0xF6F3},{0x9CB7, 0xF6F4},{0x9CB8, 0xBEA8},{0x9CB9, 0xF793},{0x9CBA, 0xF6F5},{0x9CBB, 0xF6F6},{0x9CBC, 0xF6F7},
- {0x9CBD, 0xF6F8},{0x9CBE, 0xF794},{0x9CBF, 0xF795},{0x9CC0, 0xF796},{0x9CC1, 0xF797},{0x9CC2, 0xF798},{0x9CC3, 0xC8FA},{0x9CC4, 0xF6F9},
- {0x9CC5, 0xF6FA},{0x9CC6, 0xF6FB},{0x9CC7, 0xF6FC},{0x9CC8, 0xF799},{0x9CC9, 0xF79A},{0x9CCA, 0xF6FD},{0x9CCB, 0xF6FE},{0x9CCC, 0xF7A1},
- {0x9CCD, 0xF7A2},{0x9CCE, 0xF7A3},{0x9CCF, 0xF7A4},{0x9CD0, 0xF7A5},{0x9CD1, 0xF79B},{0x9CD2, 0xF79C},{0x9CD3, 0xF7A6},{0x9CD4, 0xF7A7},
- {0x9CD5, 0xF7A8},{0x9CD6, 0xB1EE},{0x9CD7, 0xF7A9},{0x9CD8, 0xF7AA},{0x9CD9, 0xF7AB},{0x9CDA, 0xF79D},{0x9CDB, 0xF79E},{0x9CDC, 0xF7AC},
- {0x9CDD, 0xF7AD},{0x9CDE, 0xC1DB},{0x9CDF, 0xF7AE},{0x9CE0, 0xF79F},{0x9CE1, 0xF7A0},{0x9CE2, 0xF7AF},{0x9CE3, 0xF840},{0x9CE4, 0xF841},
- {0x9CE5, 0xF842},{0x9CE6, 0xF843},{0x9CE7, 0xF844},{0x9CE8, 0xF845},{0x9CE9, 0xF846},{0x9CEA, 0xF847},{0x9CEB, 0xF848},{0x9CEC, 0xF849},
- {0x9CED, 0xF84A},{0x9CEE, 0xF84B},{0x9CEF, 0xF84C},{0x9CF0, 0xF84D},{0x9CF1, 0xF84E},{0x9CF2, 0xF84F},{0x9CF3, 0xF850},{0x9CF4, 0xF851},
- {0x9CF5, 0xF852},{0x9CF6, 0xF853},{0x9CF7, 0xF854},{0x9CF8, 0xF855},{0x9CF9, 0xF856},{0x9CFA, 0xF857},{0x9CFB, 0xF858},{0x9CFC, 0xF859},
- {0x9CFD, 0xF85A},{0x9CFE, 0xF85B},{0x9CFF, 0xF85C},{0x9D00, 0xF85D},{0x9D01, 0xF85E},{0x9D02, 0xF85F},{0x9D03, 0xF860},{0x9D04, 0xF861},
- {0x9D05, 0xF862},{0x9D06, 0xF863},{0x9D07, 0xF864},{0x9D08, 0xF865},{0x9D09, 0xF866},{0x9D0A, 0xF867},{0x9D0B, 0xF868},{0x9D0C, 0xF869},
- {0x9D0D, 0xF86A},{0x9D0E, 0xF86B},{0x9D0F, 0xF86C},{0x9D10, 0xF86D},{0x9D11, 0xF86E},{0x9D12, 0xF86F},{0x9D13, 0xF870},{0x9D14, 0xF871},
- {0x9D15, 0xF872},{0x9D16, 0xF873},{0x9D17, 0xF874},{0x9D18, 0xF875},{0x9D19, 0xF876},{0x9D1A, 0xF877},{0x9D1B, 0xF878},{0x9D1C, 0xF879},
- {0x9D1D, 0xF87A},{0x9D1E, 0xF87B},{0x9D1F, 0xF87C},{0x9D20, 0xF87D},{0x9D21, 0xF87E},{0x9D22, 0xF880},{0x9D23, 0xF881},{0x9D24, 0xF882},
- {0x9D25, 0xF883},{0x9D26, 0xF884},{0x9D27, 0xF885},{0x9D28, 0xF886},{0x9D29, 0xF887},{0x9D2A, 0xF888},{0x9D2B, 0xF889},{0x9D2C, 0xF88A},
- {0x9D2D, 0xF88B},{0x9D2E, 0xF88C},{0x9D2F, 0xF88D},{0x9D30, 0xF88E},{0x9D31, 0xF88F},{0x9D32, 0xF890},{0x9D33, 0xF891},{0x9D34, 0xF892},
- {0x9D35, 0xF893},{0x9D36, 0xF894},{0x9D37, 0xF895},{0x9D38, 0xF896},{0x9D39, 0xF897},{0x9D3A, 0xF898},{0x9D3B, 0xF899},{0x9D3C, 0xF89A},
- {0x9D3D, 0xF89B},{0x9D3E, 0xF89C},{0x9D3F, 0xF89D},{0x9D40, 0xF89E},{0x9D41, 0xF89F},{0x9D42, 0xF8A0},{0x9D43, 0xF940},{0x9D44, 0xF941},
- {0x9D45, 0xF942},{0x9D46, 0xF943},{0x9D47, 0xF944},{0x9D48, 0xF945},{0x9D49, 0xF946},{0x9D4A, 0xF947},{0x9D4B, 0xF948},{0x9D4C, 0xF949},
- {0x9D4D, 0xF94A},{0x9D4E, 0xF94B},{0x9D4F, 0xF94C},{0x9D50, 0xF94D},{0x9D51, 0xF94E},{0x9D52, 0xF94F},{0x9D53, 0xF950},{0x9D54, 0xF951},
- {0x9D55, 0xF952},{0x9D56, 0xF953},{0x9D57, 0xF954},{0x9D58, 0xF955},{0x9D59, 0xF956},{0x9D5A, 0xF957},{0x9D5B, 0xF958},{0x9D5C, 0xF959},
- {0x9D5D, 0xF95A},{0x9D5E, 0xF95B},{0x9D5F, 0xF95C},{0x9D60, 0xF95D},{0x9D61, 0xF95E},{0x9D62, 0xF95F},{0x9D63, 0xF960},{0x9D64, 0xF961},
- {0x9D65, 0xF962},{0x9D66, 0xF963},{0x9D67, 0xF964},{0x9D68, 0xF965},{0x9D69, 0xF966},{0x9D6A, 0xF967},{0x9D6B, 0xF968},{0x9D6C, 0xF969},
- {0x9D6D, 0xF96A},{0x9D6E, 0xF96B},{0x9D6F, 0xF96C},{0x9D70, 0xF96D},{0x9D71, 0xF96E},{0x9D72, 0xF96F},{0x9D73, 0xF970},{0x9D74, 0xF971},
- {0x9D75, 0xF972},{0x9D76, 0xF973},{0x9D77, 0xF974},{0x9D78, 0xF975},{0x9D79, 0xF976},{0x9D7A, 0xF977},{0x9D7B, 0xF978},{0x9D7C, 0xF979},
- {0x9D7D, 0xF97A},{0x9D7E, 0xF97B},{0x9D7F, 0xF97C},{0x9D80, 0xF97D},{0x9D81, 0xF97E},{0x9D82, 0xF980},{0x9D83, 0xF981},{0x9D84, 0xF982},
- {0x9D85, 0xF983},{0x9D86, 0xF984},{0x9D87, 0xF985},{0x9D88, 0xF986},{0x9D89, 0xF987},{0x9D8A, 0xF988},{0x9D8B, 0xF989},{0x9D8C, 0xF98A},
- {0x9D8D, 0xF98B},{0x9D8E, 0xF98C},{0x9D8F, 0xF98D},{0x9D90, 0xF98E},{0x9D91, 0xF98F},{0x9D92, 0xF990},{0x9D93, 0xF991},{0x9D94, 0xF992},
- {0x9D95, 0xF993},{0x9D96, 0xF994},{0x9D97, 0xF995},{0x9D98, 0xF996},{0x9D99, 0xF997},{0x9D9A, 0xF998},{0x9D9B, 0xF999},{0x9D9C, 0xF99A},
- {0x9D9D, 0xF99B},{0x9D9E, 0xF99C},{0x9D9F, 0xF99D},{0x9DA0, 0xF99E},{0x9DA1, 0xF99F},{0x9DA2, 0xF9A0},{0x9DA3, 0xFA40},{0x9DA4, 0xFA41},
- {0x9DA5, 0xFA42},{0x9DA6, 0xFA43},{0x9DA7, 0xFA44},{0x9DA8, 0xFA45},{0x9DA9, 0xFA46},{0x9DAA, 0xFA47},{0x9DAB, 0xFA48},{0x9DAC, 0xFA49},
- {0x9DAD, 0xFA4A},{0x9DAE, 0xFA4B},{0x9DAF, 0xFA4C},{0x9DB0, 0xFA4D},{0x9DB1, 0xFA4E},{0x9DB2, 0xFA4F},{0x9DB3, 0xFA50},{0x9DB4, 0xFA51},
- {0x9DB5, 0xFA52},{0x9DB6, 0xFA53},{0x9DB7, 0xFA54},{0x9DB8, 0xFA55},{0x9DB9, 0xFA56},{0x9DBA, 0xFA57},{0x9DBB, 0xFA58},{0x9DBC, 0xFA59},
- {0x9DBD, 0xFA5A},{0x9DBE, 0xFA5B},{0x9DBF, 0xFA5C},{0x9DC0, 0xFA5D},{0x9DC1, 0xFA5E},{0x9DC2, 0xFA5F},{0x9DC3, 0xFA60},{0x9DC4, 0xFA61},
- {0x9DC5, 0xFA62},{0x9DC6, 0xFA63},{0x9DC7, 0xFA64},{0x9DC8, 0xFA65},{0x9DC9, 0xFA66},{0x9DCA, 0xFA67},{0x9DCB, 0xFA68},{0x9DCC, 0xFA69},
- {0x9DCD, 0xFA6A},{0x9DCE, 0xFA6B},{0x9DCF, 0xFA6C},{0x9DD0, 0xFA6D},{0x9DD1, 0xFA6E},{0x9DD2, 0xFA6F},{0x9DD3, 0xFA70},{0x9DD4, 0xFA71},
- {0x9DD5, 0xFA72},{0x9DD6, 0xFA73},{0x9DD7, 0xFA74},{0x9DD8, 0xFA75},{0x9DD9, 0xFA76},{0x9DDA, 0xFA77},{0x9DDB, 0xFA78},{0x9DDC, 0xFA79},
- {0x9DDD, 0xFA7A},{0x9DDE, 0xFA7B},{0x9DDF, 0xFA7C},{0x9DE0, 0xFA7D},{0x9DE1, 0xFA7E},{0x9DE2, 0xFA80},{0x9DE3, 0xFA81},{0x9DE4, 0xFA82},
- {0x9DE5, 0xFA83},{0x9DE6, 0xFA84},{0x9DE7, 0xFA85},{0x9DE8, 0xFA86},{0x9DE9, 0xFA87},{0x9DEA, 0xFA88},{0x9DEB, 0xFA89},{0x9DEC, 0xFA8A},
- {0x9DED, 0xFA8B},{0x9DEE, 0xFA8C},{0x9DEF, 0xFA8D},{0x9DF0, 0xFA8E},{0x9DF1, 0xFA8F},{0x9DF2, 0xFA90},{0x9DF3, 0xFA91},{0x9DF4, 0xFA92},
- {0x9DF5, 0xFA93},{0x9DF6, 0xFA94},{0x9DF7, 0xFA95},{0x9DF8, 0xFA96},{0x9DF9, 0xFA97},{0x9DFA, 0xFA98},{0x9DFB, 0xFA99},{0x9DFC, 0xFA9A},
- {0x9DFD, 0xFA9B},{0x9DFE, 0xFA9C},{0x9DFF, 0xFA9D},{0x9E00, 0xFA9E},{0x9E01, 0xFA9F},{0x9E02, 0xFAA0},{0x9E03, 0xFB40},{0x9E04, 0xFB41},
- {0x9E05, 0xFB42},{0x9E06, 0xFB43},{0x9E07, 0xFB44},{0x9E08, 0xFB45},{0x9E09, 0xFB46},{0x9E0A, 0xFB47},{0x9E0B, 0xFB48},{0x9E0C, 0xFB49},
- {0x9E0D, 0xFB4A},{0x9E0E, 0xFB4B},{0x9E0F, 0xFB4C},{0x9E10, 0xFB4D},{0x9E11, 0xFB4E},{0x9E12, 0xFB4F},{0x9E13, 0xFB50},{0x9E14, 0xFB51},
- {0x9E15, 0xFB52},{0x9E16, 0xFB53},{0x9E17, 0xFB54},{0x9E18, 0xFB55},{0x9E19, 0xFB56},{0x9E1A, 0xFB57},{0x9E1B, 0xFB58},{0x9E1C, 0xFB59},
- {0x9E1D, 0xFB5A},{0x9E1E, 0xFB5B},{0x9E1F, 0xC4F1},{0x9E20, 0xF0AF},{0x9E21, 0xBCA6},{0x9E22, 0xF0B0},{0x9E23, 0xC3F9},{0x9E24, 0xFB5C},
- {0x9E25, 0xC5B8},{0x9E26, 0xD1BB},{0x9E27, 0xFB5D},{0x9E28, 0xF0B1},{0x9E29, 0xF0B2},{0x9E2A, 0xF0B3},{0x9E2B, 0xF0B4},{0x9E2C, 0xF0B5},
- {0x9E2D, 0xD1BC},{0x9E2E, 0xFB5E},{0x9E2F, 0xD1EC},{0x9E30, 0xFB5F},{0x9E31, 0xF0B7},{0x9E32, 0xF0B6},{0x9E33, 0xD4A7},{0x9E34, 0xFB60},
- {0x9E35, 0xCDD2},{0x9E36, 0xF0B8},{0x9E37, 0xF0BA},{0x9E38, 0xF0B9},{0x9E39, 0xF0BB},{0x9E3A, 0xF0BC},{0x9E3B, 0xFB61},{0x9E3C, 0xFB62},
- {0x9E3D, 0xB8EB},{0x9E3E, 0xF0BD},{0x9E3F, 0xBAE8},{0x9E40, 0xFB63},{0x9E41, 0xF0BE},{0x9E42, 0xF0BF},{0x9E43, 0xBEE9},{0x9E44, 0xF0C0},
- {0x9E45, 0xB6EC},{0x9E46, 0xF0C1},{0x9E47, 0xF0C2},{0x9E48, 0xF0C3},{0x9E49, 0xF0C4},{0x9E4A, 0xC8B5},{0x9E4B, 0xF0C5},{0x9E4C, 0xF0C6},
- {0x9E4D, 0xFB64},{0x9E4E, 0xF0C7},{0x9E4F, 0xC5F4},{0x9E50, 0xFB65},{0x9E51, 0xF0C8},{0x9E52, 0xFB66},{0x9E53, 0xFB67},{0x9E54, 0xFB68},
- {0x9E55, 0xF0C9},{0x9E56, 0xFB69},{0x9E57, 0xF0CA},{0x9E58, 0xF7BD},{0x9E59, 0xFB6A},{0x9E5A, 0xF0CB},{0x9E5B, 0xF0CC},{0x9E5C, 0xF0CD},
- {0x9E5D, 0xFB6B},{0x9E5E, 0xF0CE},{0x9E5F, 0xFB6C},{0x9E60, 0xFB6D},{0x9E61, 0xFB6E},{0x9E62, 0xFB6F},{0x9E63, 0xF0CF},{0x9E64, 0xBAD7},
- {0x9E65, 0xFB70},{0x9E66, 0xF0D0},{0x9E67, 0xF0D1},{0x9E68, 0xF0D2},{0x9E69, 0xF0D3},{0x9E6A, 0xF0D4},{0x9E6B, 0xF0D5},{0x9E6C, 0xF0D6},
- {0x9E6D, 0xF0D8},{0x9E6E, 0xFB71},{0x9E6F, 0xFB72},{0x9E70, 0xD3A5},{0x9E71, 0xF0D7},{0x9E72, 0xFB73},{0x9E73, 0xF0D9},{0x9E74, 0xFB74},
- {0x9E75, 0xFB75},{0x9E76, 0xFB76},{0x9E77, 0xFB77},{0x9E78, 0xFB78},{0x9E79, 0xFB79},{0x9E7A, 0xFB7A},{0x9E7B, 0xFB7B},{0x9E7C, 0xFB7C},
- {0x9E7D, 0xFB7D},{0x9E7E, 0xF5BA},{0x9E7F, 0xC2B9},{0x9E80, 0xFB7E},{0x9E81, 0xFB80},{0x9E82, 0xF7E4},{0x9E83, 0xFB81},{0x9E84, 0xFB82},
- {0x9E85, 0xFB83},{0x9E86, 0xFB84},{0x9E87, 0xF7E5},{0x9E88, 0xF7E6},{0x9E89, 0xFB85},{0x9E8A, 0xFB86},{0x9E8B, 0xF7E7},{0x9E8C, 0xFB87},
- {0x9E8D, 0xFB88},{0x9E8E, 0xFB89},{0x9E8F, 0xFB8A},{0x9E90, 0xFB8B},{0x9E91, 0xFB8C},{0x9E92, 0xF7E8},{0x9E93, 0xC2B4},{0x9E94, 0xFB8D},
- {0x9E95, 0xFB8E},{0x9E96, 0xFB8F},{0x9E97, 0xFB90},{0x9E98, 0xFB91},{0x9E99, 0xFB92},{0x9E9A, 0xFB93},{0x9E9B, 0xFB94},{0x9E9C, 0xFB95},
- {0x9E9D, 0xF7EA},{0x9E9E, 0xFB96},{0x9E9F, 0xF7EB},{0x9EA0, 0xFB97},{0x9EA1, 0xFB98},{0x9EA2, 0xFB99},{0x9EA3, 0xFB9A},{0x9EA4, 0xFB9B},
- {0x9EA5, 0xFB9C},{0x9EA6, 0xC2F3},{0x9EA7, 0xFB9D},{0x9EA8, 0xFB9E},{0x9EA9, 0xFB9F},{0x9EAA, 0xFBA0},{0x9EAB, 0xFC40},{0x9EAC, 0xFC41},
- {0x9EAD, 0xFC42},{0x9EAE, 0xFC43},{0x9EAF, 0xFC44},{0x9EB0, 0xFC45},{0x9EB1, 0xFC46},{0x9EB2, 0xFC47},{0x9EB3, 0xFC48},{0x9EB4, 0xF4F0},
- {0x9EB5, 0xFC49},{0x9EB6, 0xFC4A},{0x9EB7, 0xFC4B},{0x9EB8, 0xF4EF},{0x9EB9, 0xFC4C},{0x9EBA, 0xFC4D},{0x9EBB, 0xC2E9},{0x9EBC, 0xFC4E},
- {0x9EBD, 0xF7E1},{0x9EBE, 0xF7E2},{0x9EBF, 0xFC4F},{0x9EC0, 0xFC50},{0x9EC1, 0xFC51},{0x9EC2, 0xFC52},{0x9EC3, 0xFC53},{0x9EC4, 0xBBC6},
- {0x9EC5, 0xFC54},{0x9EC6, 0xFC55},{0x9EC7, 0xFC56},{0x9EC8, 0xFC57},{0x9EC9, 0xD9E4},{0x9ECA, 0xFC58},{0x9ECB, 0xFC59},{0x9ECC, 0xFC5A},
- {0x9ECD, 0xCAF2},{0x9ECE, 0xC0E8},{0x9ECF, 0xF0A4},{0x9ED0, 0xFC5B},{0x9ED1, 0xBADA},{0x9ED2, 0xFC5C},{0x9ED3, 0xFC5D},{0x9ED4, 0xC7AD},
- {0x9ED5, 0xFC5E},{0x9ED6, 0xFC5F},{0x9ED7, 0xFC60},{0x9ED8, 0xC4AC},{0x9ED9, 0xFC61},{0x9EDA, 0xFC62},{0x9EDB, 0xF7EC},{0x9EDC, 0xF7ED},
- {0x9EDD, 0xF7EE},{0x9EDE, 0xFC63},{0x9EDF, 0xF7F0},{0x9EE0, 0xF7EF},{0x9EE1, 0xFC64},{0x9EE2, 0xF7F1},{0x9EE3, 0xFC65},{0x9EE4, 0xFC66},
- {0x9EE5, 0xF7F4},{0x9EE6, 0xFC67},{0x9EE7, 0xF7F3},{0x9EE8, 0xFC68},{0x9EE9, 0xF7F2},{0x9EEA, 0xF7F5},{0x9EEB, 0xFC69},{0x9EEC, 0xFC6A},
- {0x9EED, 0xFC6B},{0x9EEE, 0xFC6C},{0x9EEF, 0xF7F6},{0x9EF0, 0xFC6D},{0x9EF1, 0xFC6E},{0x9EF2, 0xFC6F},{0x9EF3, 0xFC70},{0x9EF4, 0xFC71},
- {0x9EF5, 0xFC72},{0x9EF6, 0xFC73},{0x9EF7, 0xFC74},{0x9EF8, 0xFC75},{0x9EF9, 0xEDE9},{0x9EFA, 0xFC76},{0x9EFB, 0xEDEA},{0x9EFC, 0xEDEB},
- {0x9EFD, 0xFC77},{0x9EFE, 0xF6BC},{0x9EFF, 0xFC78},{0x9F00, 0xFC79},{0x9F01, 0xFC7A},{0x9F02, 0xFC7B},{0x9F03, 0xFC7C},{0x9F04, 0xFC7D},
- {0x9F05, 0xFC7E},{0x9F06, 0xFC80},{0x9F07, 0xFC81},{0x9F08, 0xFC82},{0x9F09, 0xFC83},{0x9F0A, 0xFC84},{0x9F0B, 0xF6BD},{0x9F0C, 0xFC85},
- {0x9F0D, 0xF6BE},{0x9F0E, 0xB6A6},{0x9F0F, 0xFC86},{0x9F10, 0xD8BE},{0x9F11, 0xFC87},{0x9F12, 0xFC88},{0x9F13, 0xB9C4},{0x9F14, 0xFC89},
- {0x9F15, 0xFC8A},{0x9F16, 0xFC8B},{0x9F17, 0xD8BB},{0x9F18, 0xFC8C},{0x9F19, 0xDCB1},{0x9F1A, 0xFC8D},{0x9F1B, 0xFC8E},{0x9F1C, 0xFC8F},
- {0x9F1D, 0xFC90},{0x9F1E, 0xFC91},{0x9F1F, 0xFC92},{0x9F20, 0xCAF3},{0x9F21, 0xFC93},{0x9F22, 0xF7F7},{0x9F23, 0xFC94},{0x9F24, 0xFC95},
- {0x9F25, 0xFC96},{0x9F26, 0xFC97},{0x9F27, 0xFC98},{0x9F28, 0xFC99},{0x9F29, 0xFC9A},{0x9F2A, 0xFC9B},{0x9F2B, 0xFC9C},{0x9F2C, 0xF7F8},
- {0x9F2D, 0xFC9D},{0x9F2E, 0xFC9E},{0x9F2F, 0xF7F9},{0x9F30, 0xFC9F},{0x9F31, 0xFCA0},{0x9F32, 0xFD40},{0x9F33, 0xFD41},{0x9F34, 0xFD42},
- {0x9F35, 0xFD43},{0x9F36, 0xFD44},{0x9F37, 0xF7FB},{0x9F38, 0xFD45},{0x9F39, 0xF7FA},{0x9F3A, 0xFD46},{0x9F3B, 0xB1C7},{0x9F3C, 0xFD47},
- {0x9F3D, 0xF7FC},{0x9F3E, 0xF7FD},{0x9F3F, 0xFD48},{0x9F40, 0xFD49},{0x9F41, 0xFD4A},{0x9F42, 0xFD4B},{0x9F43, 0xFD4C},{0x9F44, 0xF7FE},
- {0x9F45, 0xFD4D},{0x9F46, 0xFD4E},{0x9F47, 0xFD4F},{0x9F48, 0xFD50},{0x9F49, 0xFD51},{0x9F4A, 0xFD52},{0x9F4B, 0xFD53},{0x9F4C, 0xFD54},
- {0x9F4D, 0xFD55},{0x9F4E, 0xFD56},{0x9F4F, 0xFD57},{0x9F50, 0xC6EB},{0x9F51, 0xECB4},{0x9F52, 0xFD58},{0x9F53, 0xFD59},{0x9F54, 0xFD5A},
- {0x9F55, 0xFD5B},{0x9F56, 0xFD5C},{0x9F57, 0xFD5D},{0x9F58, 0xFD5E},{0x9F59, 0xFD5F},{0x9F5A, 0xFD60},{0x9F5B, 0xFD61},{0x9F5C, 0xFD62},
- {0x9F5D, 0xFD63},{0x9F5E, 0xFD64},{0x9F5F, 0xFD65},{0x9F60, 0xFD66},{0x9F61, 0xFD67},{0x9F62, 0xFD68},{0x9F63, 0xFD69},{0x9F64, 0xFD6A},
- {0x9F65, 0xFD6B},{0x9F66, 0xFD6C},{0x9F67, 0xFD6D},{0x9F68, 0xFD6E},{0x9F69, 0xFD6F},{0x9F6A, 0xFD70},{0x9F6B, 0xFD71},{0x9F6C, 0xFD72},
- {0x9F6D, 0xFD73},{0x9F6E, 0xFD74},{0x9F6F, 0xFD75},{0x9F70, 0xFD76},{0x9F71, 0xFD77},{0x9F72, 0xFD78},{0x9F73, 0xFD79},{0x9F74, 0xFD7A},
- {0x9F75, 0xFD7B},{0x9F76, 0xFD7C},{0x9F77, 0xFD7D},{0x9F78, 0xFD7E},{0x9F79, 0xFD80},{0x9F7A, 0xFD81},{0x9F7B, 0xFD82},{0x9F7C, 0xFD83},
- {0x9F7D, 0xFD84},{0x9F7E, 0xFD85},{0x9F7F, 0xB3DD},{0x9F80, 0xF6B3},{0x9F81, 0xFD86},{0x9F82, 0xFD87},{0x9F83, 0xF6B4},{0x9F84, 0xC1E4},
- {0x9F85, 0xF6B5},{0x9F86, 0xF6B6},{0x9F87, 0xF6B7},{0x9F88, 0xF6B8},{0x9F89, 0xF6B9},{0x9F8A, 0xF6BA},{0x9F8B, 0xC8A3},{0x9F8C, 0xF6BB},
- {0x9F8D, 0xFD88},{0x9F8E, 0xFD89},{0x9F8F, 0xFD8A},{0x9F90, 0xFD8B},{0x9F91, 0xFD8C},{0x9F92, 0xFD8D},{0x9F93, 0xFD8E},{0x9F94, 0xFD8F},
- {0x9F95, 0xFD90},{0x9F96, 0xFD91},{0x9F97, 0xFD92},{0x9F98, 0xFD93},{0x9F99, 0xC1FA},{0x9F9A, 0xB9A8},{0x9F9B, 0xEDE8},{0x9F9C, 0xFD94},
- {0x9F9D, 0xFD95},{0x9F9E, 0xFD96},{0x9F9F, 0xB9EA},{0x9FA0, 0xD9DF},{0x9FA1, 0xFD97},{0x9FA2, 0xFD98},{0x9FA3, 0xFD99},{0x9FA4, 0xFD9A},
- {0x9FA5, 0xFD9B},{0xE000, 0xAAA1},{0xE001, 0xAAA2},{0xE002, 0xAAA3},{0xE003, 0xAAA4},{0xE004, 0xAAA5},{0xE005, 0xAAA6},{0xE006, 0xAAA7},
- {0xE007, 0xAAA8},{0xE008, 0xAAA9},{0xE009, 0xAAAA},{0xE00A, 0xAAAB},{0xE00B, 0xAAAC},{0xE00C, 0xAAAD},{0xE00D, 0xAAAE},{0xE00E, 0xAAAF},
- {0xE00F, 0xAAB0},{0xE010, 0xAAB1},{0xE011, 0xAAB2},{0xE012, 0xAAB3},{0xE013, 0xAAB4},{0xE014, 0xAAB5},{0xE015, 0xAAB6},{0xE016, 0xAAB7},
- {0xE017, 0xAAB8},{0xE018, 0xAAB9},{0xE019, 0xAABA},{0xE01A, 0xAABB},{0xE01B, 0xAABC},{0xE01C, 0xAABD},{0xE01D, 0xAABE},{0xE01E, 0xAABF},
- {0xE01F, 0xAAC0},{0xE020, 0xAAC1},{0xE021, 0xAAC2},{0xE022, 0xAAC3},{0xE023, 0xAAC4},{0xE024, 0xAAC5},{0xE025, 0xAAC6},{0xE026, 0xAAC7},
- {0xE027, 0xAAC8},{0xE028, 0xAAC9},{0xE029, 0xAACA},{0xE02A, 0xAACB},{0xE02B, 0xAACC},{0xE02C, 0xAACD},{0xE02D, 0xAACE},{0xE02E, 0xAACF},
- {0xE02F, 0xAAD0},{0xE030, 0xAAD1},{0xE031, 0xAAD2},{0xE032, 0xAAD3},{0xE033, 0xAAD4},{0xE034, 0xAAD5},{0xE035, 0xAAD6},{0xE036, 0xAAD7},
- {0xE037, 0xAAD8},{0xE038, 0xAAD9},{0xE039, 0xAADA},{0xE03A, 0xAADB},{0xE03B, 0xAADC},{0xE03C, 0xAADD},{0xE03D, 0xAADE},{0xE03E, 0xAADF},
- {0xE03F, 0xAAE0},{0xE040, 0xAAE1},{0xE041, 0xAAE2},{0xE042, 0xAAE3},{0xE043, 0xAAE4},{0xE044, 0xAAE5},{0xE045, 0xAAE6},{0xE046, 0xAAE7},
- {0xE047, 0xAAE8},{0xE048, 0xAAE9},{0xE049, 0xAAEA},{0xE04A, 0xAAEB},{0xE04B, 0xAAEC},{0xE04C, 0xAAED},{0xE04D, 0xAAEE},{0xE04E, 0xAAEF},
- {0xE04F, 0xAAF0},{0xE050, 0xAAF1},{0xE051, 0xAAF2},{0xE052, 0xAAF3},{0xE053, 0xAAF4},{0xE054, 0xAAF5},{0xE055, 0xAAF6},{0xE056, 0xAAF7},
- {0xE057, 0xAAF8},{0xE058, 0xAAF9},{0xE059, 0xAAFA},{0xE05A, 0xAAFB},{0xE05B, 0xAAFC},{0xE05C, 0xAAFD},{0xE05D, 0xAAFE},{0xE05E, 0xABA1},
- {0xE05F, 0xABA2},{0xE060, 0xABA3},{0xE061, 0xABA4},{0xE062, 0xABA5},{0xE063, 0xABA6},{0xE064, 0xABA7},{0xE065, 0xABA8},{0xE066, 0xABA9},
- {0xE067, 0xABAA},{0xE068, 0xABAB},{0xE069, 0xABAC},{0xE06A, 0xABAD},{0xE06B, 0xABAE},{0xE06C, 0xABAF},{0xE06D, 0xABB0},{0xE06E, 0xABB1},
- {0xE06F, 0xABB2},{0xE070, 0xABB3},{0xE071, 0xABB4},{0xE072, 0xABB5},{0xE073, 0xABB6},{0xE074, 0xABB7},{0xE075, 0xABB8},{0xE076, 0xABB9},
- {0xE077, 0xABBA},{0xE078, 0xABBB},{0xE079, 0xABBC},{0xE07A, 0xABBD},{0xE07B, 0xABBE},{0xE07C, 0xABBF},{0xE07D, 0xABC0},{0xE07E, 0xABC1},
- {0xE07F, 0xABC2},{0xE080, 0xABC3},{0xE081, 0xABC4},{0xE082, 0xABC5},{0xE083, 0xABC6},{0xE084, 0xABC7},{0xE085, 0xABC8},{0xE086, 0xABC9},
- {0xE087, 0xABCA},{0xE088, 0xABCB},{0xE089, 0xABCC},{0xE08A, 0xABCD},{0xE08B, 0xABCE},{0xE08C, 0xABCF},{0xE08D, 0xABD0},{0xE08E, 0xABD1},
- {0xE08F, 0xABD2},{0xE090, 0xABD3},{0xE091, 0xABD4},{0xE092, 0xABD5},{0xE093, 0xABD6},{0xE094, 0xABD7},{0xE095, 0xABD8},{0xE096, 0xABD9},
- {0xE097, 0xABDA},{0xE098, 0xABDB},{0xE099, 0xABDC},{0xE09A, 0xABDD},{0xE09B, 0xABDE},{0xE09C, 0xABDF},{0xE09D, 0xABE0},{0xE09E, 0xABE1},
- {0xE09F, 0xABE2},{0xE0A0, 0xABE3},{0xE0A1, 0xABE4},{0xE0A2, 0xABE5},{0xE0A3, 0xABE6},{0xE0A4, 0xABE7},{0xE0A5, 0xABE8},{0xE0A6, 0xABE9},
- {0xE0A7, 0xABEA},{0xE0A8, 0xABEB},{0xE0A9, 0xABEC},{0xE0AA, 0xABED},{0xE0AB, 0xABEE},{0xE0AC, 0xABEF},{0xE0AD, 0xABF0},{0xE0AE, 0xABF1},
- {0xE0AF, 0xABF2},{0xE0B0, 0xABF3},{0xE0B1, 0xABF4},{0xE0B2, 0xABF5},{0xE0B3, 0xABF6},{0xE0B4, 0xABF7},{0xE0B5, 0xABF8},{0xE0B6, 0xABF9},
- {0xE0B7, 0xABFA},{0xE0B8, 0xABFB},{0xE0B9, 0xABFC},{0xE0BA, 0xABFD},{0xE0BB, 0xABFE},{0xE0BC, 0xACA1},{0xE0BD, 0xACA2},{0xE0BE, 0xACA3},
- {0xE0BF, 0xACA4},{0xE0C0, 0xACA5},{0xE0C1, 0xACA6},{0xE0C2, 0xACA7},{0xE0C3, 0xACA8},{0xE0C4, 0xACA9},{0xE0C5, 0xACAA},{0xE0C6, 0xACAB},
- {0xE0C7, 0xACAC},{0xE0C8, 0xACAD},{0xE0C9, 0xACAE},{0xE0CA, 0xACAF},{0xE0CB, 0xACB0},{0xE0CC, 0xACB1},{0xE0CD, 0xACB2},{0xE0CE, 0xACB3},
- {0xE0CF, 0xACB4},{0xE0D0, 0xACB5},{0xE0D1, 0xACB6},{0xE0D2, 0xACB7},{0xE0D3, 0xACB8},{0xE0D4, 0xACB9},{0xE0D5, 0xACBA},{0xE0D6, 0xACBB},
- {0xE0D7, 0xACBC},{0xE0D8, 0xACBD},{0xE0D9, 0xACBE},{0xE0DA, 0xACBF},{0xE0DB, 0xACC0},{0xE0DC, 0xACC1},{0xE0DD, 0xACC2},{0xE0DE, 0xACC3},
- {0xE0DF, 0xACC4},{0xE0E0, 0xACC5},{0xE0E1, 0xACC6},{0xE0E2, 0xACC7},{0xE0E3, 0xACC8},{0xE0E4, 0xACC9},{0xE0E5, 0xACCA},{0xE0E6, 0xACCB},
- {0xE0E7, 0xACCC},{0xE0E8, 0xACCD},{0xE0E9, 0xACCE},{0xE0EA, 0xACCF},{0xE0EB, 0xACD0},{0xE0EC, 0xACD1},{0xE0ED, 0xACD2},{0xE0EE, 0xACD3},
- {0xE0EF, 0xACD4},{0xE0F0, 0xACD5},{0xE0F1, 0xACD6},{0xE0F2, 0xACD7},{0xE0F3, 0xACD8},{0xE0F4, 0xACD9},{0xE0F5, 0xACDA},{0xE0F6, 0xACDB},
- {0xE0F7, 0xACDC},{0xE0F8, 0xACDD},{0xE0F9, 0xACDE},{0xE0FA, 0xACDF},{0xE0FB, 0xACE0},{0xE0FC, 0xACE1},{0xE0FD, 0xACE2},{0xE0FE, 0xACE3},
- {0xE0FF, 0xACE4},{0xE100, 0xACE5},{0xE101, 0xACE6},{0xE102, 0xACE7},{0xE103, 0xACE8},{0xE104, 0xACE9},{0xE105, 0xACEA},{0xE106, 0xACEB},
- {0xE107, 0xACEC},{0xE108, 0xACED},{0xE109, 0xACEE},{0xE10A, 0xACEF},{0xE10B, 0xACF0},{0xE10C, 0xACF1},{0xE10D, 0xACF2},{0xE10E, 0xACF3},
- {0xE10F, 0xACF4},{0xE110, 0xACF5},{0xE111, 0xACF6},{0xE112, 0xACF7},{0xE113, 0xACF8},{0xE114, 0xACF9},{0xE115, 0xACFA},{0xE116, 0xACFB},
- {0xE117, 0xACFC},{0xE118, 0xACFD},{0xE119, 0xACFE},{0xE11A, 0xADA1},{0xE11B, 0xADA2},{0xE11C, 0xADA3},{0xE11D, 0xADA4},{0xE11E, 0xADA5},
- {0xE11F, 0xADA6},{0xE120, 0xADA7},{0xE121, 0xADA8},{0xE122, 0xADA9},{0xE123, 0xADAA},{0xE124, 0xADAB},{0xE125, 0xADAC},{0xE126, 0xADAD},
- {0xE127, 0xADAE},{0xE128, 0xADAF},{0xE129, 0xADB0},{0xE12A, 0xADB1},{0xE12B, 0xADB2},{0xE12C, 0xADB3},{0xE12D, 0xADB4},{0xE12E, 0xADB5},
- {0xE12F, 0xADB6},{0xE130, 0xADB7},{0xE131, 0xADB8},{0xE132, 0xADB9},{0xE133, 0xADBA},{0xE134, 0xADBB},{0xE135, 0xADBC},{0xE136, 0xADBD},
- {0xE137, 0xADBE},{0xE138, 0xADBF},{0xE139, 0xADC0},{0xE13A, 0xADC1},{0xE13B, 0xADC2},{0xE13C, 0xADC3},{0xE13D, 0xADC4},{0xE13E, 0xADC5},
- {0xE13F, 0xADC6},{0xE140, 0xADC7},{0xE141, 0xADC8},{0xE142, 0xADC9},{0xE143, 0xADCA},{0xE144, 0xADCB},{0xE145, 0xADCC},{0xE146, 0xADCD},
- {0xE147, 0xADCE},{0xE148, 0xADCF},{0xE149, 0xADD0},{0xE14A, 0xADD1},{0xE14B, 0xADD2},{0xE14C, 0xADD3},{0xE14D, 0xADD4},{0xE14E, 0xADD5},
- {0xE14F, 0xADD6},{0xE150, 0xADD7},{0xE151, 0xADD8},{0xE152, 0xADD9},{0xE153, 0xADDA},{0xE154, 0xADDB},{0xE155, 0xADDC},{0xE156, 0xADDD},
- {0xE157, 0xADDE},{0xE158, 0xADDF},{0xE159, 0xADE0},{0xE15A, 0xADE1},{0xE15B, 0xADE2},{0xE15C, 0xADE3},{0xE15D, 0xADE4},{0xE15E, 0xADE5},
- {0xE15F, 0xADE6},{0xE160, 0xADE7},{0xE161, 0xADE8},{0xE162, 0xADE9},{0xE163, 0xADEA},{0xE164, 0xADEB},{0xE165, 0xADEC},{0xE166, 0xADED},
- {0xE167, 0xADEE},{0xE168, 0xADEF},{0xE169, 0xADF0},{0xE16A, 0xADF1},{0xE16B, 0xADF2},{0xE16C, 0xADF3},{0xE16D, 0xADF4},{0xE16E, 0xADF5},
- {0xE16F, 0xADF6},{0xE170, 0xADF7},{0xE171, 0xADF8},{0xE172, 0xADF9},{0xE173, 0xADFA},{0xE174, 0xADFB},{0xE175, 0xADFC},{0xE176, 0xADFD},
- {0xE177, 0xADFE},{0xE178, 0xAEA1},{0xE179, 0xAEA2},{0xE17A, 0xAEA3},{0xE17B, 0xAEA4},{0xE17C, 0xAEA5},{0xE17D, 0xAEA6},{0xE17E, 0xAEA7},
- {0xE17F, 0xAEA8},{0xE180, 0xAEA9},{0xE181, 0xAEAA},{0xE182, 0xAEAB},{0xE183, 0xAEAC},{0xE184, 0xAEAD},{0xE185, 0xAEAE},{0xE186, 0xAEAF},
- {0xE187, 0xAEB0},{0xE188, 0xAEB1},{0xE189, 0xAEB2},{0xE18A, 0xAEB3},{0xE18B, 0xAEB4},{0xE18C, 0xAEB5},{0xE18D, 0xAEB6},{0xE18E, 0xAEB7},
- {0xE18F, 0xAEB8},{0xE190, 0xAEB9},{0xE191, 0xAEBA},{0xE192, 0xAEBB},{0xE193, 0xAEBC},{0xE194, 0xAEBD},{0xE195, 0xAEBE},{0xE196, 0xAEBF},
- {0xE197, 0xAEC0},{0xE198, 0xAEC1},{0xE199, 0xAEC2},{0xE19A, 0xAEC3},{0xE19B, 0xAEC4},{0xE19C, 0xAEC5},{0xE19D, 0xAEC6},{0xE19E, 0xAEC7},
- {0xE19F, 0xAEC8},{0xE1A0, 0xAEC9},{0xE1A1, 0xAECA},{0xE1A2, 0xAECB},{0xE1A3, 0xAECC},{0xE1A4, 0xAECD},{0xE1A5, 0xAECE},{0xE1A6, 0xAECF},
- {0xE1A7, 0xAED0},{0xE1A8, 0xAED1},{0xE1A9, 0xAED2},{0xE1AA, 0xAED3},{0xE1AB, 0xAED4},{0xE1AC, 0xAED5},{0xE1AD, 0xAED6},{0xE1AE, 0xAED7},
- {0xE1AF, 0xAED8},{0xE1B0, 0xAED9},{0xE1B1, 0xAEDA},{0xE1B2, 0xAEDB},{0xE1B3, 0xAEDC},{0xE1B4, 0xAEDD},{0xE1B5, 0xAEDE},{0xE1B6, 0xAEDF},
- {0xE1B7, 0xAEE0},{0xE1B8, 0xAEE1},{0xE1B9, 0xAEE2},{0xE1BA, 0xAEE3},{0xE1BB, 0xAEE4},{0xE1BC, 0xAEE5},{0xE1BD, 0xAEE6},{0xE1BE, 0xAEE7},
- {0xE1BF, 0xAEE8},{0xE1C0, 0xAEE9},{0xE1C1, 0xAEEA},{0xE1C2, 0xAEEB},{0xE1C3, 0xAEEC},{0xE1C4, 0xAEED},{0xE1C5, 0xAEEE},{0xE1C6, 0xAEEF},
- {0xE1C7, 0xAEF0},{0xE1C8, 0xAEF1},{0xE1C9, 0xAEF2},{0xE1CA, 0xAEF3},{0xE1CB, 0xAEF4},{0xE1CC, 0xAEF5},{0xE1CD, 0xAEF6},{0xE1CE, 0xAEF7},
- {0xE1CF, 0xAEF8},{0xE1D0, 0xAEF9},{0xE1D1, 0xAEFA},{0xE1D2, 0xAEFB},{0xE1D3, 0xAEFC},{0xE1D4, 0xAEFD},{0xE1D5, 0xAEFE},{0xE1D6, 0xAFA1},
- {0xE1D7, 0xAFA2},{0xE1D8, 0xAFA3},{0xE1D9, 0xAFA4},{0xE1DA, 0xAFA5},{0xE1DB, 0xAFA6},{0xE1DC, 0xAFA7},{0xE1DD, 0xAFA8},{0xE1DE, 0xAFA9},
- {0xE1DF, 0xAFAA},{0xE1E0, 0xAFAB},{0xE1E1, 0xAFAC},{0xE1E2, 0xAFAD},{0xE1E3, 0xAFAE},{0xE1E4, 0xAFAF},{0xE1E5, 0xAFB0},{0xE1E6, 0xAFB1},
- {0xE1E7, 0xAFB2},{0xE1E8, 0xAFB3},{0xE1E9, 0xAFB4},{0xE1EA, 0xAFB5},{0xE1EB, 0xAFB6},{0xE1EC, 0xAFB7},{0xE1ED, 0xAFB8},{0xE1EE, 0xAFB9},
- {0xE1EF, 0xAFBA},{0xE1F0, 0xAFBB},{0xE1F1, 0xAFBC},{0xE1F2, 0xAFBD},{0xE1F3, 0xAFBE},{0xE1F4, 0xAFBF},{0xE1F5, 0xAFC0},{0xE1F6, 0xAFC1},
- {0xE1F7, 0xAFC2},{0xE1F8, 0xAFC3},{0xE1F9, 0xAFC4},{0xE1FA, 0xAFC5},{0xE1FB, 0xAFC6},{0xE1FC, 0xAFC7},{0xE1FD, 0xAFC8},{0xE1FE, 0xAFC9},
- {0xE1FF, 0xAFCA},{0xE200, 0xAFCB},{0xE201, 0xAFCC},{0xE202, 0xAFCD},{0xE203, 0xAFCE},{0xE204, 0xAFCF},{0xE205, 0xAFD0},{0xE206, 0xAFD1},
- {0xE207, 0xAFD2},{0xE208, 0xAFD3},{0xE209, 0xAFD4},{0xE20A, 0xAFD5},{0xE20B, 0xAFD6},{0xE20C, 0xAFD7},{0xE20D, 0xAFD8},{0xE20E, 0xAFD9},
- {0xE20F, 0xAFDA},{0xE210, 0xAFDB},{0xE211, 0xAFDC},{0xE212, 0xAFDD},{0xE213, 0xAFDE},{0xE214, 0xAFDF},{0xE215, 0xAFE0},{0xE216, 0xAFE1},
- {0xE217, 0xAFE2},{0xE218, 0xAFE3},{0xE219, 0xAFE4},{0xE21A, 0xAFE5},{0xE21B, 0xAFE6},{0xE21C, 0xAFE7},{0xE21D, 0xAFE8},{0xE21E, 0xAFE9},
- {0xE21F, 0xAFEA},{0xE220, 0xAFEB},{0xE221, 0xAFEC},{0xE222, 0xAFED},{0xE223, 0xAFEE},{0xE224, 0xAFEF},{0xE225, 0xAFF0},{0xE226, 0xAFF1},
- {0xE227, 0xAFF2},{0xE228, 0xAFF3},{0xE229, 0xAFF4},{0xE22A, 0xAFF5},{0xE22B, 0xAFF6},{0xE22C, 0xAFF7},{0xE22D, 0xAFF8},{0xE22E, 0xAFF9},
- {0xE22F, 0xAFFA},{0xE230, 0xAFFB},{0xE231, 0xAFFC},{0xE232, 0xAFFD},{0xE233, 0xAFFE},{0xE234, 0xF8A1},{0xE235, 0xF8A2},{0xE236, 0xF8A3},
- {0xE237, 0xF8A4},{0xE238, 0xF8A5},{0xE239, 0xF8A6},{0xE23A, 0xF8A7},{0xE23B, 0xF8A8},{0xE23C, 0xF8A9},{0xE23D, 0xF8AA},{0xE23E, 0xF8AB},
- {0xE23F, 0xF8AC},{0xE240, 0xF8AD},{0xE241, 0xF8AE},{0xE242, 0xF8AF},{0xE243, 0xF8B0},{0xE244, 0xF8B1},{0xE245, 0xF8B2},{0xE246, 0xF8B3},
- {0xE247, 0xF8B4},{0xE248, 0xF8B5},{0xE249, 0xF8B6},{0xE24A, 0xF8B7},{0xE24B, 0xF8B8},{0xE24C, 0xF8B9},{0xE24D, 0xF8BA},{0xE24E, 0xF8BB},
- {0xE24F, 0xF8BC},{0xE250, 0xF8BD},{0xE251, 0xF8BE},{0xE252, 0xF8BF},{0xE253, 0xF8C0},{0xE254, 0xF8C1},{0xE255, 0xF8C2},{0xE256, 0xF8C3},
- {0xE257, 0xF8C4},{0xE258, 0xF8C5},{0xE259, 0xF8C6},{0xE25A, 0xF8C7},{0xE25B, 0xF8C8},{0xE25C, 0xF8C9},{0xE25D, 0xF8CA},{0xE25E, 0xF8CB},
- {0xE25F, 0xF8CC},{0xE260, 0xF8CD},{0xE261, 0xF8CE},{0xE262, 0xF8CF},{0xE263, 0xF8D0},{0xE264, 0xF8D1},{0xE265, 0xF8D2},{0xE266, 0xF8D3},
- {0xE267, 0xF8D4},{0xE268, 0xF8D5},{0xE269, 0xF8D6},{0xE26A, 0xF8D7},{0xE26B, 0xF8D8},{0xE26C, 0xF8D9},{0xE26D, 0xF8DA},{0xE26E, 0xF8DB},
- {0xE26F, 0xF8DC},{0xE270, 0xF8DD},{0xE271, 0xF8DE},{0xE272, 0xF8DF},{0xE273, 0xF8E0},{0xE274, 0xF8E1},{0xE275, 0xF8E2},{0xE276, 0xF8E3},
- {0xE277, 0xF8E4},{0xE278, 0xF8E5},{0xE279, 0xF8E6},{0xE27A, 0xF8E7},{0xE27B, 0xF8E8},{0xE27C, 0xF8E9},{0xE27D, 0xF8EA},{0xE27E, 0xF8EB},
- {0xE27F, 0xF8EC},{0xE280, 0xF8ED},{0xE281, 0xF8EE},{0xE282, 0xF8EF},{0xE283, 0xF8F0},{0xE284, 0xF8F1},{0xE285, 0xF8F2},{0xE286, 0xF8F3},
- {0xE287, 0xF8F4},{0xE288, 0xF8F5},{0xE289, 0xF8F6},{0xE28A, 0xF8F7},{0xE28B, 0xF8F8},{0xE28C, 0xF8F9},{0xE28D, 0xF8FA},{0xE28E, 0xF8FB},
- {0xE28F, 0xF8FC},{0xE290, 0xF8FD},{0xE291, 0xF8FE},{0xE292, 0xF9A1},{0xE293, 0xF9A2},{0xE294, 0xF9A3},{0xE295, 0xF9A4},{0xE296, 0xF9A5},
- {0xE297, 0xF9A6},{0xE298, 0xF9A7},{0xE299, 0xF9A8},{0xE29A, 0xF9A9},{0xE29B, 0xF9AA},{0xE29C, 0xF9AB},{0xE29D, 0xF9AC},{0xE29E, 0xF9AD},
- {0xE29F, 0xF9AE},{0xE2A0, 0xF9AF},{0xE2A1, 0xF9B0},{0xE2A2, 0xF9B1},{0xE2A3, 0xF9B2},{0xE2A4, 0xF9B3},{0xE2A5, 0xF9B4},{0xE2A6, 0xF9B5},
- {0xE2A7, 0xF9B6},{0xE2A8, 0xF9B7},{0xE2A9, 0xF9B8},{0xE2AA, 0xF9B9},{0xE2AB, 0xF9BA},{0xE2AC, 0xF9BB},{0xE2AD, 0xF9BC},{0xE2AE, 0xF9BD},
- {0xE2AF, 0xF9BE},{0xE2B0, 0xF9BF},{0xE2B1, 0xF9C0},{0xE2B2, 0xF9C1},{0xE2B3, 0xF9C2},{0xE2B4, 0xF9C3},{0xE2B5, 0xF9C4},{0xE2B6, 0xF9C5},
- {0xE2B7, 0xF9C6},{0xE2B8, 0xF9C7},{0xE2B9, 0xF9C8},{0xE2BA, 0xF9C9},{0xE2BB, 0xF9CA},{0xE2BC, 0xF9CB},{0xE2BD, 0xF9CC},{0xE2BE, 0xF9CD},
- {0xE2BF, 0xF9CE},{0xE2C0, 0xF9CF},{0xE2C1, 0xF9D0},{0xE2C2, 0xF9D1},{0xE2C3, 0xF9D2},{0xE2C4, 0xF9D3},{0xE2C5, 0xF9D4},{0xE2C6, 0xF9D5},
- {0xE2C7, 0xF9D6},{0xE2C8, 0xF9D7},{0xE2C9, 0xF9D8},{0xE2CA, 0xF9D9},{0xE2CB, 0xF9DA},{0xE2CC, 0xF9DB},{0xE2CD, 0xF9DC},{0xE2CE, 0xF9DD},
- {0xE2CF, 0xF9DE},{0xE2D0, 0xF9DF},{0xE2D1, 0xF9E0},{0xE2D2, 0xF9E1},{0xE2D3, 0xF9E2},{0xE2D4, 0xF9E3},{0xE2D5, 0xF9E4},{0xE2D6, 0xF9E5},
- {0xE2D7, 0xF9E6},{0xE2D8, 0xF9E7},{0xE2D9, 0xF9E8},{0xE2DA, 0xF9E9},{0xE2DB, 0xF9EA},{0xE2DC, 0xF9EB},{0xE2DD, 0xF9EC},{0xE2DE, 0xF9ED},
- {0xE2DF, 0xF9EE},{0xE2E0, 0xF9EF},{0xE2E1, 0xF9F0},{0xE2E2, 0xF9F1},{0xE2E3, 0xF9F2},{0xE2E4, 0xF9F3},{0xE2E5, 0xF9F4},{0xE2E6, 0xF9F5},
- {0xE2E7, 0xF9F6},{0xE2E8, 0xF9F7},{0xE2E9, 0xF9F8},{0xE2EA, 0xF9F9},{0xE2EB, 0xF9FA},{0xE2EC, 0xF9FB},{0xE2ED, 0xF9FC},{0xE2EE, 0xF9FD},
- {0xE2EF, 0xF9FE},{0xE2F0, 0xFAA1},{0xE2F1, 0xFAA2},{0xE2F2, 0xFAA3},{0xE2F3, 0xFAA4},{0xE2F4, 0xFAA5},{0xE2F5, 0xFAA6},{0xE2F6, 0xFAA7},
- {0xE2F7, 0xFAA8},{0xE2F8, 0xFAA9},{0xE2F9, 0xFAAA},{0xE2FA, 0xFAAB},{0xE2FB, 0xFAAC},{0xE2FC, 0xFAAD},{0xE2FD, 0xFAAE},{0xE2FE, 0xFAAF},
- {0xE2FF, 0xFAB0},{0xE300, 0xFAB1},{0xE301, 0xFAB2},{0xE302, 0xFAB3},{0xE303, 0xFAB4},{0xE304, 0xFAB5},{0xE305, 0xFAB6},{0xE306, 0xFAB7},
- {0xE307, 0xFAB8},{0xE308, 0xFAB9},{0xE309, 0xFABA},{0xE30A, 0xFABB},{0xE30B, 0xFABC},{0xE30C, 0xFABD},{0xE30D, 0xFABE},{0xE30E, 0xFABF},
- {0xE30F, 0xFAC0},{0xE310, 0xFAC1},{0xE311, 0xFAC2},{0xE312, 0xFAC3},{0xE313, 0xFAC4},{0xE314, 0xFAC5},{0xE315, 0xFAC6},{0xE316, 0xFAC7},
- {0xE317, 0xFAC8},{0xE318, 0xFAC9},{0xE319, 0xFACA},{0xE31A, 0xFACB},{0xE31B, 0xFACC},{0xE31C, 0xFACD},{0xE31D, 0xFACE},{0xE31E, 0xFACF},
- {0xE31F, 0xFAD0},{0xE320, 0xFAD1},{0xE321, 0xFAD2},{0xE322, 0xFAD3},{0xE323, 0xFAD4},{0xE324, 0xFAD5},{0xE325, 0xFAD6},{0xE326, 0xFAD7},
- {0xE327, 0xFAD8},{0xE328, 0xFAD9},{0xE329, 0xFADA},{0xE32A, 0xFADB},{0xE32B, 0xFADC},{0xE32C, 0xFADD},{0xE32D, 0xFADE},{0xE32E, 0xFADF},
- {0xE32F, 0xFAE0},{0xE330, 0xFAE1},{0xE331, 0xFAE2},{0xE332, 0xFAE3},{0xE333, 0xFAE4},{0xE334, 0xFAE5},{0xE335, 0xFAE6},{0xE336, 0xFAE7},
- {0xE337, 0xFAE8},{0xE338, 0xFAE9},{0xE339, 0xFAEA},{0xE33A, 0xFAEB},{0xE33B, 0xFAEC},{0xE33C, 0xFAED},{0xE33D, 0xFAEE},{0xE33E, 0xFAEF},
- {0xE33F, 0xFAF0},{0xE340, 0xFAF1},{0xE341, 0xFAF2},{0xE342, 0xFAF3},{0xE343, 0xFAF4},{0xE344, 0xFAF5},{0xE345, 0xFAF6},{0xE346, 0xFAF7},
- {0xE347, 0xFAF8},{0xE348, 0xFAF9},{0xE349, 0xFAFA},{0xE34A, 0xFAFB},{0xE34B, 0xFAFC},{0xE34C, 0xFAFD},{0xE34D, 0xFAFE},{0xE34E, 0xFBA1},
- {0xE34F, 0xFBA2},{0xE350, 0xFBA3},{0xE351, 0xFBA4},{0xE352, 0xFBA5},{0xE353, 0xFBA6},{0xE354, 0xFBA7},{0xE355, 0xFBA8},{0xE356, 0xFBA9},
- {0xE357, 0xFBAA},{0xE358, 0xFBAB},{0xE359, 0xFBAC},{0xE35A, 0xFBAD},{0xE35B, 0xFBAE},{0xE35C, 0xFBAF},{0xE35D, 0xFBB0},{0xE35E, 0xFBB1},
- {0xE35F, 0xFBB2},{0xE360, 0xFBB3},{0xE361, 0xFBB4},{0xE362, 0xFBB5},{0xE363, 0xFBB6},{0xE364, 0xFBB7},{0xE365, 0xFBB8},{0xE366, 0xFBB9},
- {0xE367, 0xFBBA},{0xE368, 0xFBBB},{0xE369, 0xFBBC},{0xE36A, 0xFBBD},{0xE36B, 0xFBBE},{0xE36C, 0xFBBF},{0xE36D, 0xFBC0},{0xE36E, 0xFBC1},
- {0xE36F, 0xFBC2},{0xE370, 0xFBC3},{0xE371, 0xFBC4},{0xE372, 0xFBC5},{0xE373, 0xFBC6},{0xE374, 0xFBC7},{0xE375, 0xFBC8},{0xE376, 0xFBC9},
- {0xE377, 0xFBCA},{0xE378, 0xFBCB},{0xE379, 0xFBCC},{0xE37A, 0xFBCD},{0xE37B, 0xFBCE},{0xE37C, 0xFBCF},{0xE37D, 0xFBD0},{0xE37E, 0xFBD1},
- {0xE37F, 0xFBD2},{0xE380, 0xFBD3},{0xE381, 0xFBD4},{0xE382, 0xFBD5},{0xE383, 0xFBD6},{0xE384, 0xFBD7},{0xE385, 0xFBD8},{0xE386, 0xFBD9},
- {0xE387, 0xFBDA},{0xE388, 0xFBDB},{0xE389, 0xFBDC},{0xE38A, 0xFBDD},{0xE38B, 0xFBDE},{0xE38C, 0xFBDF},{0xE38D, 0xFBE0},{0xE38E, 0xFBE1},
- {0xE38F, 0xFBE2},{0xE390, 0xFBE3},{0xE391, 0xFBE4},{0xE392, 0xFBE5},{0xE393, 0xFBE6},{0xE394, 0xFBE7},{0xE395, 0xFBE8},{0xE396, 0xFBE9},
- {0xE397, 0xFBEA},{0xE398, 0xFBEB},{0xE399, 0xFBEC},{0xE39A, 0xFBED},{0xE39B, 0xFBEE},{0xE39C, 0xFBEF},{0xE39D, 0xFBF0},{0xE39E, 0xFBF1},
- {0xE39F, 0xFBF2},{0xE3A0, 0xFBF3},{0xE3A1, 0xFBF4},{0xE3A2, 0xFBF5},{0xE3A3, 0xFBF6},{0xE3A4, 0xFBF7},{0xE3A5, 0xFBF8},{0xE3A6, 0xFBF9},
- {0xE3A7, 0xFBFA},{0xE3A8, 0xFBFB},{0xE3A9, 0xFBFC},{0xE3AA, 0xFBFD},{0xE3AB, 0xFBFE},{0xE3AC, 0xFCA1},{0xE3AD, 0xFCA2},{0xE3AE, 0xFCA3},
- {0xE3AF, 0xFCA4},{0xE3B0, 0xFCA5},{0xE3B1, 0xFCA6},{0xE3B2, 0xFCA7},{0xE3B3, 0xFCA8},{0xE3B4, 0xFCA9},{0xE3B5, 0xFCAA},{0xE3B6, 0xFCAB},
- {0xE3B7, 0xFCAC},{0xE3B8, 0xFCAD},{0xE3B9, 0xFCAE},{0xE3BA, 0xFCAF},{0xE3BB, 0xFCB0},{0xE3BC, 0xFCB1},{0xE3BD, 0xFCB2},{0xE3BE, 0xFCB3},
- {0xE3BF, 0xFCB4},{0xE3C0, 0xFCB5},{0xE3C1, 0xFCB6},{0xE3C2, 0xFCB7},{0xE3C3, 0xFCB8},{0xE3C4, 0xFCB9},{0xE3C5, 0xFCBA},{0xE3C6, 0xFCBB},
- {0xE3C7, 0xFCBC},{0xE3C8, 0xFCBD},{0xE3C9, 0xFCBE},{0xE3CA, 0xFCBF},{0xE3CB, 0xFCC0},{0xE3CC, 0xFCC1},{0xE3CD, 0xFCC2},{0xE3CE, 0xFCC3},
- {0xE3CF, 0xFCC4},{0xE3D0, 0xFCC5},{0xE3D1, 0xFCC6},{0xE3D2, 0xFCC7},{0xE3D3, 0xFCC8},{0xE3D4, 0xFCC9},{0xE3D5, 0xFCCA},{0xE3D6, 0xFCCB},
- {0xE3D7, 0xFCCC},{0xE3D8, 0xFCCD},{0xE3D9, 0xFCCE},{0xE3DA, 0xFCCF},{0xE3DB, 0xFCD0},{0xE3DC, 0xFCD1},{0xE3DD, 0xFCD2},{0xE3DE, 0xFCD3},
- {0xE3DF, 0xFCD4},{0xE3E0, 0xFCD5},{0xE3E1, 0xFCD6},{0xE3E2, 0xFCD7},{0xE3E3, 0xFCD8},{0xE3E4, 0xFCD9},{0xE3E5, 0xFCDA},{0xE3E6, 0xFCDB},
- {0xE3E7, 0xFCDC},{0xE3E8, 0xFCDD},{0xE3E9, 0xFCDE},{0xE3EA, 0xFCDF},{0xE3EB, 0xFCE0},{0xE3EC, 0xFCE1},{0xE3ED, 0xFCE2},{0xE3EE, 0xFCE3},
- {0xE3EF, 0xFCE4},{0xE3F0, 0xFCE5},{0xE3F1, 0xFCE6},{0xE3F2, 0xFCE7},{0xE3F3, 0xFCE8},{0xE3F4, 0xFCE9},{0xE3F5, 0xFCEA},{0xE3F6, 0xFCEB},
- {0xE3F7, 0xFCEC},{0xE3F8, 0xFCED},{0xE3F9, 0xFCEE},{0xE3FA, 0xFCEF},{0xE3FB, 0xFCF0},{0xE3FC, 0xFCF1},{0xE3FD, 0xFCF2},{0xE3FE, 0xFCF3},
- {0xE3FF, 0xFCF4},{0xE400, 0xFCF5},{0xE401, 0xFCF6},{0xE402, 0xFCF7},{0xE403, 0xFCF8},{0xE404, 0xFCF9},{0xE405, 0xFCFA},{0xE406, 0xFCFB},
- {0xE407, 0xFCFC},{0xE408, 0xFCFD},{0xE409, 0xFCFE},{0xE40A, 0xFDA1},{0xE40B, 0xFDA2},{0xE40C, 0xFDA3},{0xE40D, 0xFDA4},{0xE40E, 0xFDA5},
- {0xE40F, 0xFDA6},{0xE410, 0xFDA7},{0xE411, 0xFDA8},{0xE412, 0xFDA9},{0xE413, 0xFDAA},{0xE414, 0xFDAB},{0xE415, 0xFDAC},{0xE416, 0xFDAD},
- {0xE417, 0xFDAE},{0xE418, 0xFDAF},{0xE419, 0xFDB0},{0xE41A, 0xFDB1},{0xE41B, 0xFDB2},{0xE41C, 0xFDB3},{0xE41D, 0xFDB4},{0xE41E, 0xFDB5},
- {0xE41F, 0xFDB6},{0xE420, 0xFDB7},{0xE421, 0xFDB8},{0xE422, 0xFDB9},{0xE423, 0xFDBA},{0xE424, 0xFDBB},{0xE425, 0xFDBC},{0xE426, 0xFDBD},
- {0xE427, 0xFDBE},{0xE428, 0xFDBF},{0xE429, 0xFDC0},{0xE42A, 0xFDC1},{0xE42B, 0xFDC2},{0xE42C, 0xFDC3},{0xE42D, 0xFDC4},{0xE42E, 0xFDC5},
- {0xE42F, 0xFDC6},{0xE430, 0xFDC7},{0xE431, 0xFDC8},{0xE432, 0xFDC9},{0xE433, 0xFDCA},{0xE434, 0xFDCB},{0xE435, 0xFDCC},{0xE436, 0xFDCD},
- {0xE437, 0xFDCE},{0xE438, 0xFDCF},{0xE439, 0xFDD0},{0xE43A, 0xFDD1},{0xE43B, 0xFDD2},{0xE43C, 0xFDD3},{0xE43D, 0xFDD4},{0xE43E, 0xFDD5},
- {0xE43F, 0xFDD6},{0xE440, 0xFDD7},{0xE441, 0xFDD8},{0xE442, 0xFDD9},{0xE443, 0xFDDA},{0xE444, 0xFDDB},{0xE445, 0xFDDC},{0xE446, 0xFDDD},
- {0xE447, 0xFDDE},{0xE448, 0xFDDF},{0xE449, 0xFDE0},{0xE44A, 0xFDE1},{0xE44B, 0xFDE2},{0xE44C, 0xFDE3},{0xE44D, 0xFDE4},{0xE44E, 0xFDE5},
- {0xE44F, 0xFDE6},{0xE450, 0xFDE7},{0xE451, 0xFDE8},{0xE452, 0xFDE9},{0xE453, 0xFDEA},{0xE454, 0xFDEB},{0xE455, 0xFDEC},{0xE456, 0xFDED},
- {0xE457, 0xFDEE},{0xE458, 0xFDEF},{0xE459, 0xFDF0},{0xE45A, 0xFDF1},{0xE45B, 0xFDF2},{0xE45C, 0xFDF3},{0xE45D, 0xFDF4},{0xE45E, 0xFDF5},
- {0xE45F, 0xFDF6},{0xE460, 0xFDF7},{0xE461, 0xFDF8},{0xE462, 0xFDF9},{0xE463, 0xFDFA},{0xE464, 0xFDFB},{0xE465, 0xFDFC},{0xE466, 0xFDFD},
- {0xE467, 0xFDFE},{0xE468, 0xFEA1},{0xE469, 0xFEA2},{0xE46A, 0xFEA3},{0xE46B, 0xFEA4},{0xE46C, 0xFEA5},{0xE46D, 0xFEA6},{0xE46E, 0xFEA7},
- {0xE46F, 0xFEA8},{0xE470, 0xFEA9},{0xE471, 0xFEAA},{0xE472, 0xFEAB},{0xE473, 0xFEAC},{0xE474, 0xFEAD},{0xE475, 0xFEAE},{0xE476, 0xFEAF},
- {0xE477, 0xFEB0},{0xE478, 0xFEB1},{0xE479, 0xFEB2},{0xE47A, 0xFEB3},{0xE47B, 0xFEB4},{0xE47C, 0xFEB5},{0xE47D, 0xFEB6},{0xE47E, 0xFEB7},
- {0xE47F, 0xFEB8},{0xE480, 0xFEB9},{0xE481, 0xFEBA},{0xE482, 0xFEBB},{0xE483, 0xFEBC},{0xE484, 0xFEBD},{0xE485, 0xFEBE},{0xE486, 0xFEBF},
- {0xE487, 0xFEC0},{0xE488, 0xFEC1},{0xE489, 0xFEC2},{0xE48A, 0xFEC3},{0xE48B, 0xFEC4},{0xE48C, 0xFEC5},{0xE48D, 0xFEC6},{0xE48E, 0xFEC7},
- {0xE48F, 0xFEC8},{0xE490, 0xFEC9},{0xE491, 0xFECA},{0xE492, 0xFECB},{0xE493, 0xFECC},{0xE494, 0xFECD},{0xE495, 0xFECE},{0xE496, 0xFECF},
- {0xE497, 0xFED0},{0xE498, 0xFED1},{0xE499, 0xFED2},{0xE49A, 0xFED3},{0xE49B, 0xFED4},{0xE49C, 0xFED5},{0xE49D, 0xFED6},{0xE49E, 0xFED7},
- {0xE49F, 0xFED8},{0xE4A0, 0xFED9},{0xE4A1, 0xFEDA},{0xE4A2, 0xFEDB},{0xE4A3, 0xFEDC},{0xE4A4, 0xFEDD},{0xE4A5, 0xFEDE},{0xE4A6, 0xFEDF},
- {0xE4A7, 0xFEE0},{0xE4A8, 0xFEE1},{0xE4A9, 0xFEE2},{0xE4AA, 0xFEE3},{0xE4AB, 0xFEE4},{0xE4AC, 0xFEE5},{0xE4AD, 0xFEE6},{0xE4AE, 0xFEE7},
- {0xE4AF, 0xFEE8},{0xE4B0, 0xFEE9},{0xE4B1, 0xFEEA},{0xE4B2, 0xFEEB},{0xE4B3, 0xFEEC},{0xE4B4, 0xFEED},{0xE4B5, 0xFEEE},{0xE4B6, 0xFEEF},
- {0xE4B7, 0xFEF0},{0xE4B8, 0xFEF1},{0xE4B9, 0xFEF2},{0xE4BA, 0xFEF3},{0xE4BB, 0xFEF4},{0xE4BC, 0xFEF5},{0xE4BD, 0xFEF6},{0xE4BE, 0xFEF7},
- {0xE4BF, 0xFEF8},{0xE4C0, 0xFEF9},{0xE4C1, 0xFEFA},{0xE4C2, 0xFEFB},{0xE4C3, 0xFEFC},{0xE4C4, 0xFEFD},{0xE4C5, 0xFEFE},{0xE4C6, 0xA140},
- {0xE4C7, 0xA141},{0xE4C8, 0xA142},{0xE4C9, 0xA143},{0xE4CA, 0xA144},{0xE4CB, 0xA145},{0xE4CC, 0xA146},{0xE4CD, 0xA147},{0xE4CE, 0xA148},
- {0xE4CF, 0xA149},{0xE4D0, 0xA14A},{0xE4D1, 0xA14B},{0xE4D2, 0xA14C},{0xE4D3, 0xA14D},{0xE4D4, 0xA14E},{0xE4D5, 0xA14F},{0xE4D6, 0xA150},
- {0xE4D7, 0xA151},{0xE4D8, 0xA152},{0xE4D9, 0xA153},{0xE4DA, 0xA154},{0xE4DB, 0xA155},{0xE4DC, 0xA156},{0xE4DD, 0xA157},{0xE4DE, 0xA158},
- {0xE4DF, 0xA159},{0xE4E0, 0xA15A},{0xE4E1, 0xA15B},{0xE4E2, 0xA15C},{0xE4E3, 0xA15D},{0xE4E4, 0xA15E},{0xE4E5, 0xA15F},{0xE4E6, 0xA160},
- {0xE4E7, 0xA161},{0xE4E8, 0xA162},{0xE4E9, 0xA163},{0xE4EA, 0xA164},{0xE4EB, 0xA165},{0xE4EC, 0xA166},{0xE4ED, 0xA167},{0xE4EE, 0xA168},
- {0xE4EF, 0xA169},{0xE4F0, 0xA16A},{0xE4F1, 0xA16B},{0xE4F2, 0xA16C},{0xE4F3, 0xA16D},{0xE4F4, 0xA16E},{0xE4F5, 0xA16F},{0xE4F6, 0xA170},
- {0xE4F7, 0xA171},{0xE4F8, 0xA172},{0xE4F9, 0xA173},{0xE4FA, 0xA174},{0xE4FB, 0xA175},{0xE4FC, 0xA176},{0xE4FD, 0xA177},{0xE4FE, 0xA178},
- {0xE4FF, 0xA179},{0xE500, 0xA17A},{0xE501, 0xA17B},{0xE502, 0xA17C},{0xE503, 0xA17D},{0xE504, 0xA17E},{0xE505, 0xA180},{0xE506, 0xA181},
- {0xE507, 0xA182},{0xE508, 0xA183},{0xE509, 0xA184},{0xE50A, 0xA185},{0xE50B, 0xA186},{0xE50C, 0xA187},{0xE50D, 0xA188},{0xE50E, 0xA189},
- {0xE50F, 0xA18A},{0xE510, 0xA18B},{0xE511, 0xA18C},{0xE512, 0xA18D},{0xE513, 0xA18E},{0xE514, 0xA18F},{0xE515, 0xA190},{0xE516, 0xA191},
- {0xE517, 0xA192},{0xE518, 0xA193},{0xE519, 0xA194},{0xE51A, 0xA195},{0xE51B, 0xA196},{0xE51C, 0xA197},{0xE51D, 0xA198},{0xE51E, 0xA199},
- {0xE51F, 0xA19A},{0xE520, 0xA19B},{0xE521, 0xA19C},{0xE522, 0xA19D},{0xE523, 0xA19E},{0xE524, 0xA19F},{0xE525, 0xA1A0},{0xE526, 0xA240},
- {0xE527, 0xA241},{0xE528, 0xA242},{0xE529, 0xA243},{0xE52A, 0xA244},{0xE52B, 0xA245},{0xE52C, 0xA246},{0xE52D, 0xA247},{0xE52E, 0xA248},
- {0xE52F, 0xA249},{0xE530, 0xA24A},{0xE531, 0xA24B},{0xE532, 0xA24C},{0xE533, 0xA24D},{0xE534, 0xA24E},{0xE535, 0xA24F},{0xE536, 0xA250},
- {0xE537, 0xA251},{0xE538, 0xA252},{0xE539, 0xA253},{0xE53A, 0xA254},{0xE53B, 0xA255},{0xE53C, 0xA256},{0xE53D, 0xA257},{0xE53E, 0xA258},
- {0xE53F, 0xA259},{0xE540, 0xA25A},{0xE541, 0xA25B},{0xE542, 0xA25C},{0xE543, 0xA25D},{0xE544, 0xA25E},{0xE545, 0xA25F},{0xE546, 0xA260},
- {0xE547, 0xA261},{0xE548, 0xA262},{0xE549, 0xA263},{0xE54A, 0xA264},{0xE54B, 0xA265},{0xE54C, 0xA266},{0xE54D, 0xA267},{0xE54E, 0xA268},
- {0xE54F, 0xA269},{0xE550, 0xA26A},{0xE551, 0xA26B},{0xE552, 0xA26C},{0xE553, 0xA26D},{0xE554, 0xA26E},{0xE555, 0xA26F},{0xE556, 0xA270},
- {0xE557, 0xA271},{0xE558, 0xA272},{0xE559, 0xA273},{0xE55A, 0xA274},{0xE55B, 0xA275},{0xE55C, 0xA276},{0xE55D, 0xA277},{0xE55E, 0xA278},
- {0xE55F, 0xA279},{0xE560, 0xA27A},{0xE561, 0xA27B},{0xE562, 0xA27C},{0xE563, 0xA27D},{0xE564, 0xA27E},{0xE565, 0xA280},{0xE566, 0xA281},
- {0xE567, 0xA282},{0xE568, 0xA283},{0xE569, 0xA284},{0xE56A, 0xA285},{0xE56B, 0xA286},{0xE56C, 0xA287},{0xE56D, 0xA288},{0xE56E, 0xA289},
- {0xE56F, 0xA28A},{0xE570, 0xA28B},{0xE571, 0xA28C},{0xE572, 0xA28D},{0xE573, 0xA28E},{0xE574, 0xA28F},{0xE575, 0xA290},{0xE576, 0xA291},
- {0xE577, 0xA292},{0xE578, 0xA293},{0xE579, 0xA294},{0xE57A, 0xA295},{0xE57B, 0xA296},{0xE57C, 0xA297},{0xE57D, 0xA298},{0xE57E, 0xA299},
- {0xE57F, 0xA29A},{0xE580, 0xA29B},{0xE581, 0xA29C},{0xE582, 0xA29D},{0xE583, 0xA29E},{0xE584, 0xA29F},{0xE585, 0xA2A0},{0xE586, 0xA2AB},
- {0xE587, 0xA2AC},{0xE588, 0xA2AD},{0xE589, 0xA2AE},{0xE58A, 0xA2AF},{0xE58B, 0xA2B0},{0xE58C, 0xA2E3},{0xE58D, 0xA2E4},{0xE58E, 0xA2EF},
- {0xE58F, 0xA2F0},{0xE590, 0xA2FD},{0xE591, 0xA2FE},{0xE592, 0xA340},{0xE593, 0xA341},{0xE594, 0xA342},{0xE595, 0xA343},{0xE596, 0xA344},
- {0xE597, 0xA345},{0xE598, 0xA346},{0xE599, 0xA347},{0xE59A, 0xA348},{0xE59B, 0xA349},{0xE59C, 0xA34A},{0xE59D, 0xA34B},{0xE59E, 0xA34C},
- {0xE59F, 0xA34D},{0xE5A0, 0xA34E},{0xE5A1, 0xA34F},{0xE5A2, 0xA350},{0xE5A3, 0xA351},{0xE5A4, 0xA352},{0xE5A5, 0xA353},{0xE5A6, 0xA354},
- {0xE5A7, 0xA355},{0xE5A8, 0xA356},{0xE5A9, 0xA357},{0xE5AA, 0xA358},{0xE5AB, 0xA359},{0xE5AC, 0xA35A},{0xE5AD, 0xA35B},{0xE5AE, 0xA35C},
- {0xE5AF, 0xA35D},{0xE5B0, 0xA35E},{0xE5B1, 0xA35F},{0xE5B2, 0xA360},{0xE5B3, 0xA361},{0xE5B4, 0xA362},{0xE5B5, 0xA363},{0xE5B6, 0xA364},
- {0xE5B7, 0xA365},{0xE5B8, 0xA366},{0xE5B9, 0xA367},{0xE5BA, 0xA368},{0xE5BB, 0xA369},{0xE5BC, 0xA36A},{0xE5BD, 0xA36B},{0xE5BE, 0xA36C},
- {0xE5BF, 0xA36D},{0xE5C0, 0xA36E},{0xE5C1, 0xA36F},{0xE5C2, 0xA370},{0xE5C3, 0xA371},{0xE5C4, 0xA372},{0xE5C5, 0xA373},{0xE5C6, 0xA374},
- {0xE5C7, 0xA375},{0xE5C8, 0xA376},{0xE5C9, 0xA377},{0xE5CA, 0xA378},{0xE5CB, 0xA379},{0xE5CC, 0xA37A},{0xE5CD, 0xA37B},{0xE5CE, 0xA37C},
- {0xE5CF, 0xA37D},{0xE5D0, 0xA37E},{0xE5D1, 0xA380},{0xE5D2, 0xA381},{0xE5D3, 0xA382},{0xE5D4, 0xA383},{0xE5D5, 0xA384},{0xE5D6, 0xA385},
- {0xE5D7, 0xA386},{0xE5D8, 0xA387},{0xE5D9, 0xA388},{0xE5DA, 0xA389},{0xE5DB, 0xA38A},{0xE5DC, 0xA38B},{0xE5DD, 0xA38C},{0xE5DE, 0xA38D},
- {0xE5DF, 0xA38E},{0xE5E0, 0xA38F},{0xE5E1, 0xA390},{0xE5E2, 0xA391},{0xE5E3, 0xA392},{0xE5E4, 0xA393},{0xE5E5, 0xA394},{0xE5E6, 0xA395},
- {0xE5E7, 0xA396},{0xE5E8, 0xA397},{0xE5E9, 0xA398},{0xE5EA, 0xA399},{0xE5EB, 0xA39A},{0xE5EC, 0xA39B},{0xE5ED, 0xA39C},{0xE5EE, 0xA39D},
- {0xE5EF, 0xA39E},{0xE5F0, 0xA39F},{0xE5F1, 0xA3A0},{0xE5F2, 0xA440},{0xE5F3, 0xA441},{0xE5F4, 0xA442},{0xE5F5, 0xA443},{0xE5F6, 0xA444},
- {0xE5F7, 0xA445},{0xE5F8, 0xA446},{0xE5F9, 0xA447},{0xE5FA, 0xA448},{0xE5FB, 0xA449},{0xE5FC, 0xA44A},{0xE5FD, 0xA44B},{0xE5FE, 0xA44C},
- {0xE5FF, 0xA44D},{0xE600, 0xA44E},{0xE601, 0xA44F},{0xE602, 0xA450},{0xE603, 0xA451},{0xE604, 0xA452},{0xE605, 0xA453},{0xE606, 0xA454},
- {0xE607, 0xA455},{0xE608, 0xA456},{0xE609, 0xA457},{0xE60A, 0xA458},{0xE60B, 0xA459},{0xE60C, 0xA45A},{0xE60D, 0xA45B},{0xE60E, 0xA45C},
- {0xE60F, 0xA45D},{0xE610, 0xA45E},{0xE611, 0xA45F},{0xE612, 0xA460},{0xE613, 0xA461},{0xE614, 0xA462},{0xE615, 0xA463},{0xE616, 0xA464},
- {0xE617, 0xA465},{0xE618, 0xA466},{0xE619, 0xA467},{0xE61A, 0xA468},{0xE61B, 0xA469},{0xE61C, 0xA46A},{0xE61D, 0xA46B},{0xE61E, 0xA46C},
- {0xE61F, 0xA46D},{0xE620, 0xA46E},{0xE621, 0xA46F},{0xE622, 0xA470},{0xE623, 0xA471},{0xE624, 0xA472},{0xE625, 0xA473},{0xE626, 0xA474},
- {0xE627, 0xA475},{0xE628, 0xA476},{0xE629, 0xA477},{0xE62A, 0xA478},{0xE62B, 0xA479},{0xE62C, 0xA47A},{0xE62D, 0xA47B},{0xE62E, 0xA47C},
- {0xE62F, 0xA47D},{0xE630, 0xA47E},{0xE631, 0xA480},{0xE632, 0xA481},{0xE633, 0xA482},{0xE634, 0xA483},{0xE635, 0xA484},{0xE636, 0xA485},
- {0xE637, 0xA486},{0xE638, 0xA487},{0xE639, 0xA488},{0xE63A, 0xA489},{0xE63B, 0xA48A},{0xE63C, 0xA48B},{0xE63D, 0xA48C},{0xE63E, 0xA48D},
- {0xE63F, 0xA48E},{0xE640, 0xA48F},{0xE641, 0xA490},{0xE642, 0xA491},{0xE643, 0xA492},{0xE644, 0xA493},{0xE645, 0xA494},{0xE646, 0xA495},
- {0xE647, 0xA496},{0xE648, 0xA497},{0xE649, 0xA498},{0xE64A, 0xA499},{0xE64B, 0xA49A},{0xE64C, 0xA49B},{0xE64D, 0xA49C},{0xE64E, 0xA49D},
- {0xE64F, 0xA49E},{0xE650, 0xA49F},{0xE651, 0xA4A0},{0xE652, 0xA4F4},{0xE653, 0xA4F5},{0xE654, 0xA4F6},{0xE655, 0xA4F7},{0xE656, 0xA4F8},
- {0xE657, 0xA4F9},{0xE658, 0xA4FA},{0xE659, 0xA4FB},{0xE65A, 0xA4FC},{0xE65B, 0xA4FD},{0xE65C, 0xA4FE},{0xE65D, 0xA540},{0xE65E, 0xA541},
- {0xE65F, 0xA542},{0xE660, 0xA543},{0xE661, 0xA544},{0xE662, 0xA545},{0xE663, 0xA546},{0xE664, 0xA547},{0xE665, 0xA548},{0xE666, 0xA549},
- {0xE667, 0xA54A},{0xE668, 0xA54B},{0xE669, 0xA54C},{0xE66A, 0xA54D},{0xE66B, 0xA54E},{0xE66C, 0xA54F},{0xE66D, 0xA550},{0xE66E, 0xA551},
- {0xE66F, 0xA552},{0xE670, 0xA553},{0xE671, 0xA554},{0xE672, 0xA555},{0xE673, 0xA556},{0xE674, 0xA557},{0xE675, 0xA558},{0xE676, 0xA559},
- {0xE677, 0xA55A},{0xE678, 0xA55B},{0xE679, 0xA55C},{0xE67A, 0xA55D},{0xE67B, 0xA55E},{0xE67C, 0xA55F},{0xE67D, 0xA560},{0xE67E, 0xA561},
- {0xE67F, 0xA562},{0xE680, 0xA563},{0xE681, 0xA564},{0xE682, 0xA565},{0xE683, 0xA566},{0xE684, 0xA567},{0xE685, 0xA568},{0xE686, 0xA569},
- {0xE687, 0xA56A},{0xE688, 0xA56B},{0xE689, 0xA56C},{0xE68A, 0xA56D},{0xE68B, 0xA56E},{0xE68C, 0xA56F},{0xE68D, 0xA570},{0xE68E, 0xA571},
- {0xE68F, 0xA572},{0xE690, 0xA573},{0xE691, 0xA574},{0xE692, 0xA575},{0xE693, 0xA576},{0xE694, 0xA577},{0xE695, 0xA578},{0xE696, 0xA579},
- {0xE697, 0xA57A},{0xE698, 0xA57B},{0xE699, 0xA57C},{0xE69A, 0xA57D},{0xE69B, 0xA57E},{0xE69C, 0xA580},{0xE69D, 0xA581},{0xE69E, 0xA582},
- {0xE69F, 0xA583},{0xE6A0, 0xA584},{0xE6A1, 0xA585},{0xE6A2, 0xA586},{0xE6A3, 0xA587},{0xE6A4, 0xA588},{0xE6A5, 0xA589},{0xE6A6, 0xA58A},
- {0xE6A7, 0xA58B},{0xE6A8, 0xA58C},{0xE6A9, 0xA58D},{0xE6AA, 0xA58E},{0xE6AB, 0xA58F},{0xE6AC, 0xA590},{0xE6AD, 0xA591},{0xE6AE, 0xA592},
- {0xE6AF, 0xA593},{0xE6B0, 0xA594},{0xE6B1, 0xA595},{0xE6B2, 0xA596},{0xE6B3, 0xA597},{0xE6B4, 0xA598},{0xE6B5, 0xA599},{0xE6B6, 0xA59A},
- {0xE6B7, 0xA59B},{0xE6B8, 0xA59C},{0xE6B9, 0xA59D},{0xE6BA, 0xA59E},{0xE6BB, 0xA59F},{0xE6BC, 0xA5A0},{0xE6BD, 0xA5F7},{0xE6BE, 0xA5F8},
- {0xE6BF, 0xA5F9},{0xE6C0, 0xA5FA},{0xE6C1, 0xA5FB},{0xE6C2, 0xA5FC},{0xE6C3, 0xA5FD},{0xE6C4, 0xA5FE},{0xE6C5, 0xA640},{0xE6C6, 0xA641},
- {0xE6C7, 0xA642},{0xE6C8, 0xA643},{0xE6C9, 0xA644},{0xE6CA, 0xA645},{0xE6CB, 0xA646},{0xE6CC, 0xA647},{0xE6CD, 0xA648},{0xE6CE, 0xA649},
- {0xE6CF, 0xA64A},{0xE6D0, 0xA64B},{0xE6D1, 0xA64C},{0xE6D2, 0xA64D},{0xE6D3, 0xA64E},{0xE6D4, 0xA64F},{0xE6D5, 0xA650},{0xE6D6, 0xA651},
- {0xE6D7, 0xA652},{0xE6D8, 0xA653},{0xE6D9, 0xA654},{0xE6DA, 0xA655},{0xE6DB, 0xA656},{0xE6DC, 0xA657},{0xE6DD, 0xA658},{0xE6DE, 0xA659},
- {0xE6DF, 0xA65A},{0xE6E0, 0xA65B},{0xE6E1, 0xA65C},{0xE6E2, 0xA65D},{0xE6E3, 0xA65E},{0xE6E4, 0xA65F},{0xE6E5, 0xA660},{0xE6E6, 0xA661},
- {0xE6E7, 0xA662},{0xE6E8, 0xA663},{0xE6E9, 0xA664},{0xE6EA, 0xA665},{0xE6EB, 0xA666},{0xE6EC, 0xA667},{0xE6ED, 0xA668},{0xE6EE, 0xA669},
- {0xE6EF, 0xA66A},{0xE6F0, 0xA66B},{0xE6F1, 0xA66C},{0xE6F2, 0xA66D},{0xE6F3, 0xA66E},{0xE6F4, 0xA66F},{0xE6F5, 0xA670},{0xE6F6, 0xA671},
- {0xE6F7, 0xA672},{0xE6F8, 0xA673},{0xE6F9, 0xA674},{0xE6FA, 0xA675},{0xE6FB, 0xA676},{0xE6FC, 0xA677},{0xE6FD, 0xA678},{0xE6FE, 0xA679},
- {0xE6FF, 0xA67A},{0xE700, 0xA67B},{0xE701, 0xA67C},{0xE702, 0xA67D},{0xE703, 0xA67E},{0xE704, 0xA680},{0xE705, 0xA681},{0xE706, 0xA682},
- {0xE707, 0xA683},{0xE708, 0xA684},{0xE709, 0xA685},{0xE70A, 0xA686},{0xE70B, 0xA687},{0xE70C, 0xA688},{0xE70D, 0xA689},{0xE70E, 0xA68A},
- {0xE70F, 0xA68B},{0xE710, 0xA68C},{0xE711, 0xA68D},{0xE712, 0xA68E},{0xE713, 0xA68F},{0xE714, 0xA690},{0xE715, 0xA691},{0xE716, 0xA692},
- {0xE717, 0xA693},{0xE718, 0xA694},{0xE719, 0xA695},{0xE71A, 0xA696},{0xE71B, 0xA697},{0xE71C, 0xA698},{0xE71D, 0xA699},{0xE71E, 0xA69A},
- {0xE71F, 0xA69B},{0xE720, 0xA69C},{0xE721, 0xA69D},{0xE722, 0xA69E},{0xE723, 0xA69F},{0xE724, 0xA6A0},{0xE725, 0xA6B9},{0xE726, 0xA6BA},
- {0xE727, 0xA6BB},{0xE728, 0xA6BC},{0xE729, 0xA6BD},{0xE72A, 0xA6BE},{0xE72B, 0xA6BF},{0xE72C, 0xA6C0},{0xE72D, 0xA6D9},{0xE72E, 0xA6DA},
- {0xE72F, 0xA6DB},{0xE730, 0xA6DC},{0xE731, 0xA6DD},{0xE732, 0xA6DE},{0xE733, 0xA6DF},{0xE734, 0xA6EC},{0xE735, 0xA6ED},{0xE736, 0xA6F3},
- {0xE737, 0xA6F6},{0xE738, 0xA6F7},{0xE739, 0xA6F8},{0xE73A, 0xA6F9},{0xE73B, 0xA6FA},{0xE73C, 0xA6FB},{0xE73D, 0xA6FC},{0xE73E, 0xA6FD},
- {0xE73F, 0xA6FE},{0xE740, 0xA740},{0xE741, 0xA741},{0xE742, 0xA742},{0xE743, 0xA743},{0xE744, 0xA744},{0xE745, 0xA745},{0xE746, 0xA746},
- {0xE747, 0xA747},{0xE748, 0xA748},{0xE749, 0xA749},{0xE74A, 0xA74A},{0xE74B, 0xA74B},{0xE74C, 0xA74C},{0xE74D, 0xA74D},{0xE74E, 0xA74E},
- {0xE74F, 0xA74F},{0xE750, 0xA750},{0xE751, 0xA751},{0xE752, 0xA752},{0xE753, 0xA753},{0xE754, 0xA754},{0xE755, 0xA755},{0xE756, 0xA756},
- {0xE757, 0xA757},{0xE758, 0xA758},{0xE759, 0xA759},{0xE75A, 0xA75A},{0xE75B, 0xA75B},{0xE75C, 0xA75C},{0xE75D, 0xA75D},{0xE75E, 0xA75E},
- {0xE75F, 0xA75F},{0xE760, 0xA760},{0xE761, 0xA761},{0xE762, 0xA762},{0xE763, 0xA763},{0xE764, 0xA764},{0xE765, 0xA765},{0xE766, 0xA766},
- {0xE767, 0xA767},{0xE768, 0xA768},{0xE769, 0xA769},{0xE76A, 0xA76A},{0xE76B, 0xA76B},{0xE76C, 0xA76C},{0xE76D, 0xA76D},{0xE76E, 0xA76E},
- {0xE76F, 0xA76F},{0xE770, 0xA770},{0xE771, 0xA771},{0xE772, 0xA772},{0xE773, 0xA773},{0xE774, 0xA774},{0xE775, 0xA775},{0xE776, 0xA776},
- {0xE777, 0xA777},{0xE778, 0xA778},{0xE779, 0xA779},{0xE77A, 0xA77A},{0xE77B, 0xA77B},{0xE77C, 0xA77C},{0xE77D, 0xA77D},{0xE77E, 0xA77E},
- {0xE77F, 0xA780},{0xE780, 0xA781},{0xE781, 0xA782},{0xE782, 0xA783},{0xE783, 0xA784},{0xE784, 0xA785},{0xE785, 0xA786},{0xE786, 0xA787},
- {0xE787, 0xA788},{0xE788, 0xA789},{0xE789, 0xA78A},{0xE78A, 0xA78B},{0xE78B, 0xA78C},{0xE78C, 0xA78D},{0xE78D, 0xA78E},{0xE78E, 0xA78F},
- {0xE78F, 0xA790},{0xE790, 0xA791},{0xE791, 0xA792},{0xE792, 0xA793},{0xE793, 0xA794},{0xE794, 0xA795},{0xE795, 0xA796},{0xE796, 0xA797},
- {0xE797, 0xA798},{0xE798, 0xA799},{0xE799, 0xA79A},{0xE79A, 0xA79B},{0xE79B, 0xA79C},{0xE79C, 0xA79D},{0xE79D, 0xA79E},{0xE79E, 0xA79F},
- {0xE79F, 0xA7A0},{0xE7A0, 0xA7C2},{0xE7A1, 0xA7C3},{0xE7A2, 0xA7C4},{0xE7A3, 0xA7C5},{0xE7A4, 0xA7C6},{0xE7A5, 0xA7C7},{0xE7A6, 0xA7C8},
- {0xE7A7, 0xA7C9},{0xE7A8, 0xA7CA},{0xE7A9, 0xA7CB},{0xE7AA, 0xA7CC},{0xE7AB, 0xA7CD},{0xE7AC, 0xA7CE},{0xE7AD, 0xA7CF},{0xE7AE, 0xA7D0},
- {0xE7AF, 0xA7F2},{0xE7B0, 0xA7F3},{0xE7B1, 0xA7F4},{0xE7B2, 0xA7F5},{0xE7B3, 0xA7F6},{0xE7B4, 0xA7F7},{0xE7B5, 0xA7F8},{0xE7B6, 0xA7F9},
- {0xE7B7, 0xA7FA},{0xE7B8, 0xA7FB},{0xE7B9, 0xA7FC},{0xE7BA, 0xA7FD},{0xE7BB, 0xA7FE},{0xE7BC, 0xA896},{0xE7BD, 0xA897},{0xE7BE, 0xA898},
- {0xE7BF, 0xA899},{0xE7C0, 0xA89A},{0xE7C1, 0xA89B},{0xE7C2, 0xA89C},{0xE7C3, 0xA89D},{0xE7C4, 0xA89E},{0xE7C5, 0xA89F},{0xE7C6, 0xA8A0},
- {0xE7C7, 0xA8BC},{0xE7C8, 0xA8BF},{0xE7C9, 0xA8C1},{0xE7CA, 0xA8C2},{0xE7CB, 0xA8C3},{0xE7CC, 0xA8C4},{0xE7CD, 0xA8EA},{0xE7CE, 0xA8EB},
- {0xE7CF, 0xA8EC},{0xE7D0, 0xA8ED},{0xE7D1, 0xA8EE},{0xE7D2, 0xA8EF},{0xE7D3, 0xA8F0},{0xE7D4, 0xA8F1},{0xE7D5, 0xA8F2},{0xE7D6, 0xA8F3},
- {0xE7D7, 0xA8F4},{0xE7D8, 0xA8F5},{0xE7D9, 0xA8F6},{0xE7DA, 0xA8F7},{0xE7DB, 0xA8F8},{0xE7DC, 0xA8F9},{0xE7DD, 0xA8FA},{0xE7DE, 0xA8FB},
- {0xE7DF, 0xA8FC},{0xE7E0, 0xA8FD},{0xE7E1, 0xA8FE},{0xE7E2, 0xA958},{0xE7E3, 0xA95B},{0xE7E4, 0xA95D},{0xE7E5, 0xA95E},{0xE7E6, 0xA95F},
- {0xE7E7, 0xA989},{0xE7E8, 0xA98A},{0xE7E9, 0xA98B},{0xE7EA, 0xA98C},{0xE7EB, 0xA98D},{0xE7EC, 0xA98E},{0xE7ED, 0xA98F},{0xE7EE, 0xA990},
- {0xE7EF, 0xA991},{0xE7F0, 0xA992},{0xE7F1, 0xA993},{0xE7F2, 0xA994},{0xE7F3, 0xA995},{0xE7F4, 0xA997},{0xE7F5, 0xA998},{0xE7F6, 0xA999},
- {0xE7F7, 0xA99A},{0xE7F8, 0xA99B},{0xE7F9, 0xA99C},{0xE7FA, 0xA99D},{0xE7FB, 0xA99E},{0xE7FC, 0xA99F},{0xE7FD, 0xA9A0},{0xE7FE, 0xA9A1},
- {0xE7FF, 0xA9A2},{0xE800, 0xA9A3},{0xE801, 0xA9F0},{0xE802, 0xA9F1},{0xE803, 0xA9F2},{0xE804, 0xA9F3},{0xE805, 0xA9F4},{0xE806, 0xA9F5},
- {0xE807, 0xA9F6},{0xE808, 0xA9F7},{0xE809, 0xA9F8},{0xE80A, 0xA9F9},{0xE80B, 0xA9FA},{0xE80C, 0xA9FB},{0xE80D, 0xA9FC},{0xE80E, 0xA9FD},
- {0xE80F, 0xA9FE},{0xE810, 0xD7FA},{0xE811, 0xD7FB},{0xE812, 0xD7FC},{0xE813, 0xD7FD},{0xE814, 0xD7FE},{0xE815, 0xFE50},{0xE816, 0xFE51},
- {0xE817, 0xFE52},{0xE818, 0xFE53},{0xE819, 0xFE54},{0xE81A, 0xFE55},{0xE81B, 0xFE56},{0xE81C, 0xFE57},{0xE81D, 0xFE58},{0xE81E, 0xFE59},
- {0xE81F, 0xFE5A},{0xE820, 0xFE5B},{0xE821, 0xFE5C},{0xE822, 0xFE5D},{0xE823, 0xFE5E},{0xE824, 0xFE5F},{0xE825, 0xFE60},{0xE826, 0xFE61},
- {0xE827, 0xFE62},{0xE828, 0xFE63},{0xE829, 0xFE64},{0xE82A, 0xFE65},{0xE82B, 0xFE66},{0xE82C, 0xFE67},{0xE82D, 0xFE68},{0xE82E, 0xFE69},
- {0xE82F, 0xFE6A},{0xE830, 0xFE6B},{0xE831, 0xFE6C},{0xE832, 0xFE6D},{0xE833, 0xFE6E},{0xE834, 0xFE6F},{0xE835, 0xFE70},{0xE836, 0xFE71},
- {0xE837, 0xFE72},{0xE838, 0xFE73},{0xE839, 0xFE74},{0xE83A, 0xFE75},{0xE83B, 0xFE76},{0xE83C, 0xFE77},{0xE83D, 0xFE78},{0xE83E, 0xFE79},
- {0xE83F, 0xFE7A},{0xE840, 0xFE7B},{0xE841, 0xFE7C},{0xE842, 0xFE7D},{0xE843, 0xFE7E},{0xE844, 0xFE80},{0xE845, 0xFE81},{0xE846, 0xFE82},
- {0xE847, 0xFE83},{0xE848, 0xFE84},{0xE849, 0xFE85},{0xE84A, 0xFE86},{0xE84B, 0xFE87},{0xE84C, 0xFE88},{0xE84D, 0xFE89},{0xE84E, 0xFE8A},
- {0xE84F, 0xFE8B},{0xE850, 0xFE8C},{0xE851, 0xFE8D},{0xE852, 0xFE8E},{0xE853, 0xFE8F},{0xE854, 0xFE90},{0xE855, 0xFE91},{0xE856, 0xFE92},
- {0xE857, 0xFE93},{0xE858, 0xFE94},{0xE859, 0xFE95},{0xE85A, 0xFE96},{0xE85B, 0xFE97},{0xE85C, 0xFE98},{0xE85D, 0xFE99},{0xE85E, 0xFE9A},
- {0xE85F, 0xFE9B},{0xE860, 0xFE9C},{0xE861, 0xFE9D},{0xE862, 0xFE9E},{0xE863, 0xFE9F},{0xE864, 0xFEA0},{0xF92C, 0xFD9C},{0xF979, 0xFD9D},
- {0xF995, 0xFD9E},{0xF9E7, 0xFD9F},{0xF9F1, 0xFDA0},{0xFA0C, 0xFE40},{0xFA0D, 0xFE41},{0xFA0E, 0xFE42},{0xFA0F, 0xFE43},{0xFA11, 0xFE44},
- {0xFA13, 0xFE45},{0xFA14, 0xFE46},{0xFA18, 0xFE47},{0xFA1F, 0xFE48},{0xFA20, 0xFE49},{0xFA21, 0xFE4A},{0xFA23, 0xFE4B},{0xFA24, 0xFE4C},
- {0xFA27, 0xFE4D},{0xFA28, 0xFE4E},{0xFA29, 0xFE4F},{0xFE30, 0xA955},{0xFE31, 0xA6F2},{0xFE33, 0xA6F4},{0xFE34, 0xA6F5},{0xFE35, 0xA6E0},
- {0xFE36, 0xA6E1},{0xFE37, 0xA6F0},{0xFE38, 0xA6F1},{0xFE39, 0xA6E2},{0xFE3A, 0xA6E3},{0xFE3B, 0xA6EE},{0xFE3C, 0xA6EF},{0xFE3D, 0xA6E6},
- {0xFE3E, 0xA6E7},{0xFE3F, 0xA6E4},{0xFE40, 0xA6E5},{0xFE41, 0xA6E8},{0xFE42, 0xA6E9},{0xFE43, 0xA6EA},{0xFE44, 0xA6EB},{0xFE49, 0xA968},
- {0xFE4A, 0xA969},{0xFE4B, 0xA96A},{0xFE4C, 0xA96B},{0xFE4D, 0xA96C},{0xFE4E, 0xA96D},{0xFE4F, 0xA96E},{0xFE50, 0xA96F},{0xFE51, 0xA970},
- {0xFE52, 0xA971},{0xFE54, 0xA972},{0xFE55, 0xA973},{0xFE56, 0xA974},{0xFE57, 0xA975},{0xFE59, 0xA976},{0xFE5A, 0xA977},{0xFE5B, 0xA978},
- {0xFE5C, 0xA979},{0xFE5D, 0xA97A},{0xFE5E, 0xA97B},{0xFE5F, 0xA97C},{0xFE60, 0xA97D},{0xFE61, 0xA97E},{0xFE62, 0xA980},{0xFE63, 0xA981},
- {0xFE64, 0xA982},{0xFE65, 0xA983},{0xFE66, 0xA984},{0xFE68, 0xA985},{0xFE69, 0xA986},{0xFE6A, 0xA987},{0xFE6B, 0xA988},{0xFF01, 0xA3A1},
- {0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA1E7},{0xFF05, 0xA3A5},{0xFF06, 0xA3A6},{0xFF07, 0xA3A7},{0xFF08, 0xA3A8},{0xFF09, 0xA3A9},
- {0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},{0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},{0xFF10, 0xA3B0},{0xFF11, 0xA3B1},
- {0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},{0xFF16, 0xA3B6},{0xFF17, 0xA3B7},{0xFF18, 0xA3B8},{0xFF19, 0xA3B9},
- {0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},{0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},{0xFF20, 0xA3C0},{0xFF21, 0xA3C1},
- {0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},{0xFF26, 0xA3C6},{0xFF27, 0xA3C7},{0xFF28, 0xA3C8},{0xFF29, 0xA3C9},
- {0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},{0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},{0xFF30, 0xA3D0},{0xFF31, 0xA3D1},
- {0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},{0xFF36, 0xA3D6},{0xFF37, 0xA3D7},{0xFF38, 0xA3D8},{0xFF39, 0xA3D9},
- {0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA3DC},{0xFF3D, 0xA3DD},{0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},{0xFF40, 0xA3E0},{0xFF41, 0xA3E1},
- {0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},{0xFF46, 0xA3E6},{0xFF47, 0xA3E7},{0xFF48, 0xA3E8},{0xFF49, 0xA3E9},
- {0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},{0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},{0xFF50, 0xA3F0},{0xFF51, 0xA3F1},
- {0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},{0xFF56, 0xA3F6},{0xFF57, 0xA3F7},{0xFF58, 0xA3F8},{0xFF59, 0xA3F9},
- {0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},{0xFF5E, 0xA1AB},{0xFFE0, 0xA1E9},{0xFFE1, 0xA1EA},{0xFFE2, 0xA956},
- {0xFFE3, 0xA3FE},{0xFFE4, 0xA957},{0xFFE5, 0xA3A4}
-};
diff --git a/vcl/source/fontsubset/u2shiftjis.inc b/vcl/source/fontsubset/u2shiftjis.inc
deleted file mode 100644
index ebc6f1676784..000000000000
--- a/vcl/source/fontsubset/u2shiftjis.inc
+++ /dev/null
@@ -1,967 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// TODO: use generic RTL_TEXTENCODING_SHIFTJIS to get rid of this file
-
-sal_uInt16pair xlat_1_2[7484] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A7, 0x8198},
- {0x00A8, 0x814E},{0x00B0, 0x818B},{0x00B1, 0x817D},{0x00B4, 0x814C},{0x00B6, 0x81F7},{0x00D7, 0x817E},{0x00F7, 0x8180},{0x0391, 0x839F},
- {0x0392, 0x83A0},{0x0393, 0x83A1},{0x0394, 0x83A2},{0x0395, 0x83A3},{0x0396, 0x83A4},{0x0397, 0x83A5},{0x0398, 0x83A6},{0x0399, 0x83A7},
- {0x039A, 0x83A8},{0x039B, 0x83A9},{0x039C, 0x83AA},{0x039D, 0x83AB},{0x039E, 0x83AC},{0x039F, 0x83AD},{0x03A0, 0x83AE},{0x03A1, 0x83AF},
- {0x03A3, 0x83B0},{0x03A4, 0x83B1},{0x03A5, 0x83B2},{0x03A6, 0x83B3},{0x03A7, 0x83B4},{0x03A8, 0x83B5},{0x03A9, 0x83B6},{0x03B1, 0x83BF},
- {0x03B2, 0x83C0},{0x03B3, 0x83C1},{0x03B4, 0x83C2},{0x03B5, 0x83C3},{0x03B6, 0x83C4},{0x03B7, 0x83C5},{0x03B8, 0x83C6},{0x03B9, 0x83C7},
- {0x03BA, 0x83C8},{0x03BB, 0x83C9},{0x03BC, 0x83CA},{0x03BD, 0x83CB},{0x03BE, 0x83CC},{0x03BF, 0x83CD},{0x03C0, 0x83CE},{0x03C1, 0x83CF},
- {0x03C3, 0x83D0},{0x03C4, 0x83D1},{0x03C5, 0x83D2},{0x03C6, 0x83D3},{0x03C7, 0x83D4},{0x03C8, 0x83D5},{0x03C9, 0x83D6},{0x0401, 0x8446},
- {0x0410, 0x8440},{0x0411, 0x8441},{0x0412, 0x8442},{0x0413, 0x8443},{0x0414, 0x8444},{0x0415, 0x8445},{0x0416, 0x8447},{0x0417, 0x8448},
- {0x0418, 0x8449},{0x0419, 0x844A},{0x041A, 0x844B},{0x041B, 0x844C},{0x041C, 0x844D},{0x041D, 0x844E},{0x041E, 0x844F},{0x041F, 0x8450},
- {0x0420, 0x8451},{0x0421, 0x8452},{0x0422, 0x8453},{0x0423, 0x8454},{0x0424, 0x8455},{0x0425, 0x8456},{0x0426, 0x8457},{0x0427, 0x8458},
- {0x0428, 0x8459},{0x0429, 0x845A},{0x042A, 0x845B},{0x042B, 0x845C},{0x042C, 0x845D},{0x042D, 0x845E},{0x042E, 0x845F},{0x042F, 0x8460},
- {0x0430, 0x8470},{0x0431, 0x8471},{0x0432, 0x8472},{0x0433, 0x8473},{0x0434, 0x8474},{0x0435, 0x8475},{0x0436, 0x8477},{0x0437, 0x8478},
- {0x0438, 0x8479},{0x0439, 0x847A},{0x043A, 0x847B},{0x043B, 0x847C},{0x043C, 0x847D},{0x043D, 0x847E},{0x043E, 0x8480},{0x043F, 0x8481},
- {0x0440, 0x8482},{0x0441, 0x8483},{0x0442, 0x8484},{0x0443, 0x8485},{0x0444, 0x8486},{0x0445, 0x8487},{0x0446, 0x8488},{0x0447, 0x8489},
- {0x0448, 0x848A},{0x0449, 0x848B},{0x044A, 0x848C},{0x044B, 0x848D},{0x044C, 0x848E},{0x044D, 0x848F},{0x044E, 0x8490},{0x044F, 0x8491},
- {0x0451, 0x8476},{0x2010, 0x815D},{0x2015, 0x815C},{0x2018, 0x8165},{0x2019, 0x8166},{0x201C, 0x8167},{0x201D, 0x8168},{0x2020, 0x81F5},
- {0x2021, 0x81F6},{0x2025, 0x8164},{0x2026, 0x8163},{0x2030, 0x81F1},{0x2032, 0x818C},{0x2033, 0x818D},{0x203B, 0x81A6},{0x2103, 0x818E},
- {0x2116, 0x8782},{0x2121, 0x8784},{0x212B, 0x81F0},{0x2160, 0x8754},{0x2161, 0x8755},{0x2162, 0x8756},{0x2163, 0x8757},{0x2164, 0x8758},
- {0x2165, 0x8759},{0x2166, 0x875A},{0x2167, 0x875B},{0x2168, 0x875C},{0x2169, 0x875D},{0x2170, 0xEEEF},{0x2171, 0xEEF0},{0x2172, 0xEEF1},
- {0x2173, 0xEEF2},{0x2174, 0xEEF3},{0x2175, 0xEEF4},{0x2176, 0xEEF5},{0x2177, 0xEEF6},{0x2178, 0xEEF7},{0x2179, 0xEEF8},{0x2190, 0x81A9},
- {0x2191, 0x81AA},{0x2192, 0x81A8},{0x2193, 0x81AB},{0x21D2, 0x81CB},{0x21D4, 0x81CC},{0x2200, 0x81CD},{0x2202, 0x81DD},{0x2203, 0x81CE},
- {0x2207, 0x81DE},{0x2208, 0x81B8},{0x220B, 0x81B9},{0x2211, 0x8794},{0x221A, 0x81E3},{0x221D, 0x81E5},{0x221E, 0x8187},{0x221F, 0x8798},
- {0x2220, 0x81DA},{0x2225, 0x8161},{0x2227, 0x81C8},{0x2228, 0x81C9},{0x2229, 0x81BF},{0x222A, 0x81BE},{0x222B, 0x81E7},{0x222C, 0x81E8},
- {0x222E, 0x8793},{0x2234, 0x8188},{0x2235, 0x81E6},{0x223D, 0x81E4},{0x2252, 0x81E0},{0x2260, 0x8182},{0x2261, 0x81DF},{0x2266, 0x8185},
- {0x2267, 0x8186},{0x226A, 0x81E1},{0x226B, 0x81E2},{0x2282, 0x81BC},{0x2283, 0x81BD},{0x2286, 0x81BA},{0x2287, 0x81BB},{0x22A5, 0x81DB},
- {0x22BF, 0x8799},{0x2312, 0x81DC},{0x2460, 0x8740},{0x2461, 0x8741},{0x2462, 0x8742},{0x2463, 0x8743},{0x2464, 0x8744},{0x2465, 0x8745},
- {0x2466, 0x8746},{0x2467, 0x8747},{0x2468, 0x8748},{0x2469, 0x8749},{0x246A, 0x874A},{0x246B, 0x874B},{0x246C, 0x874C},{0x246D, 0x874D},
- {0x246E, 0x874E},{0x246F, 0x874F},{0x2470, 0x8750},{0x2471, 0x8751},{0x2472, 0x8752},{0x2473, 0x8753},{0x2500, 0x849F},{0x2501, 0x84AA},
- {0x2502, 0x84A0},{0x2503, 0x84AB},{0x250C, 0x84A1},{0x250F, 0x84AC},{0x2510, 0x84A2},{0x2513, 0x84AD},{0x2514, 0x84A4},{0x2517, 0x84AF},
- {0x2518, 0x84A3},{0x251B, 0x84AE},{0x251C, 0x84A5},{0x251D, 0x84BA},{0x2520, 0x84B5},{0x2523, 0x84B0},{0x2524, 0x84A7},{0x2525, 0x84BC},
- {0x2528, 0x84B7},{0x252B, 0x84B2},{0x252C, 0x84A6},{0x252F, 0x84B6},{0x2530, 0x84BB},{0x2533, 0x84B1},{0x2534, 0x84A8},{0x2537, 0x84B8},
- {0x2538, 0x84BD},{0x253B, 0x84B3},{0x253C, 0x84A9},{0x253F, 0x84B9},{0x2542, 0x84BE},{0x254B, 0x84B4},{0x25A0, 0x81A1},{0x25A1, 0x81A0},
- {0x25B2, 0x81A3},{0x25B3, 0x81A2},{0x25BC, 0x81A5},{0x25BD, 0x81A4},{0x25C6, 0x819F},{0x25C7, 0x819E},{0x25CB, 0x819B},{0x25CE, 0x819D},
- {0x25CF, 0x819C},{0x25EF, 0x81FC},{0x2605, 0x819A},{0x2606, 0x8199},{0x2640, 0x818A},{0x2642, 0x8189},{0x266A, 0x81F4},{0x266D, 0x81F3},
- {0x266F, 0x81F2},{0x3000, 0x8140},{0x3001, 0x8141},{0x3002, 0x8142},{0x3003, 0x8156},{0x3005, 0x8158},{0x3006, 0x8159},{0x3007, 0x815A},
- {0x3008, 0x8171},{0x3009, 0x8172},{0x300A, 0x8173},{0x300B, 0x8174},{0x300C, 0x8175},{0x300D, 0x8176},{0x300E, 0x8177},{0x300F, 0x8178},
- {0x3010, 0x8179},{0x3011, 0x817A},{0x3012, 0x81A7},{0x3013, 0x81AC},{0x3014, 0x816B},{0x3015, 0x816C},{0x301D, 0x8780},{0x301F, 0x8781},
- {0x3041, 0x829F},{0x3042, 0x82A0},{0x3043, 0x82A1},{0x3044, 0x82A2},{0x3045, 0x82A3},{0x3046, 0x82A4},{0x3047, 0x82A5},{0x3048, 0x82A6},
- {0x3049, 0x82A7},{0x304A, 0x82A8},{0x304B, 0x82A9},{0x304C, 0x82AA},{0x304D, 0x82AB},{0x304E, 0x82AC},{0x304F, 0x82AD},{0x3050, 0x82AE},
- {0x3051, 0x82AF},{0x3052, 0x82B0},{0x3053, 0x82B1},{0x3054, 0x82B2},{0x3055, 0x82B3},{0x3056, 0x82B4},{0x3057, 0x82B5},{0x3058, 0x82B6},
- {0x3059, 0x82B7},{0x305A, 0x82B8},{0x305B, 0x82B9},{0x305C, 0x82BA},{0x305D, 0x82BB},{0x305E, 0x82BC},{0x305F, 0x82BD},{0x3060, 0x82BE},
- {0x3061, 0x82BF},{0x3062, 0x82C0},{0x3063, 0x82C1},{0x3064, 0x82C2},{0x3065, 0x82C3},{0x3066, 0x82C4},{0x3067, 0x82C5},{0x3068, 0x82C6},
- {0x3069, 0x82C7},{0x306A, 0x82C8},{0x306B, 0x82C9},{0x306C, 0x82CA},{0x306D, 0x82CB},{0x306E, 0x82CC},{0x306F, 0x82CD},{0x3070, 0x82CE},
- {0x3071, 0x82CF},{0x3072, 0x82D0},{0x3073, 0x82D1},{0x3074, 0x82D2},{0x3075, 0x82D3},{0x3076, 0x82D4},{0x3077, 0x82D5},{0x3078, 0x82D6},
- {0x3079, 0x82D7},{0x307A, 0x82D8},{0x307B, 0x82D9},{0x307C, 0x82DA},{0x307D, 0x82DB},{0x307E, 0x82DC},{0x307F, 0x82DD},{0x3080, 0x82DE},
- {0x3081, 0x82DF},{0x3082, 0x82E0},{0x3083, 0x82E1},{0x3084, 0x82E2},{0x3085, 0x82E3},{0x3086, 0x82E4},{0x3087, 0x82E5},{0x3088, 0x82E6},
- {0x3089, 0x82E7},{0x308A, 0x82E8},{0x308B, 0x82E9},{0x308C, 0x82EA},{0x308D, 0x82EB},{0x308E, 0x82EC},{0x308F, 0x82ED},{0x3090, 0x82EE},
- {0x3091, 0x82EF},{0x3092, 0x82F0},{0x3093, 0x82F1},{0x309B, 0x814A},{0x309C, 0x814B},{0x309D, 0x8154},{0x309E, 0x8155},{0x30A1, 0x8340},
- {0x30A2, 0x8341},{0x30A3, 0x8342},{0x30A4, 0x8343},{0x30A5, 0x8344},{0x30A6, 0x8345},{0x30A7, 0x8346},{0x30A8, 0x8347},{0x30A9, 0x8348},
- {0x30AA, 0x8349},{0x30AB, 0x834A},{0x30AC, 0x834B},{0x30AD, 0x834C},{0x30AE, 0x834D},{0x30AF, 0x834E},{0x30B0, 0x834F},{0x30B1, 0x8350},
- {0x30B2, 0x8351},{0x30B3, 0x8352},{0x30B4, 0x8353},{0x30B5, 0x8354},{0x30B6, 0x8355},{0x30B7, 0x8356},{0x30B8, 0x8357},{0x30B9, 0x8358},
- {0x30BA, 0x8359},{0x30BB, 0x835A},{0x30BC, 0x835B},{0x30BD, 0x835C},{0x30BE, 0x835D},{0x30BF, 0x835E},{0x30C0, 0x835F},{0x30C1, 0x8360},
- {0x30C2, 0x8361},{0x30C3, 0x8362},{0x30C4, 0x8363},{0x30C5, 0x8364},{0x30C6, 0x8365},{0x30C7, 0x8366},{0x30C8, 0x8367},{0x30C9, 0x8368},
- {0x30CA, 0x8369},{0x30CB, 0x836A},{0x30CC, 0x836B},{0x30CD, 0x836C},{0x30CE, 0x836D},{0x30CF, 0x836E},{0x30D0, 0x836F},{0x30D1, 0x8370},
- {0x30D2, 0x8371},{0x30D3, 0x8372},{0x30D4, 0x8373},{0x30D5, 0x8374},{0x30D6, 0x8375},{0x30D7, 0x8376},{0x30D8, 0x8377},{0x30D9, 0x8378},
- {0x30DA, 0x8379},{0x30DB, 0x837A},{0x30DC, 0x837B},{0x30DD, 0x837C},{0x30DE, 0x837D},{0x30DF, 0x837E},{0x30E0, 0x8380},{0x30E1, 0x8381},
- {0x30E2, 0x8382},{0x30E3, 0x8383},{0x30E4, 0x8384},{0x30E5, 0x8385},{0x30E6, 0x8386},{0x30E7, 0x8387},{0x30E8, 0x8388},{0x30E9, 0x8389},
- {0x30EA, 0x838A},{0x30EB, 0x838B},{0x30EC, 0x838C},{0x30ED, 0x838D},{0x30EE, 0x838E},{0x30EF, 0x838F},{0x30F0, 0x8390},{0x30F1, 0x8391},
- {0x30F2, 0x8392},{0x30F3, 0x8393},{0x30F4, 0x8394},{0x30F5, 0x8395},{0x30F6, 0x8396},{0x30FB, 0x8145},{0x30FC, 0x815B},{0x30FD, 0x8152},
- {0x30FE, 0x8153},{0x3231, 0x878A},{0x3232, 0x878B},{0x3239, 0x878C},{0x32A4, 0x8785},{0x32A5, 0x8786},{0x32A6, 0x8787},{0x32A7, 0x8788},
- {0x32A8, 0x8789},{0x3303, 0x8765},{0x330D, 0x8769},{0x3314, 0x8760},{0x3318, 0x8763},{0x3322, 0x8761},{0x3323, 0x876B},{0x3326, 0x876A},
- {0x3327, 0x8764},{0x332B, 0x876C},{0x3336, 0x8766},{0x333B, 0x876E},{0x3349, 0x875F},{0x334A, 0x876D},{0x334D, 0x8762},{0x3351, 0x8767},
- {0x3357, 0x8768},{0x337B, 0x877E},{0x337C, 0x878F},{0x337D, 0x878E},{0x337E, 0x878D},{0x338E, 0x8772},{0x338F, 0x8773},{0x339C, 0x876F},
- {0x339D, 0x8770},{0x339E, 0x8771},{0x33A1, 0x8775},{0x33C4, 0x8774},{0x33CD, 0x8783},{0x4E00, 0x88EA},{0x4E01, 0x929A},{0x4E03, 0x8EB5},
- {0x4E07, 0x969C},{0x4E08, 0x8FE4},{0x4E09, 0x8E4F},{0x4E0A, 0x8FE3},{0x4E0B, 0x89BA},{0x4E0D, 0x9573},{0x4E0E, 0x975E},{0x4E10, 0x98A0},
- {0x4E11, 0x894E},{0x4E14, 0x8A8E},{0x4E15, 0x98A1},{0x4E16, 0x90A2},{0x4E17, 0x99C0},{0x4E18, 0x8B75},{0x4E19, 0x95B8},{0x4E1E, 0x8FE5},
- {0x4E21, 0x97BC},{0x4E26, 0x95C0},{0x4E28, 0xED4C},{0x4E2A, 0x98A2},{0x4E2D, 0x9286},{0x4E31, 0x98A3},{0x4E32, 0x8BF8},{0x4E36, 0x98A4},
- {0x4E38, 0x8ADB},{0x4E39, 0x924F},{0x4E3B, 0x8EE5},{0x4E3C, 0x98A5},{0x4E3F, 0x98A6},{0x4E42, 0x98A7},{0x4E43, 0x9454},{0x4E45, 0x8B76},
- {0x4E4B, 0x9456},{0x4E4D, 0x93E1},{0x4E4E, 0x8CC1},{0x4E4F, 0x9652},{0x4E55, 0xE568},{0x4E56, 0x98A8},{0x4E57, 0x8FE6},{0x4E58, 0x98A9},
- {0x4E59, 0x89B3},{0x4E5D, 0x8BE3},{0x4E5E, 0x8CEE},{0x4E5F, 0x96E7},{0x4E62, 0x9BA4},{0x4E71, 0x9790},{0x4E73, 0x93FB},{0x4E7E, 0x8AA3},
- {0x4E80, 0x8B54},{0x4E82, 0x98AA},{0x4E85, 0x98AB},{0x4E86, 0x97B9},{0x4E88, 0x975C},{0x4E89, 0x9188},{0x4E8A, 0x98AD},{0x4E8B, 0x8E96},
- {0x4E8C, 0x93F1},{0x4E8E, 0x98B0},{0x4E91, 0x895D},{0x4E92, 0x8CDD},{0x4E94, 0x8CDC},{0x4E95, 0x88E4},{0x4E98, 0x986A},{0x4E99, 0x9869},
- {0x4E9B, 0x8DB1},{0x4E9C, 0x889F},{0x4E9E, 0x98B1},{0x4E9F, 0x98B2},{0x4EA0, 0x98B3},{0x4EA1, 0x9653},{0x4EA2, 0x98B4},{0x4EA4, 0x8CF0},
- {0x4EA5, 0x88E5},{0x4EA6, 0x9692},{0x4EA8, 0x8B9C},{0x4EAB, 0x8B9D},{0x4EAC, 0x8B9E},{0x4EAD, 0x92E0},{0x4EAE, 0x97BA},{0x4EB0, 0x98B5},
- {0x4EB3, 0x98B6},{0x4EB6, 0x98B7},{0x4EBA, 0x906C},{0x4EC0, 0x8F59},{0x4EC1, 0x906D},{0x4EC2, 0x98BC},{0x4EC4, 0x98BA},{0x4EC6, 0x98BB},
- {0x4EC7, 0x8B77},{0x4ECA, 0x8DA1},{0x4ECB, 0x89EE},{0x4ECD, 0x98B9},{0x4ECE, 0x98B8},{0x4ECF, 0x95A7},{0x4ED4, 0x8E65},{0x4ED5, 0x8E64},
- {0x4ED6, 0x91BC},{0x4ED7, 0x98BD},{0x4ED8, 0x9574},{0x4ED9, 0x90E5},{0x4EDD, 0x8157},{0x4EDE, 0x98BE},{0x4EDF, 0x98C0},{0x4EE1, 0xED4D},
- {0x4EE3, 0x91E3},{0x4EE4, 0x97DF},{0x4EE5, 0x88C8},{0x4EED, 0x98BF},{0x4EEE, 0x89BC},{0x4EF0, 0x8BC2},{0x4EF2, 0x9287},{0x4EF6, 0x8C8F},
- {0x4EF7, 0x98C1},{0x4EFB, 0x9443},{0x4EFC, 0xED4E},{0x4F00, 0xED4F},{0x4F01, 0x8AE9},{0x4F03, 0xED50},{0x4F09, 0x98C2},{0x4F0A, 0x88C9},
- {0x4F0D, 0x8CDE},{0x4F0E, 0x8AEA},{0x4F0F, 0x959A},{0x4F10, 0x94B0},{0x4F11, 0x8B78},{0x4F1A, 0x89EF},{0x4F1C, 0x98E5},{0x4F1D, 0x9360},
- {0x4F2F, 0x948C},{0x4F30, 0x98C4},{0x4F34, 0x94BA},{0x4F36, 0x97E0},{0x4F38, 0x904C},{0x4F39, 0xED51},{0x4F3A, 0x8E66},{0x4F3C, 0x8E97},
- {0x4F3D, 0x89BE},{0x4F43, 0x92CF},{0x4F46, 0x9241},{0x4F47, 0x98C8},{0x4F4D, 0x88CA},{0x4F4E, 0x92E1},{0x4F4F, 0x8F5A},{0x4F50, 0x8DB2},
- {0x4F51, 0x9743},{0x4F53, 0x91CC},{0x4F55, 0x89BD},{0x4F56, 0xED52},{0x4F57, 0x98C7},{0x4F59, 0x975D},{0x4F5A, 0x98C3},{0x4F5B, 0x98C5},
- {0x4F5C, 0x8DEC},{0x4F5D, 0x98C6},{0x4F5E, 0x9B43},{0x4F69, 0x98CE},{0x4F6F, 0x98D1},{0x4F70, 0x98CF},{0x4F73, 0x89C0},{0x4F75, 0x95B9},
- {0x4F76, 0x98C9},{0x4F7B, 0x98CD},{0x4F7C, 0x8CF1},{0x4F7F, 0x8E67},{0x4F83, 0x8AA4},{0x4F86, 0x98D2},{0x4F88, 0x98CA},{0x4F8A, 0xED54},
- {0x4F8B, 0x97E1},{0x4F8D, 0x8E98},{0x4F8F, 0x98CB},{0x4F91, 0x98D0},{0x4F92, 0xED53},{0x4F94, 0xED56},{0x4F96, 0x98D3},{0x4F98, 0x98CC},
- {0x4F9A, 0xED55},{0x4F9B, 0x8B9F},{0x4F9D, 0x88CB},{0x4FA0, 0x8BA0},{0x4FA1, 0x89BF},{0x4FAB, 0x9B44},{0x4FAD, 0x9699},{0x4FAE, 0x958E},
- {0x4FAF, 0x8CF2},{0x4FB5, 0x904E},{0x4FB6, 0x97B5},{0x4FBF, 0x95D6},{0x4FC2, 0x8C57},{0x4FC3, 0x91A3},{0x4FC4, 0x89E2},{0x4FC9, 0xED45},
- {0x4FCA, 0x8F72},{0x4FCD, 0xED57},{0x4FCE, 0x98D7},{0x4FD0, 0x98DC},{0x4FD1, 0x98DA},{0x4FD4, 0x98D5},{0x4FD7, 0x91AD},{0x4FD8, 0x98D8},
- {0x4FDA, 0x98DB},{0x4FDB, 0x98D9},{0x4FDD, 0x95DB},{0x4FDF, 0x98D6},{0x4FE1, 0x904D},{0x4FE3, 0x9693},{0x4FE4, 0x98DD},{0x4FE5, 0x98DE},
- {0x4FEE, 0x8F43},{0x4FEF, 0x98EB},{0x4FF3, 0x946F},{0x4FF5, 0x9555},{0x4FF6, 0x98E6},{0x4FF8, 0x95EE},{0x4FFA, 0x89B4},{0x4FFE, 0x98EA},
- {0x4FFF, 0xED5A},{0x5005, 0x98E4},{0x5006, 0x98ED},{0x5009, 0x9171},{0x500B, 0x8CC2},{0x500D, 0x947B},{0x500F, 0xE0C5},{0x5011, 0x98EC},
- {0x5012, 0x937C},{0x5014, 0x98E1},{0x5016, 0x8CF4},{0x5019, 0x8CF3},{0x501A, 0x98DF},{0x501E, 0xED5B},{0x501F, 0x8ED8},{0x5021, 0x98E7},
- {0x5022, 0xED59},{0x5023, 0x95ED},{0x5024, 0x926C},{0x5025, 0x98E3},{0x5026, 0x8C91},{0x5028, 0x98E0},{0x5029, 0x98E8},{0x502A, 0x98E2},
- {0x502B, 0x97CF},{0x502C, 0x98E9},{0x502D, 0x9860},{0x5036, 0x8BE4},{0x5039, 0x8C90},{0x5040, 0xED58},{0x5042, 0xED5E},{0x5043, 0x98EE},
- {0x5046, 0xED5C},{0x5047, 0x98EF},{0x5048, 0x98F3},{0x5049, 0x88CC},{0x504F, 0x95CE},{0x5050, 0x98F2},{0x5055, 0x98F1},{0x5056, 0x98F5},
- {0x505A, 0x98F4},{0x505C, 0x92E2},{0x5065, 0x8C92},{0x506C, 0x98F6},{0x5070, 0xED5D},{0x5072, 0x8EC3},{0x5074, 0x91A4},{0x5075, 0x92E3},
- {0x5076, 0x8BF4},{0x5078, 0x98F7},{0x507D, 0x8B55},{0x5080, 0x98F8},{0x5085, 0x98FA},{0x508D, 0x9654},{0x5091, 0x8C86},{0x5094, 0xED5F},
- {0x5098, 0x8E50},{0x5099, 0x94F5},{0x509A, 0x98F9},{0x50AC, 0x8DC3},{0x50AD, 0x9762},{0x50B2, 0x98FC},{0x50B3, 0x9942},{0x50B4, 0x98FB},
- {0x50B5, 0x8DC2},{0x50B7, 0x8F9D},{0x50BE, 0x8C58},{0x50C2, 0x9943},{0x50C5, 0x8BCD},{0x50C9, 0x9940},{0x50CA, 0x9941},{0x50CD, 0x93AD},
- {0x50CF, 0x919C},{0x50D1, 0x8BA1},{0x50D5, 0x966C},{0x50D6, 0x9944},{0x50D8, 0xED61},{0x50DA, 0x97BB},{0x50DE, 0x9945},{0x50E3, 0x9948},
- {0x50E5, 0x9946},{0x50E7, 0x916D},{0x50ED, 0x9947},{0x50EE, 0x9949},{0x50F4, 0xED60},{0x50F5, 0x994B},{0x50F9, 0x994A},{0x50FB, 0x95C6},
- {0x5100, 0x8B56},{0x5101, 0x994D},{0x5102, 0x994E},{0x5104, 0x89AD},{0x5109, 0x994C},{0x5112, 0x8EF2},{0x5114, 0x9951},{0x5115, 0x9950},
- {0x5116, 0x994F},{0x5118, 0x98D4},{0x511A, 0x9952},{0x511F, 0x8F9E},{0x5121, 0x9953},{0x512A, 0x9744},{0x5132, 0x96D7},{0x5137, 0x9955},
- {0x513A, 0x9954},{0x513B, 0x9957},{0x513C, 0x9956},{0x513F, 0x9958},{0x5140, 0x9959},{0x5141, 0x88F2},{0x5143, 0x8CB3},{0x5144, 0x8C5A},
- {0x5145, 0x8F5B},{0x5146, 0x929B},{0x5147, 0x8BA2},{0x5148, 0x90E6},{0x5149, 0x8CF5},{0x514A, 0xED62},{0x514B, 0x8D8E},{0x514C, 0x995B},
- {0x514D, 0x96C6},{0x514E, 0x9365},{0x5150, 0x8E99},{0x5152, 0x995A},{0x5154, 0x995C},{0x515A, 0x937D},{0x515C, 0x8A95},{0x5162, 0x995D},
- {0x5164, 0xED63},{0x5165, 0x93FC},{0x5168, 0x9153},{0x5169, 0x995F},{0x516A, 0x9960},{0x516B, 0x94AA},{0x516C, 0x8CF6},{0x516D, 0x985A},
- {0x516E, 0x9961},{0x5171, 0x8BA4},{0x5175, 0x95BA},{0x5176, 0x91B4},{0x5177, 0x8BEF},{0x5178, 0x9354},{0x517C, 0x8C93},{0x5180, 0x9962},
- {0x5182, 0x9963},{0x5185, 0x93E0},{0x5186, 0x897E},{0x5189, 0x9966},{0x518A, 0x8DFB},{0x518C, 0x9965},{0x518D, 0x8DC4},{0x518F, 0x9967},
- {0x5190, 0xE3EC},{0x5191, 0x9968},{0x5192, 0x9660},{0x5193, 0x9969},{0x5195, 0x996A},{0x5196, 0x996B},{0x5197, 0x8FE7},{0x5199, 0x8ECA},
- {0x519D, 0xED64},{0x51A0, 0x8AA5},{0x51A2, 0x996E},{0x51A4, 0x996C},{0x51A5, 0x96BB},{0x51A6, 0x996D},{0x51A8, 0x9579},{0x51A9, 0x996F},
- {0x51AA, 0x9970},{0x51AB, 0x9971},{0x51AC, 0x937E},{0x51B0, 0x9975},{0x51B1, 0x9973},{0x51B2, 0x9974},{0x51B3, 0x9972},{0x51B4, 0x8DE1},
- {0x51B5, 0x9976},{0x51B6, 0x96E8},{0x51B7, 0x97E2},{0x51BD, 0x9977},{0x51BE, 0xED65},{0x51C4, 0x90A6},{0x51C5, 0x9978},{0x51C6, 0x8F79},
- {0x51C9, 0x9979},{0x51CB, 0x929C},{0x51CC, 0x97BD},{0x51CD, 0x9380},{0x51D6, 0x99C3},{0x51DB, 0x997A},{0x51DC, 0xEAA3},{0x51DD, 0x8BC3},
- {0x51E0, 0x997B},{0x51E1, 0x967D},{0x51E6, 0x8F88},{0x51E7, 0x91FA},{0x51E9, 0x997D},{0x51EA, 0x93E2},{0x51EC, 0xED66},{0x51ED, 0x997E},
- {0x51F0, 0x9980},{0x51F1, 0x8A4D},{0x51F5, 0x9981},{0x51F6, 0x8BA5},{0x51F8, 0x93CA},{0x51F9, 0x899A},{0x51FA, 0x8F6F},{0x51FD, 0x949F},
- {0x51FE, 0x9982},{0x5200, 0x9381},{0x5203, 0x906E},{0x5204, 0x9983},{0x5206, 0x95AA},{0x5207, 0x90D8},{0x5208, 0x8AA0},{0x520A, 0x8AA7},
- {0x520B, 0x9984},{0x520E, 0x9986},{0x5211, 0x8C59},{0x5214, 0x9985},{0x5215, 0xED67},{0x5217, 0x97F1},{0x521D, 0x8F89},{0x5224, 0x94BB},
- {0x5225, 0x95CA},{0x5227, 0x9987},{0x5229, 0x9798},{0x522A, 0x9988},{0x522E, 0x9989},{0x5230, 0x939E},{0x5233, 0x998A},{0x5236, 0x90A7},
- {0x5237, 0x8DFC},{0x5238, 0x8C94},{0x5239, 0x998B},{0x523A, 0x8E68},{0x523B, 0x8D8F},{0x5243, 0x92E4},{0x5244, 0x998D},{0x5247, 0x91A5},
- {0x524A, 0x8DED},{0x524B, 0x998E},{0x524C, 0x998F},{0x524D, 0x914F},{0x524F, 0x998C},{0x5254, 0x9991},{0x5256, 0x9655},{0x525B, 0x8D84},
- {0x525E, 0x9990},{0x5263, 0x8C95},{0x5264, 0x8DDC},{0x5265, 0x948D},{0x5269, 0x9994},{0x526A, 0x9992},{0x526F, 0x959B},{0x5270, 0x8FE8},
- {0x5271, 0x999B},{0x5272, 0x8A84},{0x5273, 0x9995},{0x5274, 0x9993},{0x5275, 0x916E},{0x527D, 0x9997},{0x527F, 0x9996},{0x5283, 0x8A63},
- {0x5287, 0x8C80},{0x5288, 0x999C},{0x5289, 0x97AB},{0x528D, 0x9998},{0x5291, 0x999D},{0x5292, 0x999A},{0x5294, 0x9999},{0x529B, 0x97CD},
- {0x529C, 0xED68},{0x529F, 0x8CF7},{0x52A0, 0x89C1},{0x52A3, 0x97F2},{0x52A6, 0xED69},{0x52A9, 0x8F95},{0x52AA, 0x9377},{0x52AB, 0x8D85},
- {0x52AC, 0x99A0},{0x52AD, 0x99A1},{0x52AF, 0xEE5B},{0x52B1, 0x97E3},{0x52B4, 0x984A},{0x52B5, 0x99A3},{0x52B9, 0x8CF8},{0x52BC, 0x99A2},
- {0x52BE, 0x8A4E},{0x52C0, 0xED6A},{0x52C1, 0x99A4},{0x52C3, 0x9675},{0x52C5, 0x92BA},{0x52C7, 0x9745},{0x52C9, 0x95D7},{0x52CD, 0x99A5},
- {0x52D2, 0xE8D3},{0x52D5, 0x93AE},{0x52D7, 0x99A6},{0x52D8, 0x8AA8},{0x52D9, 0x96B1},{0x52DB, 0xED6B},{0x52DD, 0x8F9F},{0x52DE, 0x99A7},
- {0x52DF, 0x95E5},{0x52E0, 0x99AB},{0x52E2, 0x90A8},{0x52E3, 0x99A8},{0x52E4, 0x8BCE},{0x52E6, 0x99A9},{0x52E7, 0x8AA9},{0x52F2, 0x8C4D},
- {0x52F3, 0x99AC},{0x52F5, 0x99AD},{0x52F8, 0x99AE},{0x52F9, 0x99AF},{0x52FA, 0x8ED9},{0x52FE, 0x8CF9},{0x52FF, 0x96DC},{0x5300, 0xED6C},
- {0x5301, 0x96E6},{0x5302, 0x93F5},{0x5305, 0x95EF},{0x5306, 0x99B0},{0x5307, 0xED6D},{0x5308, 0x99B1},{0x530D, 0x99B3},{0x530F, 0x99B5},
- {0x5310, 0x99B4},{0x5315, 0x99B6},{0x5316, 0x89BB},{0x5317, 0x966B},{0x5319, 0x8DFA},{0x531A, 0x99B7},{0x531D, 0x9178},{0x5320, 0x8FA0},
- {0x5321, 0x8BA7},{0x5323, 0x99B8},{0x5324, 0xED6E},{0x532A, 0x94D9},{0x532F, 0x99B9},{0x5331, 0x99BA},{0x5333, 0x99BB},{0x5338, 0x99BC},
- {0x5339, 0x9543},{0x533A, 0x8BE6},{0x533B, 0x88E3},{0x533F, 0x93BD},{0x5340, 0x99BD},{0x5341, 0x8F5C},{0x5343, 0x90E7},{0x5345, 0x99BF},
- {0x5346, 0x99BE},{0x5347, 0x8FA1},{0x5348, 0x8CDF},{0x5349, 0x99C1},{0x534A, 0x94BC},{0x534D, 0x99C2},{0x5351, 0x94DA},{0x5352, 0x91B2},
- {0x5353, 0x91EC},{0x5354, 0x8BA6},{0x5357, 0x93EC},{0x5358, 0x9250},{0x535A, 0x948E},{0x535C, 0x966D},{0x535E, 0x99C4},{0x5360, 0x90E8},
- {0x5366, 0x8C54},{0x5369, 0x99C5},{0x536E, 0x99C6},{0x536F, 0x894B},{0x5370, 0x88F3},{0x5371, 0x8AEB},{0x5372, 0xED6F},{0x5373, 0x91A6},
- {0x5374, 0x8B70},{0x5375, 0x9791},{0x5377, 0x99C9},{0x5378, 0x89B5},{0x537B, 0x99C8},{0x537F, 0x8BA8},{0x5382, 0x99CA},{0x5384, 0x96EF},
- {0x5393, 0xED70},{0x5396, 0x99CB},{0x5398, 0x97D0},{0x539A, 0x8CFA},{0x539F, 0x8CB4},{0x53A0, 0x99CC},{0x53A5, 0x99CE},{0x53A6, 0x99CD},
- {0x53A8, 0x907E},{0x53A9, 0x8958},{0x53AD, 0x897D},{0x53AE, 0x99CF},{0x53B0, 0x99D0},{0x53B2, 0xED71},{0x53B3, 0x8CB5},{0x53B6, 0x99D1},
- {0x53BB, 0x8B8E},{0x53C2, 0x8E51},{0x53C3, 0x99D2},{0x53C8, 0x9694},{0x53C9, 0x8DB3},{0x53CA, 0x8B79},{0x53CB, 0x9746},{0x53CC, 0x916F},
- {0x53CD, 0x94BD},{0x53CE, 0x8EFB},{0x53D4, 0x8F66},{0x53D6, 0x8EE6},{0x53D7, 0x8EF3},{0x53D9, 0x8F96},{0x53DB, 0x94BE},{0x53DD, 0xED72},
- {0x53DF, 0x99D5},{0x53E1, 0x8962},{0x53E2, 0x9170},{0x53E3, 0x8CFB},{0x53E4, 0x8CC3},{0x53E5, 0x8BE5},{0x53E8, 0x99D9},{0x53E9, 0x9240},
- {0x53EA, 0x91FC},{0x53EB, 0x8BA9},{0x53EC, 0x8FA2},{0x53ED, 0x99DA},{0x53EE, 0x99D8},{0x53EF, 0x89C2},{0x53F0, 0x91E4},{0x53F1, 0x8EB6},
- {0x53F2, 0x8E6A},{0x53F3, 0x8945},{0x53F6, 0x8A90},{0x53F7, 0x8D86},{0x53F8, 0x8E69},{0x53FA, 0x99DB},{0x5401, 0x99DC},{0x5403, 0x8B68},
- {0x5404, 0x8A65},{0x5408, 0x8D87},{0x5409, 0x8B67},{0x540A, 0x92DD},{0x540B, 0x8944},{0x540C, 0x93AF},{0x540D, 0x96BC},{0x540E, 0x8D40},
- {0x540F, 0x9799},{0x5410, 0x9366},{0x5411, 0x8CFC},{0x541B, 0x8C4E},{0x541D, 0x99E5},{0x541F, 0x8BE1},{0x5420, 0x9669},{0x5426, 0x94DB},
- {0x5429, 0x99E4},{0x542B, 0x8ADC},{0x542C, 0x99DF},{0x542D, 0x99E0},{0x542E, 0x99E2},{0x5436, 0x99E3},{0x5438, 0x8B7A},{0x5439, 0x9081},
- {0x543B, 0x95AB},{0x543C, 0x99E1},{0x543D, 0x99DD},{0x543E, 0x8CE1},{0x5440, 0x99DE},{0x5442, 0x9843},{0x5446, 0x95F0},{0x5448, 0x92E6},
- {0x5449, 0x8CE0},{0x544A, 0x8D90},{0x544E, 0x99E6},{0x5451, 0x93DB},{0x545F, 0x99EA},{0x5468, 0x8EFC},{0x546A, 0x8EF4},{0x5470, 0x99ED},
- {0x5471, 0x99EB},{0x5473, 0x96A1},{0x5475, 0x99E8},{0x5476, 0x99F1},{0x5477, 0x99EC},{0x547B, 0x99EF},{0x547C, 0x8CC4},{0x547D, 0x96BD},
- {0x5480, 0x99F0},{0x5484, 0x99F2},{0x5486, 0x99F4},{0x548A, 0xED75},{0x548B, 0x8DEE},{0x548C, 0x9861},{0x548E, 0x99E9},{0x548F, 0x99E7},
- {0x5490, 0x99F3},{0x5492, 0x99EE},{0x549C, 0xED74},{0x54A2, 0x99F6},{0x54A4, 0x9A42},{0x54A5, 0x99F8},{0x54A8, 0x99FC},{0x54A9, 0xED76},
- {0x54AB, 0x9A40},{0x54AC, 0x99F9},{0x54AF, 0x9A5D},{0x54B2, 0x8DE7},{0x54B3, 0x8A50},{0x54B8, 0x99F7},{0x54BC, 0x9A44},{0x54BD, 0x88F4},
- {0x54BE, 0x9A43},{0x54C0, 0x88A3},{0x54C1, 0x9569},{0x54C2, 0x9A41},{0x54C4, 0x99FA},{0x54C7, 0x99F5},{0x54C8, 0x99FB},{0x54C9, 0x8DC6},
- {0x54D8, 0x9A45},{0x54E1, 0x88F5},{0x54E2, 0x9A4E},{0x54E5, 0x9A46},{0x54E6, 0x9A47},{0x54E8, 0x8FA3},{0x54E9, 0x9689},{0x54ED, 0x9A4C},
- {0x54EE, 0x9A4B},{0x54F2, 0x934E},{0x54FA, 0x9A4D},{0x54FD, 0x9A4A},{0x54FF, 0xED77},{0x5504, 0x8953},{0x5506, 0x8DB4},{0x5507, 0x904F},
- {0x550F, 0x9A48},{0x5510, 0x9382},{0x5514, 0x9A49},{0x5516, 0x88A0},{0x552E, 0x9A53},{0x552F, 0x9742},{0x5531, 0x8FA5},{0x5533, 0x9A59},
- {0x5538, 0x9A58},{0x5539, 0x9A4F},{0x553E, 0x91C1},{0x5540, 0x9A50},{0x5544, 0x91ED},{0x5545, 0x9A55},{0x5546, 0x8FA4},{0x554C, 0x9A52},
- {0x554F, 0x96E2},{0x5553, 0x8C5B},{0x5556, 0x9A56},{0x5557, 0x9A57},{0x555C, 0x9A54},{0x555D, 0x9A5A},{0x5563, 0x9A51},{0x557B, 0x9A60},
- {0x557C, 0x9A65},{0x557E, 0x9A61},{0x5580, 0x9A5C},{0x5583, 0x9A66},{0x5584, 0x9150},{0x5586, 0xED78},{0x5587, 0x9A68},{0x5589, 0x8D41},
- {0x558A, 0x9A5E},{0x558B, 0x929D},{0x5598, 0x9A62},{0x5599, 0x9A5B},{0x559A, 0x8AAB},{0x559C, 0x8AEC},{0x559D, 0x8A85},{0x559E, 0x9A63},
- {0x559F, 0x9A5F},{0x55A7, 0x8C96},{0x55A8, 0x9A69},{0x55A9, 0x9A67},{0x55AA, 0x9172},{0x55AB, 0x8B69},{0x55AC, 0x8BAA},{0x55AE, 0x9A64},
- {0x55B0, 0x8BF2},{0x55B6, 0x8963},{0x55C4, 0x9A6D},{0x55C5, 0x9A6B},{0x55C7, 0x9AA5},{0x55D4, 0x9A70},{0x55DA, 0x9A6A},{0x55DC, 0x9A6E},
- {0x55DF, 0x9A6C},{0x55E3, 0x8E6B},{0x55E4, 0x9A6F},{0x55F7, 0x9A72},{0x55F9, 0x9A77},{0x55FD, 0x9A75},{0x55FE, 0x9A74},{0x5606, 0x9251},
- {0x5609, 0x89C3},{0x5614, 0x9A71},{0x5616, 0x9A73},{0x5617, 0x8FA6},{0x5618, 0x8952},{0x561B, 0x9A76},{0x5629, 0x89DC},{0x562F, 0x9A82},
- {0x5631, 0x8FFA},{0x5632, 0x9A7D},{0x5634, 0x9A7B},{0x5636, 0x9A7C},{0x5638, 0x9A7E},{0x5642, 0x895C},{0x564C, 0x9158},{0x564E, 0x9A78},
- {0x5650, 0x9A79},{0x565B, 0x8A9A},{0x5664, 0x9A81},{0x5668, 0x8AED},{0x566A, 0x9A84},{0x566B, 0x9A80},{0x566C, 0x9A83},{0x5674, 0x95AC},
- {0x5678, 0x93D3},{0x567A, 0x94B6},{0x5680, 0x9A86},{0x5686, 0x9A85},{0x5687, 0x8A64},{0x568A, 0x9A87},{0x568F, 0x9A8A},{0x5694, 0x9A89},
- {0x56A0, 0x9A88},{0x56A2, 0x9458},{0x56A5, 0x9A8B},{0x56AE, 0x9A8C},{0x56B4, 0x9A8E},{0x56B6, 0x9A8D},{0x56BC, 0x9A90},{0x56C0, 0x9A93},
- {0x56C1, 0x9A91},{0x56C2, 0x9A8F},{0x56C3, 0x9A92},{0x56C8, 0x9A94},{0x56CE, 0x9A95},{0x56D1, 0x9A96},{0x56D3, 0x9A97},{0x56D7, 0x9A98},
- {0x56D8, 0x9964},{0x56DA, 0x8EFA},{0x56DB, 0x8E6C},{0x56DE, 0x89F1},{0x56E0, 0x88F6},{0x56E3, 0x9263},{0x56EE, 0x9A99},{0x56F0, 0x8DA2},
- {0x56F2, 0x88CD},{0x56F3, 0x907D},{0x56F9, 0x9A9A},{0x56FA, 0x8CC5},{0x56FD, 0x8D91},{0x56FF, 0x9A9C},{0x5700, 0x9A9B},{0x5703, 0x95DE},
- {0x5704, 0x9A9D},{0x5708, 0x9A9F},{0x5709, 0x9A9E},{0x570B, 0x9AA0},{0x570D, 0x9AA1},{0x570F, 0x8C97},{0x5712, 0x8980},{0x5713, 0x9AA2},
- {0x5716, 0x9AA4},{0x5718, 0x9AA3},{0x571C, 0x9AA6},{0x571F, 0x9379},{0x5726, 0x9AA7},{0x5727, 0x88B3},{0x5728, 0x8DDD},{0x572D, 0x8C5C},
- {0x5730, 0x926E},{0x5737, 0x9AA8},{0x5738, 0x9AA9},{0x573B, 0x9AAB},{0x5740, 0x9AAC},{0x5742, 0x8DE2},{0x5747, 0x8BCF},{0x574A, 0x9656},
- {0x574E, 0x9AAA},{0x574F, 0x9AAD},{0x5750, 0x8DBF},{0x5751, 0x8D42},{0x5759, 0xED79},{0x5761, 0x9AB1},{0x5764, 0x8DA3},{0x5765, 0xED7A},
- {0x5766, 0x9252},{0x5769, 0x9AAE},{0x576A, 0x92D8},{0x577F, 0x9AB2},{0x5782, 0x9082},{0x5788, 0x9AB0},{0x5789, 0x9AB3},{0x578B, 0x8C5E},
- {0x5793, 0x9AB4},{0x57A0, 0x9AB5},{0x57A2, 0x8D43},{0x57A3, 0x8A5F},{0x57A4, 0x9AB7},{0x57AA, 0x9AB8},{0x57AC, 0xED7B},{0x57B0, 0x9AB9},
- {0x57B3, 0x9AB6},{0x57C0, 0x9AAF},{0x57C3, 0x9ABA},{0x57C6, 0x9ABB},{0x57C7, 0xED7D},{0x57C8, 0xED7C},{0x57CB, 0x9684},{0x57CE, 0x8FE9},
- {0x57D2, 0x9ABD},{0x57D3, 0x9ABE},{0x57D4, 0x9ABC},{0x57D6, 0x9AC0},{0x57DC, 0x9457},{0x57DF, 0x88E6},{0x57E0, 0x9575},{0x57E3, 0x9AC1},
- {0x57F4, 0x8FFB},{0x57F7, 0x8EB7},{0x57F9, 0x947C},{0x57FA, 0x8AEE},{0x57FC, 0x8DE9},{0x5800, 0x9678},{0x5802, 0x93B0},{0x5805, 0x8C98},
- {0x5806, 0x91CD},{0x580A, 0x9ABF},{0x580B, 0x9AC2},{0x5815, 0x91C2},{0x5819, 0x9AC3},{0x581D, 0x9AC4},{0x5821, 0x9AC6},{0x5824, 0x92E7},
- {0x582A, 0x8AAC},{0x582F, 0xEA9F},{0x5830, 0x8981},{0x5831, 0x95F1},{0x5834, 0x8FEA},{0x5835, 0x9367},{0x583A, 0x8DE4},{0x583D, 0x9ACC},
- {0x5840, 0x95BB},{0x5841, 0x97DB},{0x584A, 0x89F2},{0x584B, 0x9AC8},{0x5851, 0x9159},{0x5852, 0x9ACB},{0x5854, 0x9383},{0x5857, 0x9368},
- {0x5858, 0x9384},{0x5859, 0x94B7},{0x585A, 0x92CB},{0x585E, 0x8DC7},{0x5862, 0x9AC7},{0x5869, 0x8996},{0x586B, 0x9355},{0x5870, 0x9AC9},
- {0x5872, 0x9AC5},{0x5875, 0x906F},{0x5879, 0x9ACD},{0x587E, 0x8F6D},{0x5883, 0x8BAB},{0x5885, 0x9ACE},{0x5893, 0x95E6},{0x5897, 0x919D},
- {0x589C, 0x92C4},{0x589E, 0xED81},{0x589F, 0x9AD0},{0x58A8, 0x966E},{0x58AB, 0x9AD1},{0x58AE, 0x9AD6},{0x58B2, 0xED82},{0x58B3, 0x95AD},
- {0x58B8, 0x9AD5},{0x58B9, 0x9ACF},{0x58BA, 0x9AD2},{0x58BB, 0x9AD4},{0x58BE, 0x8DA4},{0x58C1, 0x95C7},{0x58C5, 0x9AD7},{0x58C7, 0x9264},
- {0x58CA, 0x89F3},{0x58CC, 0x8FEB},{0x58D1, 0x9AD9},{0x58D3, 0x9AD8},{0x58D5, 0x8D88},{0x58D7, 0x9ADA},{0x58D8, 0x9ADC},{0x58D9, 0x9ADB},
- {0x58DC, 0x9ADE},{0x58DE, 0x9AD3},{0x58DF, 0x9AE0},{0x58E4, 0x9ADF},{0x58E5, 0x9ADD},{0x58EB, 0x8E6D},{0x58EC, 0x9070},{0x58EE, 0x9173},
- {0x58EF, 0x9AE1},{0x58F0, 0x90BA},{0x58F1, 0x88EB},{0x58F2, 0x9484},{0x58F7, 0x92D9},{0x58F9, 0x9AE3},{0x58FA, 0x9AE2},{0x58FB, 0x9AE4},
- {0x58FC, 0x9AE5},{0x58FD, 0x9AE6},{0x5902, 0x9AE7},{0x5909, 0x95CF},{0x590A, 0x9AE8},{0x590B, 0xED83},{0x590F, 0x89C4},{0x5910, 0x9AE9},
- {0x5915, 0x975B},{0x5916, 0x8A4F},{0x5918, 0x99C7},{0x5919, 0x8F67},{0x591A, 0x91BD},{0x591B, 0x9AEA},{0x591C, 0x96E9},{0x5922, 0x96B2},
- {0x5925, 0x9AEC},{0x5927, 0x91E5},{0x5929, 0x9356},{0x592A, 0x91BE},{0x592B, 0x9576},{0x592C, 0x9AED},{0x592D, 0x9AEE},{0x592E, 0x899B},
- {0x5931, 0x8EB8},{0x5932, 0x9AEF},{0x5937, 0x88CE},{0x5938, 0x9AF0},{0x593E, 0x9AF1},{0x5944, 0x8982},{0x5947, 0x8AEF},{0x5948, 0x93DE},
- {0x5949, 0x95F2},{0x594E, 0x9AF5},{0x594F, 0x9174},{0x5950, 0x9AF4},{0x5951, 0x8C5F},{0x5953, 0xED84},{0x5954, 0x967A},{0x5955, 0x9AF3},
- {0x5957, 0x9385},{0x5958, 0x9AF7},{0x595A, 0x9AF6},{0x595B, 0xED85},{0x595D, 0xED86},{0x5960, 0x9AF9},{0x5962, 0x9AF8},{0x5963, 0xED87},
- {0x5965, 0x899C},{0x5967, 0x9AFA},{0x5968, 0x8FA7},{0x5969, 0x9AFC},{0x596A, 0x9244},{0x596C, 0x9AFB},{0x596E, 0x95B1},{0x5973, 0x8F97},
- {0x5974, 0x937A},{0x5978, 0x9B40},{0x597D, 0x8D44},{0x5981, 0x9B41},{0x5982, 0x9440},{0x5983, 0x94DC},{0x5984, 0x96CF},{0x598A, 0x9444},
- {0x598D, 0x9B4A},{0x5993, 0x8B57},{0x5996, 0x9764},{0x5999, 0x96AD},{0x599B, 0x9BAA},{0x599D, 0x9B42},{0x59A3, 0x9B45},{0x59A4, 0xED88},
- {0x59A5, 0x91C3},{0x59A8, 0x9657},{0x59AC, 0x9369},{0x59B2, 0x9B46},{0x59B9, 0x9685},{0x59BA, 0xED89},{0x59BB, 0x8DC8},{0x59BE, 0x8FA8},
- {0x59C6, 0x9B47},{0x59C9, 0x8E6F},{0x59CB, 0x8E6E},{0x59D0, 0x88B7},{0x59D1, 0x8CC6},{0x59D3, 0x90A9},{0x59D4, 0x88CF},{0x59D9, 0x9B4B},
- {0x59DA, 0x9B4C},{0x59DC, 0x9B49},{0x59E5, 0x8957},{0x59E6, 0x8AAD},{0x59E8, 0x9B48},{0x59EA, 0x96C3},{0x59EB, 0x9550},{0x59F6, 0x88A6},
- {0x59FB, 0x88F7},{0x59FF, 0x8E70},{0x5A01, 0x88D0},{0x5A03, 0x88A1},{0x5A09, 0x9B51},{0x5A11, 0x9B4F},{0x5A18, 0x96BA},{0x5A1A, 0x9B52},
- {0x5A1C, 0x9B50},{0x5A1F, 0x9B4E},{0x5A20, 0x9050},{0x5A25, 0x9B4D},{0x5A29, 0x95D8},{0x5A2F, 0x8CE2},{0x5A35, 0x9B56},{0x5A36, 0x9B57},
- {0x5A3C, 0x8FA9},{0x5A40, 0x9B53},{0x5A41, 0x984B},{0x5A46, 0x946B},{0x5A49, 0x9B55},{0x5A5A, 0x8DA5},{0x5A62, 0x9B58},{0x5A66, 0x9577},
- {0x5A6A, 0x9B59},{0x5A6C, 0x9B54},{0x5A7F, 0x96B9},{0x5A92, 0x947D},{0x5A9A, 0x9B5A},{0x5A9B, 0x9551},{0x5ABC, 0x9B5B},{0x5ABD, 0x9B5F},
- {0x5ABE, 0x9B5C},{0x5AC1, 0x89C5},{0x5AC2, 0x9B5E},{0x5AC9, 0x8EB9},{0x5ACB, 0x9B5D},{0x5ACC, 0x8C99},{0x5AD0, 0x9B6B},{0x5AD6, 0x9B64},
- {0x5AD7, 0x9B61},{0x5AE1, 0x9284},{0x5AE3, 0x9B60},{0x5AE6, 0x9B62},{0x5AE9, 0x9B63},{0x5AFA, 0x9B65},{0x5AFB, 0x9B66},{0x5B09, 0x8AF0},
- {0x5B0B, 0x9B68},{0x5B0C, 0x9B67},{0x5B16, 0x9B69},{0x5B22, 0x8FEC},{0x5B2A, 0x9B6C},{0x5B2C, 0x92DA},{0x5B30, 0x8964},{0x5B32, 0x9B6A},
- {0x5B36, 0x9B6D},{0x5B3E, 0x9B6E},{0x5B40, 0x9B71},{0x5B43, 0x9B6F},{0x5B45, 0x9B70},{0x5B50, 0x8E71},{0x5B51, 0x9B72},{0x5B54, 0x8D45},
- {0x5B55, 0x9B73},{0x5B56, 0xED8A},{0x5B57, 0x8E9A},{0x5B58, 0x91B6},{0x5B5A, 0x9B74},{0x5B5B, 0x9B75},{0x5B5C, 0x8E79},{0x5B5D, 0x8D46},
- {0x5B5F, 0x96D0},{0x5B63, 0x8B47},{0x5B64, 0x8CC7},{0x5B65, 0x9B76},{0x5B66, 0x8A77},{0x5B69, 0x9B77},{0x5B6B, 0x91B7},{0x5B70, 0x9B78},
- {0x5B71, 0x9BA1},{0x5B73, 0x9B79},{0x5B75, 0x9B7A},{0x5B78, 0x9B7B},{0x5B7A, 0x9B7D},{0x5B80, 0x9B7E},{0x5B83, 0x9B80},{0x5B85, 0x91EE},
- {0x5B87, 0x8946},{0x5B88, 0x8EE7},{0x5B89, 0x88C0},{0x5B8B, 0x9176},{0x5B8C, 0x8AAE},{0x5B8D, 0x8EB3},{0x5B8F, 0x8D47},{0x5B95, 0x9386},
- {0x5B97, 0x8F40},{0x5B98, 0x8AAF},{0x5B99, 0x9288},{0x5B9A, 0x92E8},{0x5B9B, 0x88B6},{0x5B9C, 0x8B58},{0x5B9D, 0x95F3},{0x5B9F, 0x8EC0},
- {0x5BA2, 0x8B71},{0x5BA3, 0x90E9},{0x5BA4, 0x8EBA},{0x5BA5, 0x9747},{0x5BA6, 0x9B81},{0x5BAE, 0x8B7B},{0x5BB0, 0x8DC9},{0x5BB3, 0x8A51},
- {0x5BB4, 0x8983},{0x5BB5, 0x8FAA},{0x5BB6, 0x89C6},{0x5BB8, 0x9B82},{0x5BB9, 0x9765},{0x5BBF, 0x8F68},{0x5BC0, 0xED8B},{0x5BC2, 0x8EE2},
- {0x5BC3, 0x9B83},{0x5BC4, 0x8AF1},{0x5BC5, 0x93D0},{0x5BC6, 0x96A7},{0x5BC7, 0x9B84},{0x5BC9, 0x9B85},{0x5BCC, 0x9578},{0x5BD0, 0x9B87},
- {0x5BD2, 0x8AA6},{0x5BD3, 0x8BF5},{0x5BD4, 0x9B86},{0x5BD8, 0xED8D},{0x5BDB, 0x8AB0},{0x5BDD, 0x9051},{0x5BDE, 0x9B8B},{0x5BDF, 0x8E40},
- {0x5BE1, 0x89C7},{0x5BE2, 0x9B8A},{0x5BE4, 0x9B88},{0x5BE5, 0x9B8C},{0x5BE6, 0x9B89},{0x5BE7, 0x944A},{0x5BE8, 0x9ECB},{0x5BE9, 0x9052},
- {0x5BEB, 0x9B8D},{0x5BEC, 0xED8E},{0x5BEE, 0x97BE},{0x5BF0, 0x9B8E},{0x5BF3, 0x9B90},{0x5BF5, 0x929E},{0x5BF6, 0x9B8F},{0x5BF8, 0x90A1},
- {0x5BFA, 0x8E9B},{0x5BFE, 0x91CE},{0x5BFF, 0x8EF5},{0x5C01, 0x9595},{0x5C02, 0x90EA},{0x5C04, 0x8ECB},{0x5C05, 0x9B91},{0x5C06, 0x8FAB},
- {0x5C07, 0x9B92},{0x5C08, 0x9B93},{0x5C09, 0x88D1},{0x5C0A, 0x91B8},{0x5C0B, 0x9071},{0x5C0D, 0x9B94},{0x5C0E, 0x93B1},{0x5C0F, 0x8FAC},
- {0x5C11, 0x8FAD},{0x5C13, 0x9B95},{0x5C16, 0x90EB},{0x5C1A, 0x8FAE},{0x5C1E, 0xED8F},{0x5C20, 0x9B96},{0x5C22, 0x9B97},{0x5C24, 0x96DE},
- {0x5C28, 0x9B98},{0x5C2D, 0x8BC4},{0x5C31, 0x8F41},{0x5C38, 0x9B99},{0x5C39, 0x9B9A},{0x5C3A, 0x8EDA},{0x5C3B, 0x904B},{0x5C3C, 0x93F2},
- {0x5C3D, 0x9073},{0x5C3E, 0x94F6},{0x5C3F, 0x9441},{0x5C40, 0x8BC7},{0x5C41, 0x9B9B},{0x5C45, 0x8B8F},{0x5C46, 0x9B9C},{0x5C48, 0x8BFC},
- {0x5C4A, 0x93CD},{0x5C4B, 0x89AE},{0x5C4D, 0x8E72},{0x5C4E, 0x9B9D},{0x5C4F, 0x9BA0},{0x5C50, 0x9B9F},{0x5C51, 0x8BFB},{0x5C53, 0x9B9E},
- {0x5C55, 0x9357},{0x5C5E, 0x91AE},{0x5C60, 0x936A},{0x5C61, 0x8EC6},{0x5C64, 0x9177},{0x5C65, 0x979A},{0x5C6C, 0x9BA2},{0x5C6E, 0x9BA3},
- {0x5C6F, 0x93D4},{0x5C71, 0x8E52},{0x5C76, 0x9BA5},{0x5C79, 0x9BA6},{0x5C8C, 0x9BA7},{0x5C90, 0x8AF2},{0x5C91, 0x9BA8},{0x5C94, 0x9BA9},
- {0x5CA1, 0x89AA},{0x5CA6, 0xED90},{0x5CA8, 0x915A},{0x5CA9, 0x8AE2},{0x5CAB, 0x9BAB},{0x5CAC, 0x96A6},{0x5CB1, 0x91D0},{0x5CB3, 0x8A78},
- {0x5CB6, 0x9BAD},{0x5CB7, 0x9BAF},{0x5CB8, 0x8ADD},{0x5CBA, 0xED91},{0x5CBB, 0x9BAC},{0x5CBC, 0x9BAE},{0x5CBE, 0x9BB1},{0x5CC5, 0x9BB0},
- {0x5CC7, 0x9BB2},{0x5CD9, 0x9BB3},{0x5CE0, 0x93BB},{0x5CE1, 0x8BAC},{0x5CE8, 0x89E3},{0x5CE9, 0x9BB4},{0x5CEA, 0x9BB9},{0x5CED, 0x9BB7},
- {0x5CEF, 0x95F5},{0x5CF0, 0x95F4},{0x5CF5, 0xED92},{0x5CF6, 0x9387},{0x5CFA, 0x9BB6},{0x5CFB, 0x8F73},{0x5CFD, 0x9BB5},{0x5D07, 0x9092},
- {0x5D0B, 0x9BBA},{0x5D0E, 0x8DE8},{0x5D11, 0x9BC0},{0x5D14, 0x9BC1},{0x5D15, 0x9BBB},{0x5D16, 0x8A52},{0x5D17, 0x9BBC},{0x5D18, 0x9BC5},
- {0x5D19, 0x9BC4},{0x5D1A, 0x9BC3},{0x5D1B, 0x9BBF},{0x5D1F, 0x9BBE},{0x5D22, 0x9BC2},{0x5D27, 0xED93},{0x5D29, 0x95F6},{0x5D42, 0xED96},
- {0x5D4B, 0x9BC9},{0x5D4C, 0x9BC6},{0x5D4E, 0x9BC8},{0x5D50, 0x9792},{0x5D52, 0x9BC7},{0x5D53, 0xED94},{0x5D5C, 0x9BBD},{0x5D69, 0x9093},
- {0x5D6C, 0x9BCA},{0x5D6D, 0xED97},{0x5D6F, 0x8DB5},{0x5D73, 0x9BCB},{0x5D76, 0x9BCC},{0x5D82, 0x9BCF},{0x5D84, 0x9BCE},{0x5D87, 0x9BCD},
- {0x5D8B, 0x9388},{0x5D8C, 0x9BB8},{0x5D90, 0x9BD5},{0x5D9D, 0x9BD1},{0x5DA2, 0x9BD0},{0x5DAC, 0x9BD2},{0x5DAE, 0x9BD3},{0x5DB7, 0x9BD6},
- {0x5DB8, 0xED98},{0x5DB9, 0xED99},{0x5DBA, 0x97E4},{0x5DBC, 0x9BD7},{0x5DBD, 0x9BD4},{0x5DC9, 0x9BD8},{0x5DCC, 0x8ADE},{0x5DCD, 0x9BD9},
- {0x5DD0, 0xED9A},{0x5DD2, 0x9BDB},{0x5DD3, 0x9BDA},{0x5DD6, 0x9BDC},{0x5DDB, 0x9BDD},{0x5DDD, 0x90EC},{0x5DDE, 0x8F42},{0x5DE1, 0x8F84},
- {0x5DE3, 0x9183},{0x5DE5, 0x8D48},{0x5DE6, 0x8DB6},{0x5DE7, 0x8D49},{0x5DE8, 0x8B90},{0x5DEB, 0x9BDE},{0x5DEE, 0x8DB7},{0x5DF1, 0x8CC8},
- {0x5DF2, 0x9BDF},{0x5DF3, 0x96A4},{0x5DF4, 0x9462},{0x5DF5, 0x9BE0},{0x5DF7, 0x8D4A},{0x5DFB, 0x8AAA},{0x5DFD, 0x9246},{0x5DFE, 0x8BD0},
- {0x5E02, 0x8E73},{0x5E03, 0x957A},{0x5E06, 0x94BF},{0x5E0B, 0x9BE1},{0x5E0C, 0x8AF3},{0x5E11, 0x9BE4},{0x5E16, 0x929F},{0x5E19, 0x9BE3},
- {0x5E1A, 0x9BE2},{0x5E1B, 0x9BE5},{0x5E1D, 0x92E9},{0x5E25, 0x9083},{0x5E2B, 0x8E74},{0x5E2D, 0x90C8},{0x5E2F, 0x91D1},{0x5E30, 0x8B41},
- {0x5E33, 0x92A0},{0x5E36, 0x9BE6},{0x5E37, 0x9BE7},{0x5E38, 0x8FED},{0x5E3D, 0x9658},{0x5E40, 0x9BEA},{0x5E43, 0x9BE9},{0x5E44, 0x9BE8},
- {0x5E45, 0x959D},{0x5E47, 0x9BF1},{0x5E4C, 0x9679},{0x5E4E, 0x9BEB},{0x5E54, 0x9BED},{0x5E55, 0x968B},{0x5E57, 0x9BEC},{0x5E5F, 0x9BEE},
- {0x5E61, 0x94A6},{0x5E62, 0x9BEF},{0x5E63, 0x95BC},{0x5E64, 0x9BF0},{0x5E72, 0x8AB1},{0x5E73, 0x95BD},{0x5E74, 0x944E},{0x5E75, 0x9BF2},
- {0x5E76, 0x9BF3},{0x5E78, 0x8D4B},{0x5E79, 0x8AB2},{0x5E7A, 0x9BF4},{0x5E7B, 0x8CB6},{0x5E7C, 0x9763},{0x5E7D, 0x9748},{0x5E7E, 0x8AF4},
- {0x5E7F, 0x9BF6},{0x5E81, 0x92A1},{0x5E83, 0x8D4C},{0x5E84, 0x8FAF},{0x5E87, 0x94DD},{0x5E8A, 0x8FB0},{0x5E8F, 0x8F98},{0x5E95, 0x92EA},
- {0x5E96, 0x95F7},{0x5E97, 0x9358},{0x5E9A, 0x8D4D},{0x5E9C, 0x957B},{0x5EA0, 0x9BF7},{0x5EA6, 0x9378},{0x5EA7, 0x8DC0},{0x5EAB, 0x8CC9},
- {0x5EAD, 0x92EB},{0x5EB5, 0x88C1},{0x5EB6, 0x8F8E},{0x5EB7, 0x8D4E},{0x5EB8, 0x9766},{0x5EC1, 0x9BF8},{0x5EC2, 0x9BF9},{0x5EC3, 0x9470},
- {0x5EC8, 0x9BFA},{0x5EC9, 0x97F5},{0x5ECA, 0x984C},{0x5ECF, 0x9BFC},{0x5ED0, 0x9BFB},{0x5ED3, 0x8A66},{0x5ED6, 0x9C40},{0x5EDA, 0x9C43},
- {0x5EDB, 0x9C44},{0x5EDD, 0x9C42},{0x5EDF, 0x955F},{0x5EE0, 0x8FB1},{0x5EE1, 0x9C46},{0x5EE2, 0x9C45},{0x5EE3, 0x9C41},{0x5EE8, 0x9C47},
- {0x5EE9, 0x9C48},{0x5EEC, 0x9C49},{0x5EF0, 0x9C4C},{0x5EF1, 0x9C4A},{0x5EF3, 0x9C4B},{0x5EF4, 0x9C4D},{0x5EF6, 0x8984},{0x5EF7, 0x92EC},
- {0x5EF8, 0x9C4E},{0x5EFA, 0x8C9A},{0x5EFB, 0x89F4},{0x5EFC, 0x9455},{0x5EFE, 0x9C4F},{0x5EFF, 0x93F9},{0x5F01, 0x95D9},{0x5F03, 0x9C50},
- {0x5F04, 0x984D},{0x5F09, 0x9C51},{0x5F0A, 0x95BE},{0x5F0B, 0x9C54},{0x5F0C, 0x989F},{0x5F0D, 0x98AF},{0x5F0F, 0x8EAE},{0x5F10, 0x93F3},
- {0x5F11, 0x9C55},{0x5F13, 0x8B7C},{0x5F14, 0x92A2},{0x5F15, 0x88F8},{0x5F16, 0x9C56},{0x5F17, 0x95A4},{0x5F18, 0x8D4F},{0x5F1B, 0x926F},
- {0x5F1F, 0x92ED},{0x5F21, 0xED9B},{0x5F25, 0x96ED},{0x5F26, 0x8CB7},{0x5F27, 0x8CCA},{0x5F29, 0x9C57},{0x5F2D, 0x9C58},{0x5F2F, 0x9C5E},
- {0x5F31, 0x8EE3},{0x5F34, 0xED9C},{0x5F35, 0x92A3},{0x5F37, 0x8BAD},{0x5F38, 0x9C59},{0x5F3C, 0x954A},{0x5F3E, 0x9265},{0x5F41, 0x9C5A},
- {0x5F45, 0xED4B},{0x5F48, 0x9C5B},{0x5F4A, 0x8BAE},{0x5F4C, 0x9C5C},{0x5F4E, 0x9C5D},{0x5F51, 0x9C5F},{0x5F53, 0x9396},{0x5F56, 0x9C60},
- {0x5F57, 0x9C61},{0x5F59, 0x9C62},{0x5F5C, 0x9C53},{0x5F5D, 0x9C52},{0x5F61, 0x9C63},{0x5F62, 0x8C60},{0x5F66, 0x9546},{0x5F67, 0xED9D},
- {0x5F69, 0x8DCA},{0x5F6A, 0x9556},{0x5F6B, 0x92A4},{0x5F6C, 0x956A},{0x5F6D, 0x9C64},{0x5F70, 0x8FB2},{0x5F71, 0x8965},{0x5F73, 0x9C65},
- {0x5F77, 0x9C66},{0x5F79, 0x96F0},{0x5F7C, 0x94DE},{0x5F7F, 0x9C69},{0x5F80, 0x899D},{0x5F81, 0x90AA},{0x5F82, 0x9C68},{0x5F83, 0x9C67},
- {0x5F84, 0x8C61},{0x5F85, 0x91D2},{0x5F87, 0x9C6D},{0x5F88, 0x9C6B},{0x5F8A, 0x9C6A},{0x5F8B, 0x97A5},{0x5F8C, 0x8CE3},{0x5F90, 0x8F99},
- {0x5F91, 0x9C6C},{0x5F92, 0x936B},{0x5F93, 0x8F5D},{0x5F97, 0x93BE},{0x5F98, 0x9C70},{0x5F99, 0x9C6F},{0x5F9E, 0x9C6E},{0x5FA0, 0x9C71},
- {0x5FA1, 0x8CE4},{0x5FA8, 0x9C72},{0x5FA9, 0x959C},{0x5FAA, 0x8F7A},{0x5FAD, 0x9C73},{0x5FAE, 0x94F7},{0x5FB3, 0x93BF},{0x5FB4, 0x92A5},
- {0x5FB7, 0xED9E},{0x5FB9, 0x934F},{0x5FBC, 0x9C74},{0x5FBD, 0x8B4A},{0x5FC3, 0x9053},{0x5FC5, 0x954B},{0x5FCC, 0x8AF5},{0x5FCD, 0x9445},
- {0x5FD6, 0x9C75},{0x5FD7, 0x8E75},{0x5FD8, 0x9659},{0x5FD9, 0x965A},{0x5FDC, 0x899E},{0x5FDD, 0x9C7A},{0x5FDE, 0xED9F},{0x5FE0, 0x9289},
- {0x5FE4, 0x9C77},{0x5FEB, 0x89F5},{0x5FF0, 0x9CAB},{0x5FF1, 0x9C79},{0x5FF5, 0x944F},{0x5FF8, 0x9C78},{0x5FFB, 0x9C76},{0x5FFD, 0x8D9A},
- {0x5FFF, 0x9C7C},{0x600E, 0x9C83},{0x600F, 0x9C89},{0x6010, 0x9C81},{0x6012, 0x937B},{0x6015, 0x9C86},{0x6016, 0x957C},{0x6019, 0x9C80},
- {0x601B, 0x9C85},{0x601C, 0x97E5},{0x601D, 0x8E76},{0x6020, 0x91D3},{0x6021, 0x9C7D},{0x6025, 0x8B7D},{0x6026, 0x9C88},{0x6027, 0x90AB},
- {0x6028, 0x8985},{0x6029, 0x9C82},{0x602A, 0x89F6},{0x602B, 0x9C87},{0x602F, 0x8BAF},{0x6031, 0x9C84},{0x603A, 0x9C8A},{0x6041, 0x9C8C},
- {0x6042, 0x9C96},{0x6043, 0x9C94},{0x6046, 0x9C91},{0x604A, 0x9C90},{0x604B, 0x97F6},{0x604D, 0x9C92},{0x6050, 0x8BB0},{0x6052, 0x8D50},
- {0x6055, 0x8F9A},{0x6059, 0x9C99},{0x605A, 0x9C8B},{0x605D, 0xEDA0},{0x605F, 0x9C8F},{0x6060, 0x9C7E},{0x6062, 0x89F8},{0x6063, 0x9C93},
- {0x6064, 0x9C95},{0x6065, 0x9270},{0x6068, 0x8DA6},{0x6069, 0x89B6},{0x606A, 0x9C8D},{0x606B, 0x9C98},{0x606C, 0x9C97},{0x606D, 0x8BB1},
- {0x606F, 0x91A7},{0x6070, 0x8A86},{0x6075, 0x8C62},{0x6077, 0x9C8E},{0x6081, 0x9C9A},{0x6083, 0x9C9D},{0x6084, 0x9C9F},{0x6085, 0xEDA1},
- {0x6089, 0x8EBB},{0x608A, 0xEDA2},{0x608B, 0x9CA5},{0x608C, 0x92EE},{0x608D, 0x9C9B},{0x6092, 0x9CA3},{0x6094, 0x89F7},{0x6096, 0x9CA1},
- {0x6097, 0x9CA2},{0x609A, 0x9C9E},{0x609B, 0x9CA0},{0x609F, 0x8CE5},{0x60A0, 0x9749},{0x60A3, 0x8AB3},{0x60A6, 0x8978},{0x60A7, 0x9CA4},
- {0x60A9, 0x9459},{0x60AA, 0x88AB},{0x60B2, 0x94DF},{0x60B3, 0x9C7B},{0x60B4, 0x9CAA},{0x60B5, 0x9CAE},{0x60B6, 0x96E3},{0x60B8, 0x9CA7},
- {0x60BC, 0x9389},{0x60BD, 0x9CAC},{0x60C5, 0x8FEE},{0x60C6, 0x9CAD},{0x60C7, 0x93D5},{0x60D1, 0x9866},{0x60D3, 0x9CA9},{0x60D5, 0xEDA4},
- {0x60D8, 0x9CAF},{0x60DA, 0x8D9B},{0x60DC, 0x90C9},{0x60DE, 0xEDA3},{0x60DF, 0x88D2},{0x60E0, 0x9CA8},{0x60E1, 0x9CA6},{0x60E3, 0x9179},
- {0x60E7, 0x9C9C},{0x60E8, 0x8E53},{0x60F0, 0x91C4},{0x60F1, 0x9CBB},{0x60F2, 0xEDA6},{0x60F3, 0x917A},{0x60F4, 0x9CB6},{0x60F6, 0x9CB3},
- {0x60F7, 0x9CB4},{0x60F9, 0x8EE4},{0x60FA, 0x9CB7},{0x60FB, 0x9CBA},{0x6100, 0x9CB5},{0x6101, 0x8F44},{0x6103, 0x9CB8},{0x6106, 0x9CB2},
- {0x6108, 0x96FA},{0x6109, 0x96F9},{0x610D, 0x9CBC},{0x610E, 0x9CBD},{0x610F, 0x88D3},{0x6111, 0xEDA7},{0x6115, 0x9CB1},{0x611A, 0x8BF0},
- {0x611B, 0x88A4},{0x611F, 0x8AB4},{0x6120, 0xEDA5},{0x6121, 0x9CB9},{0x6127, 0x9CC1},{0x6128, 0x9CC0},{0x612C, 0x9CC5},{0x6130, 0xEDA9},
- {0x6134, 0x9CC6},{0x6137, 0xEDA8},{0x613C, 0x9CC4},{0x613D, 0x9CC7},{0x613E, 0x9CBF},{0x613F, 0x9CC3},{0x6142, 0x9CC8},{0x6144, 0x9CC9},
- {0x6147, 0x9CBE},{0x6148, 0x8E9C},{0x614A, 0x9CC2},{0x614B, 0x91D4},{0x614C, 0x8D51},{0x614D, 0x9CB0},{0x614E, 0x9054},{0x6153, 0x9CD6},
- {0x6155, 0x95E7},{0x6158, 0x9CCC},{0x6159, 0x9CCD},{0x615A, 0x9CCE},{0x615D, 0x9CD5},{0x615F, 0x9CD4},{0x6162, 0x969D},{0x6163, 0x8AB5},
- {0x6165, 0x9CD2},{0x6167, 0x8C64},{0x6168, 0x8A53},{0x616B, 0x9CCF},{0x616E, 0x97B6},{0x616F, 0x9CD1},{0x6170, 0x88D4},{0x6171, 0x9CD3},
- {0x6173, 0x9CCA},{0x6174, 0x9CD0},{0x6175, 0x9CD7},{0x6176, 0x8C63},{0x6177, 0x9CCB},{0x617E, 0x977C},{0x6182, 0x974A},{0x6187, 0x9CDA},
- {0x618A, 0x9CDE},{0x618E, 0x919E},{0x6190, 0x97F7},{0x6191, 0x9CDF},{0x6194, 0x9CDC},{0x6196, 0x9CD9},{0x6198, 0xEDAA},{0x6199, 0x9CD8},
- {0x619A, 0x9CDD},{0x61A4, 0x95AE},{0x61A7, 0x93B2},{0x61A9, 0x8C65},{0x61AB, 0x9CE0},{0x61AC, 0x9CDB},{0x61AE, 0x9CE1},{0x61B2, 0x8C9B},
- {0x61B6, 0x89AF},{0x61BA, 0x9CE9},{0x61BE, 0x8AB6},{0x61C3, 0x9CE7},{0x61C6, 0x9CE8},{0x61C7, 0x8DA7},{0x61C8, 0x9CE6},{0x61C9, 0x9CE4},
- {0x61CA, 0x9CE3},{0x61CB, 0x9CEA},{0x61CC, 0x9CE2},{0x61CD, 0x9CEC},{0x61D0, 0x89F9},{0x61E3, 0x9CEE},{0x61E6, 0x9CED},{0x61F2, 0x92A6},
- {0x61F4, 0x9CF1},{0x61F6, 0x9CEF},{0x61F7, 0x9CE5},{0x61F8, 0x8C9C},{0x61FA, 0x9CF0},{0x61FC, 0x9CF4},{0x61FD, 0x9CF3},{0x61FE, 0x9CF5},
- {0x61FF, 0x9CF2},{0x6200, 0x9CF6},{0x6208, 0x9CF7},{0x6209, 0x9CF8},{0x620A, 0x95E8},{0x620C, 0x9CFA},{0x620D, 0x9CF9},{0x620E, 0x8F5E},
- {0x6210, 0x90AC},{0x6211, 0x89E4},{0x6212, 0x89FA},{0x6213, 0xEDAB},{0x6214, 0x9CFB},{0x6216, 0x88BD},{0x621A, 0x90CA},{0x621B, 0x9CFC},
- {0x621D, 0xE6C1},{0x621E, 0x9D40},{0x621F, 0x8C81},{0x6221, 0x9D41},{0x6226, 0x90ED},{0x622A, 0x9D42},{0x622E, 0x9D43},{0x622F, 0x8B59},
- {0x6230, 0x9D44},{0x6232, 0x9D45},{0x6233, 0x9D46},{0x6234, 0x91D5},{0x6238, 0x8CCB},{0x623B, 0x96DF},{0x623F, 0x965B},{0x6240, 0x8F8A},
- {0x6241, 0x9D47},{0x6247, 0x90EE},{0x6248, 0xE7BB},{0x6249, 0x94E0},{0x624B, 0x8EE8},{0x624D, 0x8DCB},{0x624E, 0x9D48},{0x6253, 0x91C5},
- {0x6255, 0x95A5},{0x6258, 0x91EF},{0x625B, 0x9D4B},{0x625E, 0x9D49},{0x6260, 0x9D4C},{0x6263, 0x9D4A},{0x6268, 0x9D4D},{0x626E, 0x95AF},
- {0x6271, 0x88B5},{0x6276, 0x957D},{0x6279, 0x94E1},{0x627C, 0x9D4E},{0x627E, 0x9D51},{0x627F, 0x8FB3},{0x6280, 0x8B5A},{0x6282, 0x9D4F},
- {0x6283, 0x9D56},{0x6284, 0x8FB4},{0x6289, 0x9D50},{0x628A, 0x9463},{0x6291, 0x977D},{0x6292, 0x9D52},{0x6293, 0x9D53},{0x6294, 0x9D57},
- {0x6295, 0x938A},{0x6296, 0x9D54},{0x6297, 0x8D52},{0x6298, 0x90DC},{0x629B, 0x9D65},{0x629C, 0x94B2},{0x629E, 0x91F0},{0x62A6, 0xEDAC},
- {0x62AB, 0x94E2},{0x62AC, 0x9DAB},{0x62B1, 0x95F8},{0x62B5, 0x92EF},{0x62B9, 0x9695},{0x62BB, 0x9D5A},{0x62BC, 0x899F},{0x62BD, 0x928A},
- {0x62C2, 0x9D63},{0x62C5, 0x9253},{0x62C6, 0x9D5D},{0x62C7, 0x9D64},{0x62C8, 0x9D5F},{0x62C9, 0x9D66},{0x62CA, 0x9D62},{0x62CC, 0x9D61},
- {0x62CD, 0x948F},{0x62CF, 0x9D5B},{0x62D0, 0x89FB},{0x62D1, 0x9D59},{0x62D2, 0x8B91},{0x62D3, 0x91F1},{0x62D4, 0x9D55},{0x62D7, 0x9D58},
- {0x62D8, 0x8D53},{0x62D9, 0x90D9},{0x62DB, 0x8FB5},{0x62DC, 0x9D60},{0x62DD, 0x9471},{0x62E0, 0x8B92},{0x62E1, 0x8A67},{0x62EC, 0x8A87},
- {0x62ED, 0x9040},{0x62EE, 0x9D68},{0x62EF, 0x9D6D},{0x62F1, 0x9D69},{0x62F3, 0x8C9D},{0x62F5, 0x9D6E},{0x62F6, 0x8E41},{0x62F7, 0x8D89},
- {0x62FE, 0x8F45},{0x62FF, 0x9D5C},{0x6301, 0x8E9D},{0x6302, 0x9D6B},{0x6307, 0x8E77},{0x6308, 0x9D6C},{0x6309, 0x88C2},{0x630C, 0x9D67},
- {0x6311, 0x92A7},{0x6319, 0x8B93},{0x631F, 0x8BB2},{0x6327, 0x9D6A},{0x6328, 0x88A5},{0x632B, 0x8DC1},{0x632F, 0x9055},{0x633A, 0x92F0},
- {0x633D, 0x94D2},{0x633E, 0x9D70},{0x633F, 0x917D},{0x6349, 0x91A8},{0x634C, 0x8E4A},{0x634D, 0x9D71},{0x634F, 0x9D73},{0x6350, 0x9D6F},
- {0x6355, 0x95DF},{0x6357, 0x92BB},{0x635C, 0x917B},{0x6367, 0x95F9},{0x6368, 0x8ECC},{0x6369, 0x9D80},{0x636B, 0x9D7E},{0x636E, 0x9098},
- {0x6372, 0x8C9E},{0x6376, 0x9D78},{0x6377, 0x8FB7},{0x637A, 0x93E6},{0x637B, 0x9450},{0x6380, 0x9D76},{0x6383, 0x917C},{0x6388, 0x8EF6},
- {0x6389, 0x9D7B},{0x638C, 0x8FB6},{0x638E, 0x9D75},{0x638F, 0x9D7A},{0x6392, 0x9472},{0x6396, 0x9D74},{0x6398, 0x8C40},{0x639B, 0x8A7C},
- {0x639F, 0x9D7C},{0x63A0, 0x97A9},{0x63A1, 0x8DCC},{0x63A2, 0x9254},{0x63A3, 0x9D79},{0x63A5, 0x90DA},{0x63A7, 0x8D54},{0x63A8, 0x9084},
- {0x63A9, 0x8986},{0x63AA, 0x915B},{0x63AB, 0x9D77},{0x63AC, 0x8B64},{0x63B2, 0x8C66},{0x63B4, 0x92CD},{0x63B5, 0x9D7D},{0x63BB, 0x917E},
- {0x63BE, 0x9D81},{0x63C0, 0x9D83},{0x63C3, 0x91B5},{0x63C4, 0x9D89},{0x63C6, 0x9D84},{0x63C9, 0x9D86},{0x63CF, 0x9560},{0x63D0, 0x92F1},
- {0x63D2, 0x9D87},{0x63D6, 0x974B},{0x63DA, 0x9767},{0x63DB, 0x8AB7},{0x63E1, 0x88AC},{0x63E3, 0x9D85},{0x63E9, 0x9D82},{0x63EE, 0x8AF6},
- {0x63F4, 0x8987},{0x63F5, 0xEDAD},{0x63F6, 0x9D88},{0x63FA, 0x9768},{0x6406, 0x9D8C},{0x640D, 0x91B9},{0x640F, 0x9D93},{0x6413, 0x9D8D},
- {0x6416, 0x9D8A},{0x6417, 0x9D91},{0x641C, 0x9D72},{0x6426, 0x9D8E},{0x6428, 0x9D92},{0x642C, 0x94C0},{0x642D, 0x938B},{0x6434, 0x9D8B},
- {0x6436, 0x9D8F},{0x643A, 0x8C67},{0x643E, 0x8DEF},{0x6442, 0x90DB},{0x644E, 0x9D97},{0x6458, 0x9345},{0x6460, 0xEDAE},{0x6467, 0x9D94},
- {0x6469, 0x9680},{0x646F, 0x9D95},{0x6476, 0x9D96},{0x6478, 0x96CC},{0x647A, 0x90A0},{0x6483, 0x8C82},{0x6488, 0x9D9D},{0x6492, 0x8E54},
- {0x6493, 0x9D9A},{0x6495, 0x9D99},{0x649A, 0x9451},{0x649D, 0xEDAF},{0x649E, 0x93B3},{0x64A4, 0x9350},{0x64A5, 0x9D9B},{0x64A9, 0x9D9C},
- {0x64AB, 0x958F},{0x64AD, 0x9464},{0x64AE, 0x8E42},{0x64B0, 0x90EF},{0x64B2, 0x966F},{0x64B9, 0x8A68},{0x64BB, 0x9DA3},{0x64BC, 0x9D9E},
- {0x64C1, 0x9769},{0x64C2, 0x9DA5},{0x64C5, 0x9DA1},{0x64C7, 0x9DA2},{0x64CD, 0x9180},{0x64CE, 0xEDB0},{0x64D2, 0x9DA0},{0x64D4, 0x9D5E},
- {0x64D8, 0x9DA4},{0x64DA, 0x9D9F},{0x64E0, 0x9DA9},{0x64E1, 0x9DAA},{0x64E2, 0x9346},{0x64E3, 0x9DAC},{0x64E6, 0x8E43},{0x64E7, 0x9DA7},
- {0x64EC, 0x8B5B},{0x64EF, 0x9DAD},{0x64F1, 0x9DA6},{0x64F2, 0x9DB1},{0x64F4, 0x9DB0},{0x64F6, 0x9DAF},{0x64FA, 0x9DB2},{0x64FD, 0x9DB4},
- {0x64FE, 0x8FEF},{0x6500, 0x9DB3},{0x6505, 0x9DB7},{0x6518, 0x9DB5},{0x651C, 0x9DB6},{0x651D, 0x9D90},{0x6523, 0x9DB9},{0x6524, 0x9DB8},
- {0x652A, 0x9D98},{0x652B, 0x9DBA},{0x652C, 0x9DAE},{0x652F, 0x8E78},{0x6534, 0x9DBB},{0x6535, 0x9DBC},{0x6536, 0x9DBE},{0x6537, 0x9DBD},
- {0x6538, 0x9DBF},{0x6539, 0x89FC},{0x653B, 0x8D55},{0x653E, 0x95FA},{0x653F, 0x90AD},{0x6545, 0x8CCC},{0x6548, 0x9DC1},{0x654D, 0x9DC4},
- {0x654E, 0xEDB1},{0x654F, 0x9571},{0x6551, 0x8B7E},{0x6555, 0x9DC3},{0x6556, 0x9DC2},{0x6557, 0x9473},{0x6558, 0x9DC5},{0x6559, 0x8BB3},
- {0x655D, 0x9DC7},{0x655E, 0x9DC6},{0x6562, 0x8AB8},{0x6563, 0x8E55},{0x6566, 0x93D6},{0x656C, 0x8C68},{0x6570, 0x9094},{0x6572, 0x9DC8},
- {0x6574, 0x90AE},{0x6575, 0x9347},{0x6577, 0x957E},{0x6578, 0x9DC9},{0x6582, 0x9DCA},{0x6583, 0x9DCB},{0x6587, 0x95B6},{0x6588, 0x9B7C},
- {0x6589, 0x90C4},{0x658C, 0x956B},{0x658E, 0x8DD6},{0x6590, 0x94E3},{0x6591, 0x94C1},{0x6597, 0x936C},{0x6599, 0x97BF},{0x659B, 0x9DCD},
- {0x659C, 0x8ECE},{0x659F, 0x9DCE},{0x65A1, 0x88B4},{0x65A4, 0x8BD2},{0x65A5, 0x90CB},{0x65A7, 0x9580},{0x65AB, 0x9DCF},{0x65AC, 0x8E61},
- {0x65AD, 0x9266},{0x65AF, 0x8E7A},{0x65B0, 0x9056},{0x65B7, 0x9DD0},{0x65B9, 0x95FB},{0x65BC, 0x8997},{0x65BD, 0x8E7B},{0x65C1, 0x9DD3},
- {0x65C3, 0x9DD1},{0x65C4, 0x9DD4},{0x65C5, 0x97B7},{0x65C6, 0x9DD2},{0x65CB, 0x90F9},{0x65CC, 0x9DD5},{0x65CF, 0x91B0},{0x65D2, 0x9DD6},
- {0x65D7, 0x8AF8},{0x65D9, 0x9DD8},{0x65DB, 0x9DD7},{0x65E0, 0x9DD9},{0x65E1, 0x9DDA},{0x65E2, 0x8AF9},{0x65E5, 0x93FA},{0x65E6, 0x9255},
- {0x65E7, 0x8B8C},{0x65E8, 0x8E7C},{0x65E9, 0x9181},{0x65EC, 0x8F7B},{0x65ED, 0x88AE},{0x65F1, 0x9DDB},{0x65FA, 0x89A0},{0x65FB, 0x9DDF},
- {0x6600, 0xEDB2},{0x6602, 0x8D56},{0x6603, 0x9DDE},{0x6606, 0x8DA9},{0x6607, 0x8FB8},{0x6609, 0xEDB5},{0x660A, 0x9DDD},{0x660C, 0x8FB9},
- {0x660E, 0x96BE},{0x660F, 0x8DA8},{0x6613, 0x88D5},{0x6614, 0x90CC},{0x6615, 0xEDB3},{0x661C, 0x9DE4},{0x661E, 0xEDB7},{0x661F, 0x90AF},
- {0x6620, 0x8966},{0x6624, 0xEDB8},{0x6625, 0x8F74},{0x6627, 0x9686},{0x6628, 0x8DF0},{0x662D, 0x8FBA},{0x662E, 0xEDB6},{0x662F, 0x90A5},
- {0x6631, 0xED47},{0x6634, 0x9DE3},{0x6635, 0x9DE1},{0x6636, 0x9DE2},{0x663B, 0xEDB4},{0x663C, 0x928B},{0x663F, 0x9E45},{0x6641, 0x9DE8},
- {0x6642, 0x8E9E},{0x6643, 0x8D57},{0x6644, 0x9DE6},{0x6649, 0x9DE7},{0x664B, 0x9057},{0x664F, 0x9DE5},{0x6652, 0x8E4E},{0x6657, 0xEDBA},
- {0x6659, 0xEDBB},{0x665D, 0x9DEA},{0x665E, 0x9DE9},{0x665F, 0x9DEE},{0x6662, 0x9DEF},{0x6664, 0x9DEB},{0x6665, 0xEDB9},{0x6666, 0x8A41},
- {0x6667, 0x9DEC},{0x6668, 0x9DED},{0x6669, 0x94D3},{0x666E, 0x9581},{0x666F, 0x8C69},{0x6670, 0x9DF0},{0x6673, 0xEDBD},{0x6674, 0x90B0},
- {0x6676, 0x8FBB},{0x667A, 0x9271},{0x6681, 0x8BC5},{0x6683, 0x9DF1},{0x6684, 0x9DF5},{0x6687, 0x89C9},{0x6688, 0x9DF2},{0x6689, 0x9DF4},
- {0x668E, 0x9DF3},{0x6691, 0x8F8B},{0x6696, 0x9267},{0x6697, 0x88C3},{0x6698, 0x9DF6},{0x6699, 0xEDBE},{0x669D, 0x9DF7},{0x66A0, 0xEDBF},
- {0x66A2, 0x92A8},{0x66A6, 0x97EF},{0x66AB, 0x8E62},{0x66AE, 0x95E9},{0x66B2, 0xEDC0},{0x66B4, 0x965C},{0x66B8, 0x9E41},{0x66B9, 0x9DF9},
- {0x66BC, 0x9DFC},{0x66BE, 0x9DFB},{0x66BF, 0xEDC1},{0x66C1, 0x9DF8},{0x66C4, 0x9E40},{0x66C7, 0x93DC},{0x66C9, 0x9DFA},{0x66D6, 0x9E42},
- {0x66D9, 0x8F8C},{0x66DA, 0x9E43},{0x66DC, 0x976A},{0x66DD, 0x9498},{0x66E0, 0x9E44},{0x66E6, 0x9E46},{0x66E9, 0x9E47},{0x66F0, 0x9E48},
- {0x66F2, 0x8BC8},{0x66F3, 0x8967},{0x66F4, 0x8D58},{0x66F5, 0x9E49},{0x66F7, 0x9E4A},{0x66F8, 0x8F91},{0x66F9, 0x9182},{0x66FA, 0xEDC2},
- {0x66FB, 0xED4A},{0x66FC, 0x99D6},{0x66FD, 0x915D},{0x66FE, 0x915C},{0x66FF, 0x91D6},{0x6700, 0x8DC5},{0x6703, 0x98F0},{0x6708, 0x8C8E},
- {0x6709, 0x974C},{0x670B, 0x95FC},{0x670D, 0x959E},{0x670E, 0xEDC3},{0x670F, 0x9E4B},{0x6714, 0x8DF1},{0x6715, 0x92BD},{0x6716, 0x9E4C},
- {0x6717, 0x984E},{0x671B, 0x965D},{0x671D, 0x92A9},{0x671E, 0x9E4D},{0x671F, 0x8AFA},{0x6726, 0x9E4E},{0x6727, 0x9E4F},{0x6728, 0x96D8},
- {0x672A, 0x96A2},{0x672B, 0x9696},{0x672C, 0x967B},{0x672D, 0x8E44},{0x672E, 0x9E51},{0x6731, 0x8EE9},{0x6734, 0x9670},{0x6736, 0x9E53},
- {0x6737, 0x9E56},{0x6738, 0x9E55},{0x673A, 0x8AF7},{0x673D, 0x8B80},{0x673F, 0x9E52},{0x6741, 0x9E54},{0x6746, 0x9E57},{0x6749, 0x9099},
- {0x674E, 0x979B},{0x674F, 0x88C7},{0x6750, 0x8DDE},{0x6751, 0x91BA},{0x6753, 0x8EDB},{0x6756, 0x8FF1},{0x6759, 0x9E5A},{0x675C, 0x936D},
- {0x675E, 0x9E58},{0x675F, 0x91A9},{0x6760, 0x9E59},{0x6761, 0x8FF0},{0x6762, 0x96DB},{0x6763, 0x9E5B},{0x6764, 0x9E5C},{0x6765, 0x9788},
- {0x6766, 0xEDC5},{0x676A, 0x9E61},{0x676D, 0x8D59},{0x676F, 0x9474},{0x6770, 0x9E5E},{0x6771, 0x938C},{0x6772, 0x9DDC},{0x6773, 0x9DE0},
- {0x6775, 0x8B6E},{0x6777, 0x9466},{0x677C, 0x9E60},{0x677E, 0x8FBC},{0x677F, 0x94C2},{0x6785, 0x9E66},{0x6787, 0x94F8},{0x6789, 0x9E5D},
- {0x678B, 0x9E63},{0x678C, 0x9E62},{0x6790, 0x90CD},{0x6795, 0x968D},{0x6797, 0x97D1},{0x679A, 0x9687},{0x679C, 0x89CA},{0x679D, 0x8E7D},
- {0x67A0, 0x9867},{0x67A1, 0x9E65},{0x67A2, 0x9095},{0x67A6, 0x9E64},{0x67A9, 0x9E5F},{0x67AF, 0x8CCD},{0x67B3, 0x9E6B},{0x67B4, 0x9E69},
- {0x67B6, 0x89CB},{0x67B7, 0x9E67},{0x67B8, 0x9E6D},{0x67B9, 0x9E73},{0x67BB, 0xEDC6},{0x67C0, 0xEDC8},{0x67C1, 0x91C6},{0x67C4, 0x95BF},
- {0x67C6, 0x9E75},{0x67CA, 0x9541},{0x67CE, 0x9E74},{0x67CF, 0x9490},{0x67D0, 0x965E},{0x67D1, 0x8AB9},{0x67D3, 0x90F5},{0x67D4, 0x8F5F},
- {0x67D8, 0x92D1},{0x67DA, 0x974D},{0x67DD, 0x9E70},{0x67DE, 0x9E6F},{0x67E2, 0x9E71},{0x67E4, 0x9E6E},{0x67E7, 0x9E76},{0x67E9, 0x9E6C},
- {0x67EC, 0x9E6A},{0x67EE, 0x9E72},{0x67EF, 0x9E68},{0x67F1, 0x928C},{0x67F3, 0x96F6},{0x67F4, 0x8EC4},{0x67F5, 0x8DF2},{0x67FB, 0x8DB8},
- {0x67FE, 0x968F},{0x67FF, 0x8A60},{0x6801, 0xEDC9},{0x6802, 0x92CC},{0x6803, 0x93C8},{0x6804, 0x8968},{0x6813, 0x90F0},{0x6816, 0x90B2},
- {0x6817, 0x8C49},{0x681E, 0x9E78},{0x6821, 0x8D5A},{0x6822, 0x8A9C},{0x6829, 0x9E7A},{0x682A, 0x8A94},{0x682B, 0x9E81},{0x6832, 0x9E7D},
- {0x6834, 0x90F1},{0x6838, 0x8A6A},{0x6839, 0x8DAA},{0x683C, 0x8A69},{0x683D, 0x8DCD},{0x6840, 0x9E7B},{0x6841, 0x8C85},{0x6842, 0x8C6A},
- {0x6843, 0x938D},{0x6844, 0xEDCA},{0x6846, 0x9E79},{0x6848, 0x88C4},{0x684D, 0x9E7C},{0x684E, 0x9E7E},{0x6850, 0x8BCB},{0x6851, 0x8C4B},
- {0x6852, 0xEDC7},{0x6853, 0x8ABA},{0x6854, 0x8B6A},{0x6859, 0x9E82},{0x685C, 0x8DF7},{0x685D, 0x9691},{0x685F, 0x8E56},{0x6863, 0x9E83},
- {0x6867, 0x954F},{0x6874, 0x9E8F},{0x6876, 0x89B1},{0x6877, 0x9E84},{0x687E, 0x9E95},{0x687F, 0x9E85},{0x6881, 0x97C0},{0x6883, 0x9E8C},
- {0x6885, 0x947E},{0x688D, 0x9E94},{0x688F, 0x9E87},{0x6893, 0x88B2},{0x6894, 0x9E89},{0x6897, 0x8D5B},{0x689B, 0x9E8B},{0x689D, 0x9E8A},
- {0x689F, 0x9E86},{0x68A0, 0x9E91},{0x68A2, 0x8FBD},{0x68A6, 0x9AEB},{0x68A7, 0x8CE6},{0x68A8, 0x979C},{0x68AD, 0x9E88},{0x68AF, 0x92F2},
- {0x68B0, 0x8A42},{0x68B1, 0x8DAB},{0x68B3, 0x9E80},{0x68B5, 0x9E90},{0x68B6, 0x8A81},{0x68B9, 0x9E8E},{0x68BA, 0x9E92},{0x68BC, 0x938E},
- {0x68C4, 0x8AFC},{0x68C6, 0x9EB0},{0x68C8, 0xED48},{0x68C9, 0x96C7},{0x68CA, 0x9E97},{0x68CB, 0x8AFB},{0x68CD, 0x9E9E},{0x68CF, 0xEDCB},
- {0x68D2, 0x965F},{0x68D4, 0x9E9F},{0x68D5, 0x9EA1},{0x68D7, 0x9EA5},{0x68D8, 0x9E99},{0x68DA, 0x9249},{0x68DF, 0x938F},{0x68E0, 0x9EA9},
- {0x68E1, 0x9E9C},{0x68E3, 0x9EA6},{0x68E7, 0x9EA0},{0x68EE, 0x9058},{0x68EF, 0x9EAA},{0x68F2, 0x90B1},{0x68F9, 0x9EA8},{0x68FA, 0x8ABB},
- {0x6900, 0x986F},{0x6901, 0x9E96},{0x6904, 0x9EA4},{0x6905, 0x88D6},{0x6908, 0x9E98},{0x690B, 0x96B8},{0x690C, 0x9E9D},{0x690D, 0x9041},
- {0x690E, 0x92C5},{0x690F, 0x9E93},{0x6912, 0x9EA3},{0x6919, 0x909A},{0x691A, 0x9EAD},{0x691B, 0x8A91},{0x691C, 0x8C9F},{0x6921, 0x9EAF},
- {0x6922, 0x9E9A},{0x6923, 0x9EAE},{0x6925, 0x9EA7},{0x6926, 0x9E9B},{0x6928, 0x9EAB},{0x692A, 0x9EAC},{0x6930, 0x9EBD},{0x6934, 0x93CC},
- {0x6936, 0x9EA2},{0x6939, 0x9EB9},{0x693D, 0x9EBB},{0x693F, 0x92D6},{0x694A, 0x976B},{0x6953, 0x9596},{0x6954, 0x9EB6},{0x6955, 0x91C8},
- {0x6959, 0x9EBC},{0x695A, 0x915E},{0x695C, 0x9EB3},{0x695D, 0x9EC0},{0x695E, 0x9EBF},{0x6960, 0x93ED},{0x6961, 0x9EBE},{0x6962, 0x93E8},
- {0x6968, 0xEDCD},{0x696A, 0x9EC2},{0x696B, 0x9EB5},{0x696D, 0x8BC6},{0x696E, 0x9EB8},{0x696F, 0x8F7C},{0x6973, 0x9480},{0x6974, 0x9EBA},
- {0x6975, 0x8BC9},{0x6977, 0x9EB2},{0x6978, 0x9EB4},{0x6979, 0x9EB1},{0x697C, 0x984F},{0x697D, 0x8A79},{0x697E, 0x9EB7},{0x6981, 0x9EC1},
- {0x6982, 0x8A54},{0x698A, 0x8DE5},{0x698E, 0x897C},{0x6991, 0x9ED2},{0x6994, 0x9850},{0x6995, 0x9ED5},{0x6998, 0xEDCF},{0x699B, 0x9059},
- {0x699C, 0x9ED4},{0x69A0, 0x9ED3},{0x69A7, 0x9ED0},{0x69AE, 0x9EC4},{0x69B1, 0x9EE1},{0x69B2, 0x9EC3},{0x69B4, 0x9ED6},{0x69BB, 0x9ECE},
- {0x69BE, 0x9EC9},{0x69BF, 0x9EC6},{0x69C1, 0x9EC7},{0x69C3, 0x9ECF},{0x69C7, 0xEAA0},{0x69CA, 0x9ECC},{0x69CB, 0x8D5C},{0x69CC, 0x92C6},
- {0x69CD, 0x9184},{0x69CE, 0x9ECA},{0x69D0, 0x9EC5},{0x69D3, 0x9EC8},{0x69D8, 0x976C},{0x69D9, 0x968A},{0x69DD, 0x9ECD},{0x69DE, 0x9ED7},
- {0x69E2, 0xEDD0},{0x69E7, 0x9EDF},{0x69E8, 0x9ED8},{0x69EB, 0x9EE5},{0x69ED, 0x9EE3},{0x69F2, 0x9EDE},{0x69F9, 0x9EDD},{0x69FB, 0x92CE},
- {0x69FD, 0x9185},{0x69FF, 0x9EDB},{0x6A02, 0x9ED9},{0x6A05, 0x9EE0},{0x6A0A, 0x9EE6},{0x6A0B, 0x94F3},{0x6A0C, 0x9EEC},{0x6A12, 0x9EE7},
- {0x6A13, 0x9EEA},{0x6A14, 0x9EE4},{0x6A17, 0x9294},{0x6A19, 0x9557},{0x6A1B, 0x9EDA},{0x6A1E, 0x9EE2},{0x6A1F, 0x8FBE},{0x6A21, 0x96CD},
- {0x6A22, 0x9EF6},{0x6A23, 0x9EE9},{0x6A29, 0x8CA0},{0x6A2A, 0x89A1},{0x6A2B, 0x8A7E},{0x6A2E, 0x9ED1},{0x6A30, 0xEDD1},{0x6A35, 0x8FBF},
- {0x6A36, 0x9EEE},{0x6A38, 0x9EF5},{0x6A39, 0x8EF7},{0x6A3A, 0x8A92},{0x6A3D, 0x924D},{0x6A44, 0x9EEB},{0x6A46, 0xEDD3},{0x6A47, 0x9EF0},
- {0x6A48, 0x9EF4},{0x6A4B, 0x8BB4},{0x6A58, 0x8B6B},{0x6A59, 0x9EF2},{0x6A5F, 0x8B40},{0x6A61, 0x93C9},{0x6A62, 0x9EF1},{0x6A66, 0x9EF3},
- {0x6A6B, 0xEDD2},{0x6A72, 0x9EED},{0x6A73, 0xEDD4},{0x6A78, 0x9EEF},{0x6A7E, 0xEDD5},{0x6A7F, 0x8A80},{0x6A80, 0x9268},{0x6A84, 0x9EFA},
- {0x6A8D, 0x9EF8},{0x6A8E, 0x8CE7},{0x6A90, 0x9EF7},{0x6A97, 0x9F40},{0x6A9C, 0x9E77},{0x6AA0, 0x9EF9},{0x6AA2, 0x9EFB},{0x6AA3, 0x9EFC},
- {0x6AAA, 0x9F4B},{0x6AAC, 0x9F47},{0x6AAE, 0x9E8D},{0x6AB3, 0x9F46},{0x6AB8, 0x9F45},{0x6ABB, 0x9F42},{0x6AC1, 0x9EE8},{0x6AC2, 0x9F44},
- {0x6AC3, 0x9F43},{0x6AD1, 0x9F49},{0x6AD3, 0x9845},{0x6ADA, 0x9F4C},{0x6ADB, 0x8BF9},{0x6ADE, 0x9F48},{0x6ADF, 0x9F4A},{0x6AE2, 0xEDD6},
- {0x6AE4, 0xEDD7},{0x6AE8, 0x94A5},{0x6AEA, 0x9F4D},{0x6AFA, 0x9F51},{0x6AFB, 0x9F4E},{0x6B04, 0x9793},{0x6B05, 0x9F4F},{0x6B0A, 0x9EDC},
- {0x6B12, 0x9F52},{0x6B16, 0x9F53},{0x6B1D, 0x8954},{0x6B1F, 0x9F55},{0x6B20, 0x8C87},{0x6B21, 0x8E9F},{0x6B23, 0x8BD3},{0x6B27, 0x89A2},
- {0x6B32, 0x977E},{0x6B37, 0x9F57},{0x6B38, 0x9F56},{0x6B39, 0x9F59},{0x6B3A, 0x8B5C},{0x6B3D, 0x8BD4},{0x6B3E, 0x8ABC},{0x6B43, 0x9F5C},
- {0x6B47, 0x9F5B},{0x6B49, 0x9F5D},{0x6B4C, 0x89CC},{0x6B4E, 0x9256},{0x6B50, 0x9F5E},{0x6B53, 0x8ABD},{0x6B54, 0x9F60},{0x6B59, 0x9F5F},
- {0x6B5B, 0x9F61},{0x6B5F, 0x9F62},{0x6B61, 0x9F63},{0x6B62, 0x8E7E},{0x6B63, 0x90B3},{0x6B64, 0x8D9F},{0x6B66, 0x9590},{0x6B69, 0x95E0},
- {0x6B6A, 0x9863},{0x6B6F, 0x8E95},{0x6B73, 0x8DCE},{0x6B74, 0x97F0},{0x6B78, 0x9F64},{0x6B79, 0x9F65},{0x6B7B, 0x8E80},{0x6B7F, 0x9F66},
- {0x6B80, 0x9F67},{0x6B83, 0x9F69},{0x6B84, 0x9F68},{0x6B86, 0x9677},{0x6B89, 0x8F7D},{0x6B8A, 0x8EEA},{0x6B8B, 0x8E63},{0x6B8D, 0x9F6A},
- {0x6B95, 0x9F6C},{0x6B96, 0x9042},{0x6B98, 0x9F6B},{0x6B9E, 0x9F6D},{0x6BA4, 0x9F6E},{0x6BAA, 0x9F6F},{0x6BAB, 0x9F70},{0x6BAF, 0x9F71},
- {0x6BB1, 0x9F73},{0x6BB2, 0x9F72},{0x6BB3, 0x9F74},{0x6BB4, 0x89A3},{0x6BB5, 0x9269},{0x6BB7, 0x9F75},{0x6BBA, 0x8E45},{0x6BBB, 0x8A6B},
- {0x6BBC, 0x9F76},{0x6BBF, 0x9361},{0x6BC0, 0x9ACA},{0x6BC5, 0x8B42},{0x6BC6, 0x9F77},{0x6BCB, 0x9F78},{0x6BCD, 0x95EA},{0x6BCE, 0x9688},
- {0x6BD2, 0x93C5},{0x6BD3, 0x9F79},{0x6BD4, 0x94E4},{0x6BD6, 0xEDD8},{0x6BD8, 0x94F9},{0x6BDB, 0x96D1},{0x6BDF, 0x9F7A},{0x6BEB, 0x9F7C},
- {0x6BEC, 0x9F7B},{0x6BEF, 0x9F7E},{0x6BF3, 0x9F7D},{0x6C08, 0x9F81},{0x6C0F, 0x8E81},{0x6C11, 0x96AF},{0x6C13, 0x9F82},{0x6C14, 0x9F83},
- {0x6C17, 0x8B43},{0x6C1B, 0x9F84},{0x6C23, 0x9F86},{0x6C24, 0x9F85},{0x6C34, 0x9085},{0x6C37, 0x9558},{0x6C38, 0x8969},{0x6C3E, 0x94C3},
- {0x6C3F, 0xEDD9},{0x6C40, 0x92F3},{0x6C41, 0x8F60},{0x6C42, 0x8B81},{0x6C4E, 0x94C4},{0x6C50, 0x8EAC},{0x6C55, 0x9F88},{0x6C57, 0x8ABE},
- {0x6C5A, 0x8998},{0x6C5C, 0xEDDA},{0x6C5D, 0x93F0},{0x6C5E, 0x9F87},{0x6C5F, 0x8D5D},{0x6C60, 0x9272},{0x6C62, 0x9F89},{0x6C68, 0x9F91},
- {0x6C6A, 0x9F8A},{0x6C6F, 0xEDDC},{0x6C70, 0x91BF},{0x6C72, 0x8B82},{0x6C73, 0x9F92},{0x6C7A, 0x8C88},{0x6C7D, 0x8B44},{0x6C7E, 0x9F90},
- {0x6C81, 0x9F8E},{0x6C82, 0x9F8B},{0x6C83, 0x9780},{0x6C86, 0xEDDB},{0x6C88, 0x92BE},{0x6C8C, 0x93D7},{0x6C8D, 0x9F8C},{0x6C90, 0x9F94},
- {0x6C92, 0x9F93},{0x6C93, 0x8C42},{0x6C96, 0x89AB},{0x6C99, 0x8DB9},{0x6C9A, 0x9F8D},{0x6C9B, 0x9F8F},{0x6CA1, 0x9676},{0x6CA2, 0x91F2},
- {0x6CAB, 0x9697},{0x6CAE, 0x9F9C},{0x6CB1, 0x9F9D},{0x6CB3, 0x89CD},{0x6CB8, 0x95A6},{0x6CB9, 0x96FB},{0x6CBA, 0x9F9F},{0x6CBB, 0x8EA1},
- {0x6CBC, 0x8FC0},{0x6CBD, 0x9F98},{0x6CBE, 0x9F9E},{0x6CBF, 0x8988},{0x6CC1, 0x8BB5},{0x6CC4, 0x9F95},{0x6CC5, 0x9F9A},{0x6CC9, 0x90F2},
- {0x6CCA, 0x9491},{0x6CCC, 0x94E5},{0x6CD3, 0x9F97},{0x6CD5, 0x9640},{0x6CD7, 0x9F99},{0x6CD9, 0x9FA2},{0x6CDA, 0xEDDD},{0x6CDB, 0x9FA0},
- {0x6CDD, 0x9F9B},{0x6CE1, 0x9641},{0x6CE2, 0x9467},{0x6CE3, 0x8B83},{0x6CE5, 0x9344},{0x6CE8, 0x928D},{0x6CEA, 0x9FA3},{0x6CEF, 0x9FA1},
- {0x6CF0, 0x91D7},{0x6CF1, 0x9F96},{0x6CF3, 0x896A},{0x6D04, 0xEDDE},{0x6D0B, 0x976D},{0x6D0C, 0x9FAE},{0x6D12, 0x9FAD},{0x6D17, 0x90F4},
- {0x6D19, 0x9FAA},{0x6D1B, 0x978C},{0x6D1E, 0x93B4},{0x6D1F, 0x9FA4},{0x6D25, 0x92C3},{0x6D29, 0x896B},{0x6D2A, 0x8D5E},{0x6D2B, 0x9FA7},
- {0x6D32, 0x8F46},{0x6D33, 0x9FAC},{0x6D35, 0x9FAB},{0x6D36, 0x9FA6},{0x6D38, 0x9FA9},{0x6D3B, 0x8A88},{0x6D3D, 0x9FA8},{0x6D3E, 0x9468},
- {0x6D41, 0x97AC},{0x6D44, 0x8FF2},{0x6D45, 0x90F3},{0x6D59, 0x9FB4},{0x6D5A, 0x9FB2},{0x6D5C, 0x956C},{0x6D63, 0x9FAF},{0x6D64, 0x9FB1},
- {0x6D66, 0x8959},{0x6D69, 0x8D5F},{0x6D6A, 0x9851},{0x6D6C, 0x8A5C},{0x6D6E, 0x9582},{0x6D6F, 0xEDE0},{0x6D74, 0x9781},{0x6D77, 0x8A43},
- {0x6D78, 0x905A},{0x6D79, 0x9FB3},{0x6D85, 0x9FB8},{0x6D87, 0xEDDF},{0x6D88, 0x8FC1},{0x6D8C, 0x974F},{0x6D8E, 0x9FB5},{0x6D93, 0x9FB0},
- {0x6D95, 0x9FB6},{0x6D96, 0xEDE1},{0x6D99, 0x97DC},{0x6D9B, 0x9393},{0x6D9C, 0x93C0},{0x6DAC, 0xEDE2},{0x6DAF, 0x8A55},{0x6DB2, 0x8974},
- {0x6DB5, 0x9FBC},{0x6DB8, 0x9FBF},{0x6DBC, 0x97C1},{0x6DC0, 0x9784},{0x6DC5, 0x9FC6},{0x6DC6, 0x9FC0},{0x6DC7, 0x9FBD},{0x6DCB, 0x97D2},
- {0x6DCC, 0x9FC3},{0x6DCF, 0xEDE3},{0x6DD1, 0x8F69},{0x6DD2, 0x9FC5},{0x6DD5, 0x9FCA},{0x6DD8, 0x9391},{0x6DD9, 0x9FC8},{0x6DDE, 0x9FC2},
- {0x6DE1, 0x9257},{0x6DE4, 0x9FC9},{0x6DE6, 0x9FBE},{0x6DE8, 0x9FC4},{0x6DEA, 0x9FCB},{0x6DEB, 0x88FA},{0x6DEC, 0x9FC1},{0x6DEE, 0x9FCC},
- {0x6DF1, 0x905B},{0x6DF2, 0xEDE5},{0x6DF3, 0x8F7E},{0x6DF5, 0x95A3},{0x6DF7, 0x8DAC},{0x6DF8, 0xEDE4},{0x6DF9, 0x9FB9},{0x6DFA, 0x9FC7},
- {0x6DFB, 0x9359},{0x6DFC, 0xEDE6},{0x6E05, 0x90B4},{0x6E07, 0x8A89},{0x6E08, 0x8DCF},{0x6E09, 0x8FC2},{0x6E0A, 0x9FBB},{0x6E0B, 0x8F61},
- {0x6E13, 0x8C6B},{0x6E15, 0x9FBA},{0x6E19, 0x9FD0},{0x6E1A, 0x8F8D},{0x6E1B, 0x8CB8},{0x6E1D, 0x9FDF},{0x6E1F, 0x9FD9},{0x6E20, 0x8B94},
- {0x6E21, 0x936E},{0x6E23, 0x9FD4},{0x6E24, 0x9FDD},{0x6E25, 0x88AD},{0x6E26, 0x8951},{0x6E27, 0xEDE9},{0x6E29, 0x89B7},{0x6E2B, 0x9FD6},
- {0x6E2C, 0x91AA},{0x6E2D, 0x9FCD},{0x6E2E, 0x9FCF},{0x6E2F, 0x8D60},{0x6E38, 0x9FE0},{0x6E39, 0xEDE7},{0x6E3A, 0x9FDB},{0x6E3C, 0xEDEA},
- {0x6E3E, 0x9FD3},{0x6E43, 0x9FDA},{0x6E4A, 0x96A9},{0x6E4D, 0x9FD8},{0x6E4E, 0x9FDC},{0x6E56, 0x8CCE},{0x6E58, 0x8FC3},{0x6E5B, 0x9258},
- {0x6E5C, 0xEDE8},{0x6E5F, 0x9FD2},{0x6E67, 0x974E},{0x6E6B, 0x9FD5},{0x6E6E, 0x9FCE},{0x6E6F, 0x9392},{0x6E72, 0x9FD1},{0x6E76, 0x9FD7},
- {0x6E7E, 0x9870},{0x6E7F, 0x8EBC},{0x6E80, 0x969E},{0x6E82, 0x9FE1},{0x6E8C, 0x94AC},{0x6E8F, 0x9FED},{0x6E90, 0x8CB9},{0x6E96, 0x8F80},
- {0x6E98, 0x9FE3},{0x6E9C, 0x97AD},{0x6E9D, 0x8D61},{0x6E9F, 0x9FF0},{0x6EA2, 0x88EC},{0x6EA5, 0x9FEE},{0x6EAA, 0x9FE2},{0x6EAF, 0x9FE8},
- {0x6EB2, 0x9FEA},{0x6EB6, 0x976E},{0x6EB7, 0x9FE5},{0x6EBA, 0x934D},{0x6EBD, 0x9FE7},{0x6EBF, 0xEDEB},{0x6EC2, 0x9FEF},{0x6EC4, 0x9FE9},
- {0x6EC5, 0x96C5},{0x6EC9, 0x9FE4},{0x6ECB, 0x8EA0},{0x6ECC, 0x9FFC},{0x6ED1, 0x8A8A},{0x6ED3, 0x9FE6},{0x6ED4, 0x9FEB},{0x6ED5, 0x9FEC},
- {0x6EDD, 0x91EA},{0x6EDE, 0x91D8},{0x6EEC, 0x9FF4},{0x6EEF, 0x9FFA},{0x6EF2, 0x9FF8},{0x6EF4, 0x9348},{0x6EF7, 0xE042},{0x6EF8, 0x9FF5},
- {0x6EFE, 0x9FF6},{0x6EFF, 0x9FDE},{0x6F01, 0x8B99},{0x6F02, 0x9559},{0x6F06, 0x8EBD},{0x6F09, 0x8D97},{0x6F0F, 0x9852},{0x6F11, 0x9FF2},
- {0x6F13, 0xE041},{0x6F14, 0x8989},{0x6F15, 0x9186},{0x6F20, 0x9499},{0x6F22, 0x8ABF},{0x6F23, 0x97F8},{0x6F2B, 0x969F},{0x6F2C, 0x92D0},
- {0x6F31, 0x9FF9},{0x6F32, 0x9FFB},{0x6F38, 0x9151},{0x6F3E, 0xE040},{0x6F3F, 0x9FF7},{0x6F41, 0x9FF1},{0x6F45, 0x8AC1},{0x6F54, 0x8C89},
- {0x6F58, 0xE04E},{0x6F5B, 0xE049},{0x6F5C, 0x90F6},{0x6F5F, 0x8A83},{0x6F64, 0x8F81},{0x6F66, 0xE052},{0x6F6D, 0xE04B},{0x6F6E, 0x92AA},
- {0x6F6F, 0xE048},{0x6F70, 0x92D7},{0x6F74, 0xE06B},{0x6F78, 0xE045},{0x6F7A, 0xE044},{0x6F7C, 0xE04D},{0x6F80, 0xE047},{0x6F81, 0xE046},
- {0x6F82, 0xE04C},{0x6F84, 0x909F},{0x6F86, 0xE043},{0x6F88, 0xEDEC},{0x6F8E, 0xE04F},{0x6F91, 0xE050},{0x6F97, 0x8AC0},{0x6FA1, 0xE055},
- {0x6FA3, 0xE054},{0x6FA4, 0xE056},{0x6FAA, 0xE059},{0x6FB1, 0x9362},{0x6FB3, 0xE053},{0x6FB5, 0xEDED},{0x6FB9, 0xE057},{0x6FC0, 0x8C83},
- {0x6FC1, 0x91F7},{0x6FC2, 0xE051},{0x6FC3, 0x945A},{0x6FC6, 0xE058},{0x6FD4, 0xE05D},{0x6FD5, 0xE05B},{0x6FD8, 0xE05E},{0x6FDB, 0xE061},
- {0x6FDF, 0xE05A},{0x6FE0, 0x8D8A},{0x6FE1, 0x9447},{0x6FE4, 0x9FB7},{0x6FEB, 0x9794},{0x6FEC, 0xE05C},{0x6FEE, 0xE060},{0x6FEF, 0x91F3},
- {0x6FF1, 0xE05F},{0x6FF3, 0xE04A},{0x6FF5, 0xEDEE},{0x6FF6, 0xE889},{0x6FFA, 0xE064},{0x6FFE, 0xE068},{0x7001, 0xE066},{0x7005, 0xEDEF},
- {0x7007, 0xEDF0},{0x7009, 0xE062},{0x700B, 0xE063},{0x700F, 0xE067},{0x7011, 0xE065},{0x7015, 0x956D},{0x7018, 0xE06D},{0x701A, 0xE06A},
- {0x701B, 0xE069},{0x701D, 0xE06C},{0x701E, 0x93D2},{0x701F, 0xE06E},{0x7026, 0x9295},{0x7027, 0x91EB},{0x7028, 0xEDF1},{0x702C, 0x90A3},
- {0x7030, 0xE06F},{0x7032, 0xE071},{0x703E, 0xE070},{0x704C, 0x9FF3},{0x7051, 0xE072},{0x7058, 0x93E5},{0x7063, 0xE073},{0x706B, 0x89CE},
- {0x706F, 0x9394},{0x7070, 0x8A44},{0x7078, 0x8B84},{0x707C, 0x8EDC},{0x707D, 0x8DD0},{0x7085, 0xEDF2},{0x7089, 0x9846},{0x708A, 0x9086},
- {0x708E, 0x898A},{0x7092, 0xE075},{0x7099, 0xE074},{0x70AB, 0xEDF3},{0x70AC, 0xE078},{0x70AD, 0x9259},{0x70AE, 0xE07B},{0x70AF, 0xE076},
- {0x70B3, 0xE07A},{0x70B8, 0xE079},{0x70B9, 0x935F},{0x70BA, 0x88D7},{0x70BB, 0xED46},{0x70C8, 0x97F3},{0x70CB, 0xE07D},{0x70CF, 0x8947},
- {0x70D9, 0xE080},{0x70DD, 0xE07E},{0x70DF, 0xE07C},{0x70F1, 0xE077},{0x70F9, 0x9642},{0x70FD, 0xE082},{0x7104, 0xEDF5},{0x7109, 0xE081},
- {0x710F, 0xEDF4},{0x7114, 0x898B},{0x7119, 0xE084},{0x711A, 0x95B0},{0x711C, 0xE083},{0x7121, 0x96B3},{0x7126, 0x8FC5},{0x7136, 0x9152},
- {0x713C, 0x8FC4},{0x7146, 0xEDF7},{0x7147, 0xEDF8},{0x7149, 0x97F9},{0x714C, 0xE08A},{0x714E, 0x90F7},{0x7155, 0xE086},{0x7156, 0xE08B},
- {0x7159, 0x898C},{0x715C, 0xEDF6},{0x7162, 0xE089},{0x7164, 0x9481},{0x7165, 0xE085},{0x7166, 0xE088},{0x7167, 0x8FC6},{0x7169, 0x94CF},
- {0x716C, 0xE08C},{0x716E, 0x8ECF},{0x717D, 0x90F8},{0x7184, 0xE08F},{0x7188, 0xE087},{0x718A, 0x8C46},{0x718F, 0xE08D},{0x7194, 0x976F},
- {0x7195, 0xE090},{0x7199, 0xEAA4},{0x719F, 0x8F6E},{0x71A8, 0xE091},{0x71AC, 0xE092},{0x71B1, 0x944D},{0x71B9, 0xE094},{0x71BE, 0xE095},
- {0x71C1, 0xEDFA},{0x71C3, 0x9452},{0x71C8, 0x9395},{0x71C9, 0xE097},{0x71CE, 0xE099},{0x71D0, 0x97D3},{0x71D2, 0xE096},{0x71D4, 0xE098},
- {0x71D5, 0x898D},{0x71D7, 0xE093},{0x71DF, 0x9A7A},{0x71E0, 0xE09A},{0x71E5, 0x9187},{0x71E6, 0x8E57},{0x71E7, 0xE09C},{0x71EC, 0xE09B},
- {0x71ED, 0x9043},{0x71EE, 0x99D7},{0x71F5, 0xE09D},{0x71F9, 0xE09F},{0x71FB, 0xE08E},{0x71FC, 0xE09E},{0x71FE, 0xEDFB},{0x71FF, 0xE0A0},
- {0x7206, 0x949A},{0x720D, 0xE0A1},{0x7210, 0xE0A2},{0x721B, 0xE0A3},{0x7228, 0xE0A4},{0x722A, 0x92DC},{0x722C, 0xE0A6},{0x722D, 0xE0A5},
- {0x7230, 0xE0A7},{0x7232, 0xE0A8},{0x7235, 0x8EDD},{0x7236, 0x9583},{0x723A, 0x96EA},{0x723B, 0xE0A9},{0x723C, 0xE0AA},{0x723D, 0x9175},
- {0x723E, 0x8EA2},{0x723F, 0xE0AB},{0x7240, 0xE0AC},{0x7246, 0xE0AD},{0x7247, 0x95D0},{0x7248, 0x94C5},{0x724B, 0xE0AE},{0x724C, 0x9476},
- {0x7252, 0x92AB},{0x7258, 0xE0AF},{0x7259, 0x89E5},{0x725B, 0x8B8D},{0x725D, 0x96C4},{0x725F, 0x96B4},{0x7261, 0x89B2},{0x7262, 0x9853},
- {0x7267, 0x9671},{0x7269, 0x95A8},{0x7272, 0x90B5},{0x7274, 0xE0B0},{0x7279, 0x93C1},{0x727D, 0x8CA1},{0x727E, 0xE0B1},{0x7280, 0x8DD2},
- {0x7281, 0xE0B3},{0x7282, 0xE0B2},{0x7287, 0xE0B4},{0x7292, 0xE0B5},{0x7296, 0xE0B6},{0x72A0, 0x8B5D},{0x72A2, 0xE0B7},{0x72A7, 0xE0B8},
- {0x72AC, 0x8CA2},{0x72AF, 0x94C6},{0x72B1, 0xEDFC},{0x72B2, 0xE0BA},{0x72B6, 0x8FF3},{0x72B9, 0xE0B9},{0x72BE, 0xEE40},{0x72C2, 0x8BB6},
- {0x72C3, 0xE0BB},{0x72C4, 0xE0BD},{0x72C6, 0xE0BC},{0x72CE, 0xE0BE},{0x72D0, 0x8CCF},{0x72D2, 0xE0BF},{0x72D7, 0x8BE7},{0x72D9, 0x915F},
- {0x72DB, 0x8D9D},{0x72E0, 0xE0C1},{0x72E1, 0xE0C2},{0x72E2, 0xE0C0},{0x72E9, 0x8EEB},{0x72EC, 0x93C6},{0x72ED, 0x8BB7},{0x72F7, 0xE0C4},
- {0x72F8, 0x924B},{0x72F9, 0xE0C3},{0x72FC, 0x9854},{0x72FD, 0x9482},{0x730A, 0xE0C7},{0x7316, 0xE0C9},{0x7317, 0xE0C6},{0x731B, 0x96D2},
- {0x731C, 0xE0C8},{0x731D, 0xE0CA},{0x731F, 0x97C2},{0x7324, 0xEE41},{0x7325, 0xE0CE},{0x7329, 0xE0CD},{0x732A, 0x9296},{0x732B, 0x944C},
- {0x732E, 0x8CA3},{0x732F, 0xE0CC},{0x7334, 0xE0CB},{0x7336, 0x9750},{0x7337, 0x9751},{0x733E, 0xE0CF},{0x733F, 0x898E},{0x7344, 0x8D96},
- {0x7345, 0x8E82},{0x734E, 0xE0D0},{0x734F, 0xE0D1},{0x7357, 0xE0D3},{0x7363, 0x8F62},{0x7368, 0xE0D5},{0x736A, 0xE0D4},{0x7370, 0xE0D6},
- {0x7372, 0x8A6C},{0x7375, 0xE0D8},{0x7377, 0xEE43},{0x7378, 0xE0D7},{0x737A, 0xE0DA},{0x737B, 0xE0D9},{0x7384, 0x8CBA},{0x7387, 0x97A6},
- {0x7389, 0x8BCA},{0x738B, 0x89A4},{0x7396, 0x8BE8},{0x73A9, 0x8ADF},{0x73B2, 0x97E6},{0x73B3, 0xE0DC},{0x73BB, 0xE0DE},{0x73BD, 0xEE44},
- {0x73C0, 0xE0DF},{0x73C2, 0x89CF},{0x73C8, 0xE0DB},{0x73C9, 0xEE45},{0x73CA, 0x8E58},{0x73CD, 0x92BF},{0x73CE, 0xE0DD},{0x73D2, 0xEE48},
- {0x73D6, 0xEE46},{0x73DE, 0xE0E2},{0x73E0, 0x8EEC},{0x73E3, 0xEE47},{0x73E5, 0xE0E0},{0x73EA, 0x8C5D},{0x73ED, 0x94C7},{0x73EE, 0xE0E1},
- {0x73F1, 0xE0FC},{0x73F5, 0xEE4A},{0x73F8, 0xE0E7},{0x73FE, 0x8CBB},{0x7403, 0x8B85},{0x7405, 0xE0E4},{0x7406, 0x979D},{0x7407, 0xEE49},
- {0x7409, 0x97AE},{0x7422, 0x91F4},{0x7425, 0xE0E6},{0x7426, 0xEE4B},{0x7429, 0xEE4D},{0x742A, 0xEE4C},{0x742E, 0xEE4E},{0x7432, 0xE0E8},
- {0x7433, 0x97D4},{0x7434, 0x8BD5},{0x7435, 0x94FA},{0x7436, 0x9469},{0x743A, 0xE0E9},{0x743F, 0xE0EB},{0x7441, 0xE0EE},{0x7455, 0xE0EA},
- {0x7459, 0xE0ED},{0x745A, 0x8CE8},{0x745B, 0x896C},{0x745C, 0xE0EF},{0x745E, 0x9090},{0x745F, 0xE0EC},{0x7460, 0x97DA},{0x7462, 0xEE4F},
- {0x7463, 0xE0F2},{0x7464, 0xEAA2},{0x7469, 0xE0F0},{0x746A, 0xE0F3},{0x746F, 0xE0E5},{0x7470, 0xE0F1},{0x7473, 0x8DBA},{0x7476, 0xE0F4},
- {0x747E, 0xE0F5},{0x7483, 0x979E},{0x7489, 0xEE50},{0x748B, 0xE0F6},{0x749E, 0xE0F7},{0x749F, 0xEE51},{0x74A2, 0xE0E3},{0x74A7, 0xE0F8},
- {0x74B0, 0x8AC2},{0x74BD, 0x8EA3},{0x74CA, 0xE0F9},{0x74CF, 0xE0FA},{0x74D4, 0xE0FB},{0x74DC, 0x895A},{0x74E0, 0xE140},{0x74E2, 0x955A},
- {0x74E3, 0xE141},{0x74E6, 0x8AA2},{0x74E7, 0xE142},{0x74E9, 0xE143},{0x74EE, 0xE144},{0x74F0, 0xE146},{0x74F1, 0xE147},{0x74F2, 0xE145},
- {0x74F6, 0x9572},{0x74F7, 0xE149},{0x74F8, 0xE148},{0x7501, 0xEE52},{0x7503, 0xE14B},{0x7504, 0xE14A},{0x7505, 0xE14C},{0x750C, 0xE14D},
- {0x750D, 0xE14F},{0x750E, 0xE14E},{0x7511, 0x8D99},{0x7513, 0xE151},{0x7515, 0xE150},{0x7518, 0x8AC3},{0x751A, 0x9072},{0x751C, 0x935B},
- {0x751E, 0xE152},{0x751F, 0x90B6},{0x7523, 0x8E59},{0x7525, 0x8999},{0x7526, 0xE153},{0x7528, 0x9770},{0x752B, 0x95E1},{0x752C, 0xE154},
- {0x752F, 0xED8C},{0x7530, 0x9363},{0x7531, 0x9752},{0x7532, 0x8D62},{0x7533, 0x905C},{0x7537, 0x926A},{0x7538, 0x99B2},{0x753A, 0x92AC},
- {0x753B, 0x89E6},{0x753C, 0xE155},{0x7544, 0xE156},{0x7546, 0xE15B},{0x7549, 0xE159},{0x754A, 0xE158},{0x754B, 0x9DC0},{0x754C, 0x8A45},
- {0x754D, 0xE157},{0x754F, 0x88D8},{0x7551, 0x94A8},{0x7554, 0x94C8},{0x7559, 0x97AF},{0x755A, 0xE15C},{0x755B, 0xE15A},{0x755C, 0x927B},
- {0x755D, 0x90A4},{0x7560, 0x94A9},{0x7562, 0x954C},{0x7564, 0xE15E},{0x7565, 0x97AA},{0x7566, 0x8C6C},{0x7567, 0xE15F},{0x7569, 0xE15D},
- {0x756A, 0x94D4},{0x756B, 0xE160},{0x756D, 0xE161},{0x756F, 0xEE53},{0x7570, 0x88D9},{0x7573, 0x8FF4},{0x7574, 0xE166},{0x7576, 0xE163},
- {0x7577, 0x93EB},{0x7578, 0xE162},{0x757F, 0x8B45},{0x7582, 0xE169},{0x7586, 0xE164},{0x7587, 0xE165},{0x7589, 0xE168},{0x758A, 0xE167},
- {0x758B, 0x9544},{0x758E, 0x9161},{0x758F, 0x9160},{0x7591, 0x8B5E},{0x7594, 0xE16A},{0x759A, 0xE16B},{0x759D, 0xE16C},{0x75A3, 0xE16E},
- {0x75A5, 0xE16D},{0x75AB, 0x8975},{0x75B1, 0xE176},{0x75B2, 0x94E6},{0x75B3, 0xE170},{0x75B5, 0xE172},{0x75B8, 0xE174},{0x75B9, 0x905D},
- {0x75BC, 0xE175},{0x75BD, 0xE173},{0x75BE, 0x8EBE},{0x75C2, 0xE16F},{0x75C3, 0xE171},{0x75C5, 0x9561},{0x75C7, 0x8FC7},{0x75CA, 0xE178},
- {0x75CD, 0xE177},{0x75D2, 0xE179},{0x75D4, 0x8EA4},{0x75D5, 0x8DAD},{0x75D8, 0x9397},{0x75D9, 0xE17A},{0x75DB, 0x92C9},{0x75DE, 0xE17C},
- {0x75E2, 0x979F},{0x75E3, 0xE17B},{0x75E9, 0x9189},{0x75F0, 0xE182},{0x75F2, 0xE184},{0x75F3, 0xE185},{0x75F4, 0x9273},{0x75FA, 0xE183},
- {0x75FC, 0xE180},{0x75FE, 0xE17D},{0x75FF, 0xE17E},{0x7601, 0xE181},{0x7609, 0xE188},{0x760B, 0xE186},{0x760D, 0xE187},{0x761F, 0xE189},
- {0x7620, 0xE18B},{0x7621, 0xE18C},{0x7622, 0xE18D},{0x7624, 0xE18E},{0x7627, 0xE18A},{0x7630, 0xE190},{0x7634, 0xE18F},{0x763B, 0xE191},
- {0x7642, 0x97C3},{0x7646, 0xE194},{0x7647, 0xE192},{0x7648, 0xE193},{0x764C, 0x8AE0},{0x7652, 0x96FC},{0x7656, 0x95C8},{0x7658, 0xE196},
- {0x765C, 0xE195},{0x7661, 0xE197},{0x7662, 0xE198},{0x7667, 0xE19C},{0x7668, 0xE199},{0x7669, 0xE19A},{0x766A, 0xE19B},{0x766C, 0xE19D},
- {0x7670, 0xE19E},{0x7672, 0xE19F},{0x7676, 0xE1A0},{0x7678, 0xE1A1},{0x767A, 0x94AD},{0x767B, 0x936F},{0x767C, 0xE1A2},{0x767D, 0x9492},
- {0x767E, 0x9553},{0x7680, 0xE1A3},{0x7682, 0xEE54},{0x7683, 0xE1A4},{0x7684, 0x9349},{0x7686, 0x8A46},{0x7687, 0x8D63},{0x7688, 0xE1A5},
- {0x768B, 0xE1A6},{0x768E, 0xE1A7},{0x7690, 0x8E48},{0x7693, 0xE1A9},{0x7696, 0xE1A8},{0x7699, 0xE1AA},{0x769A, 0xE1AB},{0x769B, 0xEE57},
- {0x769C, 0xEE55},{0x769E, 0xEE56},{0x76A6, 0xEE58},{0x76AE, 0x94E7},{0x76B0, 0xE1AC},{0x76B4, 0xE1AD},{0x76B7, 0xEA89},{0x76B8, 0xE1AE},
- {0x76B9, 0xE1AF},{0x76BA, 0xE1B0},{0x76BF, 0x8E4D},{0x76C2, 0xE1B1},{0x76C3, 0x9475},{0x76C6, 0x967E},{0x76C8, 0x896D},{0x76CA, 0x8976},
- {0x76CD, 0xE1B2},{0x76D2, 0xE1B4},{0x76D6, 0xE1B3},{0x76D7, 0x9390},{0x76DB, 0x90B7},{0x76DC, 0x9F58},{0x76DE, 0xE1B5},{0x76DF, 0x96BF},
- {0x76E1, 0xE1B6},{0x76E3, 0x8AC4},{0x76E4, 0x94D5},{0x76E5, 0xE1B7},{0x76E7, 0xE1B8},{0x76EA, 0xE1B9},{0x76EE, 0x96DA},{0x76F2, 0x96D3},
- {0x76F4, 0x92BC},{0x76F8, 0x918A},{0x76FB, 0xE1BB},{0x76FE, 0x8F82},{0x7701, 0x8FC8},{0x7704, 0xE1BE},{0x7707, 0xE1BD},{0x7708, 0xE1BC},
- {0x7709, 0x94FB},{0x770B, 0x8AC5},{0x770C, 0x8CA7},{0x771B, 0xE1C4},{0x771E, 0xE1C1},{0x771F, 0x905E},{0x7720, 0x96B0},{0x7724, 0xE1C0},
- {0x7725, 0xE1C2},{0x7726, 0xE1C3},{0x7729, 0xE1BF},{0x7737, 0xE1C5},{0x7738, 0xE1C6},{0x773A, 0x92AD},{0x773C, 0x8AE1},{0x7740, 0x9285},
- {0x7746, 0xEE5A},{0x7747, 0xE1C7},{0x775A, 0xE1C8},{0x775B, 0xE1CB},{0x7761, 0x9087},{0x7763, 0x93C2},{0x7765, 0xE1CC},{0x7766, 0x9672},
- {0x7768, 0xE1C9},{0x776B, 0xE1CA},{0x7779, 0xE1CF},{0x777E, 0xE1CE},{0x777F, 0xE1CD},{0x778B, 0xE1D1},{0x778E, 0xE1D0},{0x7791, 0xE1D2},
- {0x779E, 0xE1D4},{0x77A0, 0xE1D3},{0x77A5, 0x95CB},{0x77AC, 0x8F75},{0x77AD, 0x97C4},{0x77B0, 0xE1D5},{0x77B3, 0x93B5},{0x77B6, 0xE1D6},
- {0x77B9, 0xE1D7},{0x77BB, 0xE1DB},{0x77BC, 0xE1D9},{0x77BD, 0xE1DA},{0x77BF, 0xE1D8},{0x77C7, 0xE1DC},{0x77CD, 0xE1DD},{0x77D7, 0xE1DE},
- {0x77DA, 0xE1DF},{0x77DB, 0x96B5},{0x77DC, 0xE1E0},{0x77E2, 0x96EE},{0x77E3, 0xE1E1},{0x77E5, 0x926D},{0x77E7, 0x948A},{0x77E9, 0x8BE9},
- {0x77ED, 0x925A},{0x77EE, 0xE1E2},{0x77EF, 0x8BB8},{0x77F3, 0x90CE},{0x77FC, 0xE1E3},{0x7802, 0x8DBB},{0x780C, 0xE1E4},{0x7812, 0xE1E5},
- {0x7814, 0x8CA4},{0x7815, 0x8DD3},{0x7820, 0xE1E7},{0x7821, 0xEE5C},{0x7825, 0x9375},{0x7826, 0x8DD4},{0x7827, 0x8B6D},{0x7832, 0x9643},
- {0x7834, 0x946A},{0x783A, 0x9376},{0x783F, 0x8D7B},{0x7845, 0xE1E9},{0x784E, 0xEE5D},{0x785D, 0x8FC9},{0x7864, 0xEE5E},{0x786B, 0x97B0},
- {0x786C, 0x8D64},{0x786F, 0x8CA5},{0x7872, 0x94A1},{0x7874, 0xE1EB},{0x787A, 0xEE5F},{0x787C, 0xE1ED},{0x7881, 0x8CE9},{0x7886, 0xE1EC},
- {0x7887, 0x92F4},{0x788C, 0xE1EF},{0x788D, 0x8A56},{0x788E, 0xE1EA},{0x7891, 0x94E8},{0x7893, 0x894F},{0x7895, 0x8DEA},{0x7897, 0x9871},
- {0x789A, 0xE1EE},{0x78A3, 0xE1F0},{0x78A7, 0x95C9},{0x78A9, 0x90D7},{0x78AA, 0xE1F2},{0x78AF, 0xE1F3},{0x78B5, 0xE1F1},{0x78BA, 0x8A6D},
- {0x78BC, 0xE1F9},{0x78BE, 0xE1F8},{0x78C1, 0x8EA5},{0x78C5, 0xE1FA},{0x78C6, 0xE1F5},{0x78CA, 0xE1FB},{0x78CB, 0xE1F6},{0x78D0, 0x94D6},
- {0x78D1, 0xE1F4},{0x78D4, 0xE1F7},{0x78DA, 0xE241},{0x78E7, 0xE240},{0x78E8, 0x9681},{0x78EC, 0xE1FC},{0x78EF, 0x88E9},{0x78F4, 0xE243},
- {0x78FD, 0xE242},{0x7901, 0x8FCA},{0x7907, 0xE244},{0x790E, 0x9162},{0x7911, 0xE246},{0x7912, 0xE245},{0x7919, 0xE247},{0x7926, 0xE1E6},
- {0x792A, 0xE1E8},{0x792B, 0xE249},{0x792C, 0xE248},{0x7930, 0xEE60},{0x793A, 0x8EA6},{0x793C, 0x97E7},{0x793E, 0x8ED0},{0x7940, 0xE24A},
- {0x7941, 0x8C56},{0x7947, 0x8B5F},{0x7948, 0x8B46},{0x7949, 0x8E83},{0x7950, 0x9753},{0x7953, 0xE250},{0x7955, 0xE24F},{0x7956, 0x9163},
- {0x7957, 0xE24C},{0x795A, 0xE24E},{0x795D, 0x8F6A},{0x795E, 0x905F},{0x795F, 0xE24D},{0x7960, 0xE24B},{0x7962, 0x9449},{0x7965, 0x8FCB},
- {0x7968, 0x955B},{0x796D, 0x8DD5},{0x7977, 0x9398},{0x797A, 0xE251},{0x797F, 0xE252},{0x7980, 0xE268},{0x7981, 0x8BD6},{0x7984, 0x985C},
- {0x7985, 0x9154},{0x798A, 0xE253},{0x798D, 0x89D0},{0x798E, 0x92F5},{0x798F, 0x959F},{0x7994, 0xEE64},{0x799B, 0xEE66},{0x799D, 0xE254},
- {0x79A6, 0x8B9A},{0x79A7, 0xE255},{0x79AA, 0xE257},{0x79AE, 0xE258},{0x79B0, 0x9448},{0x79B3, 0xE259},{0x79B9, 0xE25A},{0x79BA, 0xE25B},
- {0x79BD, 0x8BD7},{0x79BE, 0x89D1},{0x79BF, 0x93C3},{0x79C0, 0x8F47},{0x79C1, 0x8E84},{0x79C9, 0xE25C},{0x79CB, 0x8F48},{0x79D1, 0x89C8},
- {0x79D2, 0x9562},{0x79D5, 0xE25D},{0x79D8, 0x94E9},{0x79DF, 0x9164},{0x79E1, 0xE260},{0x79E3, 0xE261},{0x79E4, 0x9489},{0x79E6, 0x9060},
- {0x79E7, 0xE25E},{0x79E9, 0x9281},{0x79EC, 0xE25F},{0x79F0, 0x8FCC},{0x79FB, 0x88DA},{0x7A00, 0x8B48},{0x7A08, 0xE262},{0x7A0B, 0x92F6},
- {0x7A0D, 0xE263},{0x7A0E, 0x90C5},{0x7A14, 0x96AB},{0x7A17, 0x9542},{0x7A18, 0xE264},{0x7A19, 0xE265},{0x7A1A, 0x9274},{0x7A1C, 0x97C5},
- {0x7A1F, 0xE267},{0x7A20, 0xE266},{0x7A2E, 0x8EED},{0x7A31, 0xE269},{0x7A32, 0x88EE},{0x7A37, 0xE26C},{0x7A3B, 0xE26A},{0x7A3C, 0x89D2},
- {0x7A3D, 0x8C6D},{0x7A3E, 0xE26B},{0x7A3F, 0x8D65},{0x7A40, 0x8D92},{0x7A42, 0x95E4},{0x7A43, 0xE26D},{0x7A46, 0x9673},{0x7A49, 0xE26F},
- {0x7A4D, 0x90CF},{0x7A4E, 0x896E},{0x7A4F, 0x89B8},{0x7A50, 0x88AA},{0x7A57, 0xE26E},{0x7A61, 0xE270},{0x7A62, 0xE271},{0x7A63, 0x8FF5},
- {0x7A69, 0xE272},{0x7A6B, 0x8A6E},{0x7A70, 0xE274},{0x7A74, 0x8C8A},{0x7A76, 0x8B86},{0x7A79, 0xE275},{0x7A7A, 0x8BF3},{0x7A7D, 0xE276},
- {0x7A7F, 0x90FA},{0x7A81, 0x93CB},{0x7A83, 0x90DE},{0x7A84, 0x8DF3},{0x7A88, 0xE277},{0x7A92, 0x9282},{0x7A93, 0x918B},{0x7A95, 0xE279},
- {0x7A96, 0xE27B},{0x7A97, 0xE278},{0x7A98, 0xE27A},{0x7A9F, 0x8C41},{0x7AA9, 0xE27C},{0x7AAA, 0x8C45},{0x7AAE, 0x8B87},{0x7AAF, 0x9771},
- {0x7AB0, 0xE27E},{0x7AB6, 0xE280},{0x7ABA, 0x894D},{0x7ABF, 0xE283},{0x7AC3, 0x8A96},{0x7AC4, 0xE282},{0x7AC5, 0xE281},{0x7AC7, 0xE285},
- {0x7AC8, 0xE27D},{0x7ACA, 0xE286},{0x7ACB, 0x97A7},{0x7ACD, 0xE287},{0x7ACF, 0xE288},{0x7AD1, 0xEE67},{0x7AD2, 0x9AF2},{0x7AD3, 0xE28A},
- {0x7AD5, 0xE289},{0x7AD9, 0xE28B},{0x7ADA, 0xE28C},{0x7ADC, 0x97B3},{0x7ADD, 0xE28D},{0x7ADF, 0xE8ED},{0x7AE0, 0x8FCD},{0x7AE1, 0xE28E},
- {0x7AE2, 0xE28F},{0x7AE3, 0x8F76},{0x7AE5, 0x93B6},{0x7AE6, 0xE290},{0x7AE7, 0xEE68},{0x7AEA, 0x9247},{0x7AEB, 0xEE6A},{0x7AED, 0xE291},
- {0x7AEF, 0x925B},{0x7AF0, 0xE292},{0x7AF6, 0x8BA3},{0x7AF8, 0x995E},{0x7AF9, 0x927C},{0x7AFA, 0x8EB1},{0x7AFF, 0x8AC6},{0x7B02, 0xE293},
- {0x7B04, 0xE2A0},{0x7B06, 0xE296},{0x7B08, 0x8B88},{0x7B0A, 0xE295},{0x7B0B, 0xE2A2},{0x7B0F, 0xE294},{0x7B11, 0x8FCE},{0x7B18, 0xE298},
- {0x7B19, 0xE299},{0x7B1B, 0x934A},{0x7B1E, 0xE29A},{0x7B20, 0x8A7D},{0x7B25, 0x9079},{0x7B26, 0x9584},{0x7B28, 0xE29C},{0x7B2C, 0x91E6},
- {0x7B33, 0xE297},{0x7B35, 0xE29B},{0x7B36, 0xE29D},{0x7B39, 0x8DF9},{0x7B45, 0xE2A4},{0x7B46, 0x954D},{0x7B48, 0x94A4},{0x7B49, 0x9399},
- {0x7B4B, 0x8BD8},{0x7B4C, 0xE2A3},{0x7B4D, 0xE2A1},{0x7B4F, 0x94B3},{0x7B50, 0xE29E},{0x7B51, 0x927D},{0x7B52, 0x939B},{0x7B54, 0x939A},
- {0x7B56, 0x8DF4},{0x7B5D, 0xE2B6},{0x7B65, 0xE2A6},{0x7B67, 0xE2A8},{0x7B6C, 0xE2AB},{0x7B6E, 0xE2AC},{0x7B70, 0xE2A9},{0x7B71, 0xE2AA},
- {0x7B74, 0xE2A7},{0x7B75, 0xE2A5},{0x7B7A, 0xE29F},{0x7B86, 0x95CD},{0x7B87, 0x89D3},{0x7B8B, 0xE2B3},{0x7B8D, 0xE2B0},{0x7B8F, 0xE2B5},
- {0x7B92, 0xE2B4},{0x7B94, 0x9493},{0x7B95, 0x96A5},{0x7B97, 0x8E5A},{0x7B98, 0xE2AE},{0x7B99, 0xE2B7},{0x7B9A, 0xE2B2},{0x7B9C, 0xE2B1},
- {0x7B9D, 0xE2AD},{0x7B9E, 0xEE6B},{0x7B9F, 0xE2AF},{0x7BA1, 0x8AC7},{0x7BAA, 0x925C},{0x7BAD, 0x90FB},{0x7BB1, 0x94A0},{0x7BB4, 0xE2BC},
- {0x7BB8, 0x94A2},{0x7BC0, 0x90DF},{0x7BC1, 0xE2B9},{0x7BC4, 0x94CD},{0x7BC6, 0xE2BD},{0x7BC7, 0x95D1},{0x7BC9, 0x927A},{0x7BCB, 0xE2B8},
- {0x7BCC, 0xE2BA},{0x7BCF, 0xE2BB},{0x7BDD, 0xE2BE},{0x7BE0, 0x8EC2},{0x7BE4, 0x93C4},{0x7BE5, 0xE2C3},{0x7BE6, 0xE2C2},{0x7BE9, 0xE2BF},
- {0x7BED, 0x9855},{0x7BF3, 0xE2C8},{0x7BF6, 0xE2CC},{0x7BF7, 0xE2C9},{0x7C00, 0xE2C5},{0x7C07, 0xE2C6},{0x7C0D, 0xE2CB},{0x7C11, 0xE2C0},
- {0x7C12, 0x99D3},{0x7C13, 0xE2C7},{0x7C14, 0xE2C1},{0x7C17, 0xE2CA},{0x7C1F, 0xE2D0},{0x7C21, 0x8AC8},{0x7C23, 0xE2CD},{0x7C27, 0xE2CE},
- {0x7C2A, 0xE2CF},{0x7C2B, 0xE2D2},{0x7C37, 0xE2D1},{0x7C38, 0x94F4},{0x7C3D, 0xE2D3},{0x7C3E, 0x97FA},{0x7C3F, 0x95EB},{0x7C40, 0xE2D8},
- {0x7C43, 0xE2D5},{0x7C4C, 0xE2D4},{0x7C4D, 0x90D0},{0x7C4F, 0xE2D7},{0x7C50, 0xE2D9},{0x7C54, 0xE2D6},{0x7C56, 0xE2DD},{0x7C58, 0xE2DA},
- {0x7C5F, 0xE2DB},{0x7C60, 0xE2C4},{0x7C64, 0xE2DC},{0x7C65, 0xE2DE},{0x7C6C, 0xE2DF},{0x7C73, 0x95C4},{0x7C75, 0xE2E0},{0x7C7E, 0x96E0},
- {0x7C81, 0x8BCC},{0x7C82, 0x8C48},{0x7C83, 0xE2E1},{0x7C89, 0x95B2},{0x7C8B, 0x9088},{0x7C8D, 0x96AE},{0x7C90, 0xE2E2},{0x7C92, 0x97B1},
- {0x7C95, 0x9494},{0x7C97, 0x9165},{0x7C98, 0x9453},{0x7C9B, 0x8F6C},{0x7C9F, 0x88BE},{0x7CA1, 0xE2E7},{0x7CA2, 0xE2E5},{0x7CA4, 0xE2E3},
- {0x7CA5, 0x8A9F},{0x7CA7, 0x8FCF},{0x7CA8, 0xE2E8},{0x7CAB, 0xE2E6},{0x7CAD, 0xE2E4},{0x7CAE, 0xE2EC},{0x7CB1, 0xE2EB},{0x7CB2, 0xE2EA},
- {0x7CB3, 0xE2E9},{0x7CB9, 0xE2ED},{0x7CBD, 0xE2EE},{0x7CBE, 0x90B8},{0x7CC0, 0xE2EF},{0x7CC2, 0xE2F1},{0x7CC5, 0xE2F0},{0x7CCA, 0x8CD0},
- {0x7CCE, 0x9157},{0x7CD2, 0xE2F3},{0x7CD6, 0x939C},{0x7CD8, 0xE2F2},{0x7CDC, 0xE2F4},{0x7CDE, 0x95B3},{0x7CDF, 0x918C},{0x7CE0, 0x8D66},
- {0x7CE2, 0xE2F5},{0x7CE7, 0x97C6},{0x7CEF, 0xE2F7},{0x7CF2, 0xE2F8},{0x7CF4, 0xE2F9},{0x7CF6, 0xE2FA},{0x7CF8, 0x8E85},{0x7CFA, 0xE2FB},
- {0x7CFB, 0x8C6E},{0x7CFE, 0x8B8A},{0x7D00, 0x8B49},{0x7D02, 0xE340},{0x7D04, 0x96F1},{0x7D05, 0x8D67},{0x7D06, 0xE2FC},{0x7D0A, 0xE343},
- {0x7D0B, 0x96E4},{0x7D0D, 0x945B},{0x7D10, 0x9552},{0x7D14, 0x8F83},{0x7D15, 0xE342},{0x7D17, 0x8ED1},{0x7D18, 0x8D68},{0x7D19, 0x8E86},
- {0x7D1A, 0x8B89},{0x7D1B, 0x95B4},{0x7D1C, 0xE341},{0x7D20, 0x9166},{0x7D21, 0x9661},{0x7D22, 0x8DF5},{0x7D2B, 0x8E87},{0x7D2C, 0x92DB},
- {0x7D2E, 0xE346},{0x7D2F, 0x97DD},{0x7D30, 0x8DD7},{0x7D32, 0xE347},{0x7D33, 0x9061},{0x7D35, 0xE349},{0x7D39, 0x8FD0},{0x7D3A, 0x8DAE},
- {0x7D3F, 0xE348},{0x7D42, 0x8F49},{0x7D43, 0x8CBC},{0x7D44, 0x9167},{0x7D45, 0xE344},{0x7D46, 0xE34A},{0x7D48, 0xEE6D},{0x7D4B, 0xE345},
- {0x7D4C, 0x8C6F},{0x7D4E, 0xE34D},{0x7D4F, 0xE351},{0x7D50, 0x8C8B},{0x7D56, 0xE34C},{0x7D5B, 0xE355},{0x7D5C, 0xEE6E},{0x7D5E, 0x8D69},
- {0x7D61, 0x978D},{0x7D62, 0x88BA},{0x7D63, 0xE352},{0x7D66, 0x8B8B},{0x7D68, 0xE34F},{0x7D6E, 0xE350},{0x7D71, 0x939D},{0x7D72, 0xE34E},
- {0x7D73, 0xE34B},{0x7D75, 0x8A47},{0x7D76, 0x90E2},{0x7D79, 0x8CA6},{0x7D7D, 0xE357},{0x7D89, 0xE354},{0x7D8F, 0xE356},{0x7D93, 0xE353},
- {0x7D99, 0x8C70},{0x7D9A, 0x91B1},{0x7D9B, 0xE358},{0x7D9C, 0x918E},{0x7D9F, 0xE365},{0x7DA0, 0xEE70},{0x7DA2, 0xE361},{0x7DA3, 0xE35B},
- {0x7DAB, 0xE35F},{0x7DAC, 0x8EF8},{0x7DAD, 0x88DB},{0x7DAE, 0xE35A},{0x7DAF, 0xE362},{0x7DB0, 0xE366},{0x7DB1, 0x8D6A},{0x7DB2, 0x96D4},
- {0x7DB4, 0x92D4},{0x7DB5, 0xE35C},{0x7DB7, 0xEE6F},{0x7DB8, 0xE364},{0x7DBA, 0xE359},{0x7DBB, 0x925D},{0x7DBD, 0xE35E},{0x7DBE, 0x88BB},
- {0x7DBF, 0x96C8},{0x7DC7, 0xE35D},{0x7DCA, 0x8BD9},{0x7DCB, 0x94EA},{0x7DCF, 0x918D},{0x7DD1, 0x97CE},{0x7DD2, 0x8F8F},{0x7DD5, 0xE38E},
- {0x7DD6, 0xEE71},{0x7DD8, 0xE367},{0x7DDA, 0x90FC},{0x7DDC, 0xE363},{0x7DDD, 0xE368},{0x7DDE, 0xE36A},{0x7DE0, 0x92F7},{0x7DE1, 0xE36D},
- {0x7DE4, 0xE369},{0x7DE8, 0x95D2},{0x7DE9, 0x8AC9},{0x7DEC, 0x96C9},{0x7DEF, 0x88DC},{0x7DF2, 0xE36C},{0x7DF4, 0x97FB},{0x7DFB, 0xE36B},
- {0x7E01, 0x898F},{0x7E04, 0x93EA},{0x7E05, 0xE36E},{0x7E09, 0xE375},{0x7E0A, 0xE36F},{0x7E0B, 0xE376},{0x7E12, 0xE372},{0x7E1B, 0x949B},
- {0x7E1E, 0x8EC8},{0x7E1F, 0xE374},{0x7E21, 0xE371},{0x7E22, 0xE377},{0x7E23, 0xE370},{0x7E26, 0x8F63},{0x7E2B, 0x9644},{0x7E2E, 0x8F6B},
- {0x7E31, 0xE373},{0x7E32, 0xE380},{0x7E35, 0xE37B},{0x7E37, 0xE37E},{0x7E39, 0xE37C},{0x7E3A, 0xE381},{0x7E3B, 0xE37A},{0x7E3D, 0xE360},
- {0x7E3E, 0x90D1},{0x7E41, 0x94C9},{0x7E43, 0xE37D},{0x7E46, 0xE378},{0x7E4A, 0x9140},{0x7E4B, 0x8C71},{0x7E4D, 0x8F4A},{0x7E52, 0xEE72},
- {0x7E54, 0x9044},{0x7E55, 0x9155},{0x7E56, 0xE384},{0x7E59, 0xE386},{0x7E5A, 0xE387},{0x7E5D, 0xE383},{0x7E5E, 0xE385},{0x7E66, 0xE379},
- {0x7E67, 0xE382},{0x7E69, 0xE38A},{0x7E6A, 0xE389},{0x7E6D, 0x969A},{0x7E70, 0x8C4A},{0x7E79, 0xE388},{0x7E7B, 0xE38C},{0x7E7C, 0xE38B},
- {0x7E7D, 0xE38F},{0x7E7F, 0xE391},{0x7E82, 0x8E5B},{0x7E83, 0xE38D},{0x7E88, 0xE392},{0x7E89, 0xE393},{0x7E8A, 0xED40},{0x7E8C, 0xE394},
- {0x7E8E, 0xE39A},{0x7E8F, 0x935A},{0x7E90, 0xE396},{0x7E92, 0xE395},{0x7E93, 0xE397},{0x7E94, 0xE398},{0x7E96, 0xE399},{0x7E9B, 0xE39B},
- {0x7E9C, 0xE39C},{0x7F36, 0x8ACA},{0x7F38, 0xE39D},{0x7F3A, 0xE39E},{0x7F45, 0xE39F},{0x7F47, 0xEE73},{0x7F4C, 0xE3A0},{0x7F4D, 0xE3A1},
- {0x7F4E, 0xE3A2},{0x7F50, 0xE3A3},{0x7F51, 0xE3A4},{0x7F54, 0xE3A6},{0x7F55, 0xE3A5},{0x7F58, 0xE3A7},{0x7F5F, 0xE3A8},{0x7F60, 0xE3A9},
- {0x7F67, 0xE3AC},{0x7F68, 0xE3AA},{0x7F69, 0xE3AB},{0x7F6A, 0x8DDF},{0x7F6B, 0x8C72},{0x7F6E, 0x9275},{0x7F70, 0x94B1},{0x7F72, 0x8F90},
- {0x7F75, 0x946C},{0x7F77, 0x94EB},{0x7F78, 0xE3AD},{0x7F79, 0x9CEB},{0x7F82, 0xE3AE},{0x7F83, 0xE3B0},{0x7F85, 0x9785},{0x7F86, 0xE3AF},
- {0x7F87, 0xE3B2},{0x7F88, 0xE3B1},{0x7F8A, 0x9772},{0x7F8C, 0xE3B3},{0x7F8E, 0x94FC},{0x7F94, 0xE3B4},{0x7F9A, 0xE3B7},{0x7F9D, 0xE3B6},
- {0x7F9E, 0xE3B5},{0x7FA1, 0xEE74},{0x7FA3, 0xE3B8},{0x7FA4, 0x8C51},{0x7FA8, 0x9141},{0x7FA9, 0x8B60},{0x7FAE, 0xE3BC},{0x7FAF, 0xE3B9},
- {0x7FB2, 0xE3BA},{0x7FB6, 0xE3BD},{0x7FB8, 0xE3BE},{0x7FB9, 0xE3BB},{0x7FBD, 0x8948},{0x7FC1, 0x89A5},{0x7FC5, 0xE3C0},{0x7FC6, 0xE3C1},
- {0x7FCA, 0xE3C2},{0x7FCC, 0x9782},{0x7FD2, 0x8F4B},{0x7FD4, 0xE3C4},{0x7FD5, 0xE3C3},{0x7FE0, 0x9089},{0x7FE1, 0xE3C5},{0x7FE6, 0xE3C6},
- {0x7FE9, 0xE3C7},{0x7FEB, 0x8AE3},{0x7FF0, 0x8ACB},{0x7FF3, 0xE3C8},{0x7FF9, 0xE3C9},{0x7FFB, 0x967C},{0x7FFC, 0x9783},{0x8000, 0x9773},
- {0x8001, 0x9856},{0x8003, 0x8D6C},{0x8004, 0xE3CC},{0x8005, 0x8ED2},{0x8006, 0xE3CB},{0x800B, 0xE3CD},{0x800C, 0x8EA7},{0x8010, 0x91CF},
- {0x8012, 0xE3CE},{0x8015, 0x8D6B},{0x8017, 0x96D5},{0x8018, 0xE3CF},{0x8019, 0xE3D0},{0x801C, 0xE3D1},{0x8021, 0xE3D2},{0x8028, 0xE3D3},
- {0x8033, 0x8EA8},{0x8036, 0x96EB},{0x803B, 0xE3D5},{0x803D, 0x925E},{0x803F, 0xE3D4},{0x8046, 0xE3D7},{0x804A, 0xE3D6},{0x8052, 0xE3D8},
- {0x8056, 0x90B9},{0x8058, 0xE3D9},{0x805A, 0xE3DA},{0x805E, 0x95B7},{0x805F, 0xE3DB},{0x8061, 0x918F},{0x8062, 0xE3DC},{0x8068, 0xE3DD},
- {0x806F, 0x97FC},{0x8070, 0xE3E0},{0x8072, 0xE3DF},{0x8073, 0xE3DE},{0x8074, 0x92AE},{0x8076, 0xE3E1},{0x8077, 0x9045},{0x8079, 0xE3E2},
- {0x807D, 0xE3E3},{0x807E, 0x9857},{0x807F, 0xE3E4},{0x8084, 0xE3E5},{0x8085, 0xE3E7},{0x8086, 0xE3E6},{0x8087, 0x94A3},{0x8089, 0x93F7},
- {0x808B, 0x985D},{0x808C, 0x94A7},{0x8093, 0xE3E9},{0x8096, 0x8FD1},{0x8098, 0x9549},{0x809A, 0xE3EA},{0x809B, 0xE3E8},{0x809D, 0x8ACC},
- {0x80A1, 0x8CD2},{0x80A2, 0x8E88},{0x80A5, 0x94EC},{0x80A9, 0x8CA8},{0x80AA, 0x9662},{0x80AC, 0xE3ED},{0x80AD, 0xE3EB},{0x80AF, 0x8D6D},
- {0x80B1, 0x8D6E},{0x80B2, 0x88E7},{0x80B4, 0x8DE6},{0x80BA, 0x9478},{0x80C3, 0x88DD},{0x80C4, 0xE3F2},{0x80C6, 0x925F},{0x80CC, 0x9477},
- {0x80CE, 0x91D9},{0x80D6, 0xE3F4},{0x80D9, 0xE3F0},{0x80DA, 0xE3F3},{0x80DB, 0xE3EE},{0x80DD, 0xE3F1},{0x80DE, 0x9645},{0x80E1, 0x8CD3},
- {0x80E4, 0x88FB},{0x80E5, 0xE3EF},{0x80EF, 0xE3F6},{0x80F1, 0xE3F7},{0x80F4, 0x93B7},{0x80F8, 0x8BB9},{0x80FC, 0xE445},{0x80FD, 0x945C},
- {0x8102, 0x8E89},{0x8105, 0x8BBA},{0x8106, 0x90C6},{0x8107, 0x9865},{0x8108, 0x96AC},{0x8109, 0xE3F5},{0x810A, 0x90D2},{0x811A, 0x8B72},
- {0x811B, 0xE3F8},{0x8123, 0xE3FA},{0x8129, 0xE3F9},{0x812F, 0xE3FB},{0x8131, 0x9245},{0x8133, 0x945D},{0x8139, 0x92AF},{0x813E, 0xE442},
- {0x8146, 0xE441},{0x814B, 0xE3FC},{0x814E, 0x9074},{0x8150, 0x9585},{0x8151, 0xE444},{0x8153, 0xE443},{0x8154, 0x8D6F},{0x8155, 0x9872},
- {0x815F, 0xE454},{0x8165, 0xE448},{0x8166, 0xE449},{0x816B, 0x8EEE},{0x816E, 0xE447},{0x8170, 0x8D98},{0x8171, 0xE446},{0x8174, 0xE44A},
- {0x8178, 0x92B0},{0x8179, 0x95A0},{0x817A, 0x9142},{0x817F, 0x91DA},{0x8180, 0xE44E},{0x8182, 0xE44F},{0x8183, 0xE44B},{0x8188, 0xE44C},
- {0x818A, 0xE44D},{0x818F, 0x8D70},{0x8193, 0xE455},{0x8195, 0xE451},{0x819A, 0x9586},{0x819C, 0x968C},{0x819D, 0x9547},{0x81A0, 0xE450},
- {0x81A3, 0xE453},{0x81A4, 0xE452},{0x81A8, 0x9663},{0x81A9, 0xE456},{0x81B0, 0xE457},{0x81B3, 0x9156},{0x81B5, 0xE458},{0x81B8, 0xE45A},
- {0x81BA, 0xE45E},{0x81BD, 0xE45B},{0x81BE, 0xE459},{0x81BF, 0x945E},{0x81C0, 0xE45C},{0x81C2, 0xE45D},{0x81C6, 0x89B0},{0x81C8, 0xE464},
- {0x81C9, 0xE45F},{0x81CD, 0xE460},{0x81D1, 0xE461},{0x81D3, 0x919F},{0x81D8, 0xE463},{0x81D9, 0xE462},{0x81DA, 0xE465},{0x81DF, 0xE466},
- {0x81E0, 0xE467},{0x81E3, 0x9062},{0x81E5, 0x89E7},{0x81E7, 0xE468},{0x81E8, 0x97D5},{0x81EA, 0x8EA9},{0x81ED, 0x8F4C},{0x81F3, 0x8E8A},
- {0x81F4, 0x9276},{0x81FA, 0xE469},{0x81FB, 0xE46A},{0x81FC, 0x8950},{0x81FE, 0xE46B},{0x8201, 0xE46C},{0x8202, 0xE46D},{0x8205, 0xE46E},
- {0x8207, 0xE46F},{0x8208, 0x8BBB},{0x8209, 0x9DA8},{0x820A, 0xE470},{0x820C, 0x90E3},{0x820D, 0xE471},{0x820E, 0x8EC9},{0x8210, 0xE472},
- {0x8212, 0x98AE},{0x8216, 0xE473},{0x8217, 0x95DC},{0x8218, 0x8ADA},{0x821B, 0x9143},{0x821C, 0x8F77},{0x821E, 0x9591},{0x821F, 0x8F4D},
- {0x8229, 0xE474},{0x822A, 0x8D71},{0x822B, 0xE475},{0x822C, 0x94CA},{0x822E, 0xE484},{0x8233, 0xE477},{0x8235, 0x91C7},{0x8236, 0x9495},
- {0x8237, 0x8CBD},{0x8238, 0xE476},{0x8239, 0x9144},{0x8240, 0xE478},{0x8247, 0x92F8},{0x8258, 0xE47A},{0x8259, 0xE479},{0x825A, 0xE47C},
- {0x825D, 0xE47B},{0x825F, 0xE47D},{0x8262, 0xE480},{0x8264, 0xE47E},{0x8266, 0x8ACD},{0x8268, 0xE481},{0x826A, 0xE482},{0x826B, 0xE483},
- {0x826E, 0x8DAF},{0x826F, 0x97C7},{0x8271, 0xE485},{0x8272, 0x9046},{0x8276, 0x8990},{0x8277, 0xE486},{0x8278, 0xE487},{0x827E, 0xE488},
- {0x828B, 0x88F0},{0x828D, 0xE489},{0x8292, 0xE48A},{0x8299, 0x9587},{0x829D, 0x8EC5},{0x829F, 0xE48C},{0x82A5, 0x8A48},{0x82A6, 0x88B0},
- {0x82AB, 0xE48B},{0x82AC, 0xE48E},{0x82AD, 0x946D},{0x82AF, 0x9063},{0x82B1, 0x89D4},{0x82B3, 0x9646},{0x82B8, 0x8C7C},{0x82B9, 0x8BDA},
- {0x82BB, 0xE48D},{0x82BD, 0x89E8},{0x82C5, 0x8AA1},{0x82D1, 0x8991},{0x82D2, 0xE492},{0x82D3, 0x97E8},{0x82D4, 0x91DB},{0x82D7, 0x9563},
- {0x82D9, 0xE49E},{0x82DB, 0x89D5},{0x82DC, 0xE49C},{0x82DE, 0xE49A},{0x82DF, 0xE491},{0x82E1, 0xE48F},{0x82E3, 0xE490},{0x82E5, 0x8EE1},
- {0x82E6, 0x8BEA},{0x82E7, 0x9297},{0x82EB, 0x93CF},{0x82F1, 0x8970},{0x82F3, 0xE494},{0x82F4, 0xE493},{0x82F9, 0xE499},{0x82FA, 0xE495},
- {0x82FB, 0xE498},{0x8301, 0xEE76},{0x8302, 0x96CE},{0x8303, 0xE497},{0x8304, 0x89D6},{0x8305, 0x8A9D},{0x8306, 0xE49B},{0x8309, 0xE49D},
- {0x830E, 0x8C73},{0x8316, 0xE4A1},{0x8317, 0xE4AA},{0x8318, 0xE4AB},{0x831C, 0x88A9},{0x8323, 0xE4B2},{0x8328, 0x88EF},{0x832B, 0xE4A9},
- {0x832F, 0xE4A8},{0x8331, 0xE4A3},{0x8332, 0xE4A2},{0x8334, 0xE4A0},{0x8335, 0xE49F},{0x8336, 0x9283},{0x8338, 0x91F9},{0x8339, 0xE4A5},
- {0x8340, 0xE4A4},{0x8345, 0xE4A7},{0x8349, 0x9190},{0x834A, 0x8C74},{0x834F, 0x8960},{0x8350, 0xE4A6},{0x8352, 0x8D72},{0x8358, 0x9191},
- {0x8362, 0xEE77},{0x8373, 0xE4B8},{0x8375, 0xE4B9},{0x8377, 0x89D7},{0x837B, 0x89AC},{0x837C, 0xE4B6},{0x837F, 0xEE78},{0x8385, 0xE4AC},
- {0x8387, 0xE4B4},{0x8389, 0xE4BB},{0x838A, 0xE4B5},{0x838E, 0xE4B3},{0x8393, 0xE496},{0x8396, 0xE4B1},{0x839A, 0xE4AD},{0x839E, 0x8ACE},
- {0x839F, 0xE4AF},{0x83A0, 0xE4BA},{0x83A2, 0xE4B0},{0x83A8, 0xE4BC},{0x83AA, 0xE4AE},{0x83AB, 0x949C},{0x83B1, 0x9789},{0x83B5, 0xE4B7},
- {0x83BD, 0xE4CD},{0x83C1, 0xE4C5},{0x83C5, 0x909B},{0x83C7, 0xEE79},{0x83CA, 0x8B65},{0x83CC, 0x8BDB},{0x83CE, 0xE4C0},{0x83D3, 0x89D9},
- {0x83D6, 0x8FD2},{0x83D8, 0xE4C3},{0x83DC, 0x8DD8},{0x83DF, 0x9370},{0x83E0, 0xE4C8},{0x83E9, 0x95EC},{0x83EB, 0xE4BF},{0x83EF, 0x89D8},
- {0x83F0, 0x8CD4},{0x83F1, 0x9548},{0x83F2, 0xE4C9},{0x83F4, 0xE4BD},{0x83F6, 0xEE7A},{0x83F7, 0xE4C6},{0x83FB, 0xE4D0},{0x83FD, 0xE4C1},
- {0x8403, 0xE4C2},{0x8404, 0x93B8},{0x8407, 0xE4C7},{0x840B, 0xE4C4},{0x840C, 0x9647},{0x840D, 0xE4CA},{0x840E, 0x88DE},{0x8413, 0xE4BE},
- {0x8420, 0xE4CC},{0x8422, 0xE4CB},{0x8429, 0x948B},{0x842A, 0xE4D2},{0x842C, 0xE4DD},{0x8431, 0x8A9E},{0x8435, 0xE4E0},{0x8438, 0xE4CE},
- {0x843C, 0xE4D3},{0x843D, 0x978E},{0x8446, 0xE4DC},{0x8448, 0xEE7B},{0x8449, 0x9774},{0x844E, 0x97A8},{0x8457, 0x9298},{0x845B, 0x8A8B},
- {0x8461, 0x9592},{0x8462, 0xE4E2},{0x8463, 0x939F},{0x8466, 0x88AF},{0x8469, 0xE4DB},{0x846B, 0xE4D7},{0x846C, 0x9192},{0x846D, 0xE4D1},
- {0x846E, 0xE4D9},{0x846F, 0xE4DE},{0x8471, 0x944B},{0x8475, 0x88A8},{0x8477, 0xE4D6},{0x8479, 0xE4DF},{0x847A, 0x9598},{0x8482, 0xE4DA},
- {0x8484, 0xE4D5},{0x848B, 0x8FD3},{0x8490, 0x8F4E},{0x8494, 0x8EAA},{0x8499, 0x96D6},{0x849C, 0x9566},{0x849F, 0xE4E5},{0x84A1, 0xE4EE},
- {0x84AD, 0xE4D8},{0x84B2, 0x8A97},{0x84B4, 0xEE7C},{0x84B8, 0x8FF6},{0x84B9, 0xE4E3},{0x84BB, 0xE4E8},{0x84BC, 0x9193},{0x84BF, 0xE4E4},
- {0x84C1, 0xE4EB},{0x84C4, 0x927E},{0x84C6, 0xE4EC},{0x84C9, 0x9775},{0x84CA, 0xE4E1},{0x84CB, 0x8A57},{0x84CD, 0xE4E7},{0x84D0, 0xE4EA},
- {0x84D1, 0x96AA},{0x84D6, 0xE4ED},{0x84D9, 0xE4E6},{0x84DA, 0xE4E9},{0x84DC, 0xED44},{0x84EC, 0x9648},{0x84EE, 0x9840},{0x84F4, 0xE4F1},
- {0x84FC, 0xE4F8},{0x84FF, 0xE4F0},{0x8500, 0x8EC1},{0x8506, 0xE4CF},{0x8511, 0x95CC},{0x8513, 0x96A0},{0x8514, 0xE4F7},{0x8515, 0xE4F6},
- {0x8517, 0xE4F2},{0x8518, 0xE4F3},{0x851A, 0x8955},{0x851F, 0xE4F5},{0x8521, 0xE4EF},{0x8526, 0x92D3},{0x852C, 0xE4F4},{0x852D, 0x88FC},
- {0x8535, 0x91A0},{0x853D, 0x95C1},{0x8540, 0xE4F9},{0x8541, 0xE540},{0x8543, 0x94D7},{0x8548, 0xE4FC},{0x8549, 0x8FD4},{0x854A, 0x8EC7},
- {0x854B, 0xE542},{0x854E, 0x8BBC},{0x8553, 0xEE7D},{0x8555, 0xE543},{0x8557, 0x9599},{0x8558, 0xE4FB},{0x8559, 0xEE7E},{0x855A, 0xE4D4},
- {0x8563, 0xE4FA},{0x8568, 0x986E},{0x8569, 0x93A0},{0x856A, 0x9593},{0x856B, 0xEE80},{0x856D, 0xE54A},{0x8577, 0xE550},{0x857E, 0xE551},
- {0x8580, 0xE544},{0x8584, 0x9496},{0x8587, 0xE54E},{0x8588, 0xE546},{0x858A, 0xE548},{0x8590, 0xE552},{0x8591, 0xE547},{0x8594, 0xE54B},
- {0x8597, 0x8992},{0x8599, 0x93E3},{0x859B, 0xE54C},{0x859C, 0xE54F},{0x85A4, 0xE545},{0x85A6, 0x9145},{0x85A8, 0xE549},{0x85A9, 0x8E46},
- {0x85AA, 0x9064},{0x85AB, 0x8C4F},{0x85AC, 0x96F2},{0x85AE, 0x96F7},{0x85AF, 0x8F92},{0x85B0, 0xEE82},{0x85B9, 0xE556},{0x85BA, 0xE554},
- {0x85C1, 0x986D},{0x85C9, 0xE553},{0x85CD, 0x9795},{0x85CF, 0xE555},{0x85D0, 0xE557},{0x85D5, 0xE558},{0x85DC, 0xE55B},{0x85DD, 0xE559},
- {0x85E4, 0x93A1},{0x85E5, 0xE55A},{0x85E9, 0x94CB},{0x85EA, 0xE54D},{0x85F7, 0x8F93},{0x85F9, 0xE55C},{0x85FA, 0xE561},{0x85FB, 0x9194},
- {0x85FE, 0xE560},{0x8602, 0xE541},{0x8606, 0xE562},{0x8607, 0x9168},{0x860A, 0xE55D},{0x860B, 0xE55F},{0x8613, 0xE55E},{0x8616, 0x9F50},
- {0x8617, 0x9F41},{0x861A, 0xE564},{0x8622, 0xE563},{0x862D, 0x9796},{0x862F, 0xE1BA},{0x8630, 0xE565},{0x863F, 0xE566},{0x864D, 0xE567},
- {0x864E, 0x8CD5},{0x8650, 0x8B73},{0x8654, 0xE569},{0x8655, 0x997C},{0x865A, 0x8B95},{0x865C, 0x97B8},{0x865E, 0x8BF1},{0x865F, 0xE56A},
- {0x8667, 0xE56B},{0x866B, 0x928E},{0x8671, 0xE56C},{0x8679, 0x93F8},{0x867B, 0x88B8},{0x868A, 0x89E1},{0x868B, 0xE571},{0x868C, 0xE572},
- {0x8693, 0xE56D},{0x8695, 0x8E5C},{0x86A3, 0xE56E},{0x86A4, 0x9461},{0x86A9, 0xE56F},{0x86AA, 0xE570},{0x86AB, 0xE57A},{0x86AF, 0xE574},
- {0x86B0, 0xE577},{0x86B6, 0xE573},{0x86C4, 0xE575},{0x86C6, 0xE576},{0x86C7, 0x8ED6},{0x86C9, 0xE578},{0x86CB, 0x9260},{0x86CD, 0x8C75},
- {0x86CE, 0x8A61},{0x86D4, 0xE57B},{0x86D9, 0x8A5E},{0x86DB, 0xE581},{0x86DE, 0xE57C},{0x86DF, 0xE580},{0x86E4, 0x94B8},{0x86E9, 0xE57D},
- {0x86EC, 0xE57E},{0x86ED, 0x9567},{0x86EE, 0x94D8},{0x86EF, 0xE582},{0x86F8, 0x91FB},{0x86F9, 0xE58C},{0x86FB, 0xE588},{0x86FE, 0x89E9},
- {0x8700, 0xE586},{0x8702, 0x9649},{0x8703, 0xE587},{0x8706, 0xE584},{0x8708, 0xE585},{0x8709, 0xE58A},{0x870A, 0xE58D},{0x870D, 0xE58B},
- {0x8711, 0xE589},{0x8712, 0xE583},{0x8718, 0x9277},{0x871A, 0xE594},{0x871C, 0x96A8},{0x8725, 0xE592},{0x8729, 0xE593},{0x8734, 0xE58E},
- {0x8737, 0xE590},{0x873B, 0xE591},{0x873F, 0xE58F},{0x8749, 0x90E4},{0x874B, 0x9858},{0x874C, 0xE598},{0x874E, 0xE599},{0x8753, 0xE59F},
- {0x8755, 0x9049},{0x8757, 0xE59B},{0x8759, 0xE59E},{0x875F, 0xE596},{0x8760, 0xE595},{0x8763, 0xE5A0},{0x8766, 0x89DA},{0x8768, 0xE59C},
- {0x876A, 0xE5A1},{0x876E, 0xE59D},{0x8774, 0xE59A},{0x8776, 0x92B1},{0x8778, 0xE597},{0x877F, 0x9488},{0x8782, 0xE5A5},{0x878D, 0x975A},
- {0x879F, 0xE5A4},{0x87A2, 0xE5A3},{0x87AB, 0xE5AC},{0x87AF, 0xE5A6},{0x87B3, 0xE5AE},{0x87BA, 0x9786},{0x87BB, 0xE5B1},{0x87BD, 0xE5A8},
- {0x87C0, 0xE5A9},{0x87C4, 0xE5AD},{0x87C6, 0xE5B0},{0x87C7, 0xE5AF},{0x87CB, 0xE5A7},{0x87D0, 0xE5AA},{0x87D2, 0xE5BB},{0x87E0, 0xE5B4},
- {0x87EF, 0xE5B2},{0x87F2, 0xE5B3},{0x87F6, 0xE5B8},{0x87F7, 0xE5B9},{0x87F9, 0x8A49},{0x87FB, 0x8B61},{0x87FE, 0xE5B7},{0x8805, 0xE5A2},
- {0x8807, 0xEE85},{0x880D, 0xE5B6},{0x880E, 0xE5BA},{0x880F, 0xE5B5},{0x8811, 0xE5BC},{0x8815, 0xE5BE},{0x8816, 0xE5BD},{0x8821, 0xE5C0},
- {0x8822, 0xE5BF},{0x8823, 0xE579},{0x8827, 0xE5C4},{0x8831, 0xE5C1},{0x8836, 0xE5C2},{0x8839, 0xE5C3},{0x883B, 0xE5C5},{0x8840, 0x8C8C},
- {0x8842, 0xE5C7},{0x8844, 0xE5C6},{0x8846, 0x8F4F},{0x884C, 0x8D73},{0x884D, 0x9FA5},{0x8852, 0xE5C8},{0x8853, 0x8F70},{0x8857, 0x8A58},
- {0x8859, 0xE5C9},{0x885B, 0x8971},{0x885D, 0x8FD5},{0x885E, 0xE5CA},{0x8861, 0x8D74},{0x8862, 0xE5CB},{0x8863, 0x88DF},{0x8868, 0x955C},
- {0x886B, 0xE5CC},{0x8870, 0x908A},{0x8872, 0xE5D3},{0x8875, 0xE5D0},{0x8877, 0x928F},{0x887D, 0xE5D1},{0x887E, 0xE5CE},{0x887F, 0x8BDC},
- {0x8881, 0xE5CD},{0x8882, 0xE5D4},{0x8888, 0x8C55},{0x888B, 0x91DC},{0x888D, 0xE5DA},{0x8892, 0xE5D6},{0x8896, 0x91B3},{0x8897, 0xE5D5},
- {0x8899, 0xE5D8},{0x889E, 0xE5CF},{0x88A2, 0xE5D9},{0x88A4, 0xE5DB},{0x88AB, 0x94ED},{0x88AE, 0xE5D7},{0x88B0, 0xE5DC},{0x88B1, 0xE5DE},
- {0x88B4, 0x8CD1},{0x88B5, 0xE5D2},{0x88B7, 0x88BF},{0x88BF, 0xE5DD},{0x88C1, 0x8DD9},{0x88C2, 0x97F4},{0x88C3, 0xE5DF},{0x88C4, 0xE5E0},
- {0x88C5, 0x9195},{0x88CF, 0x97A0},{0x88D4, 0xE5E1},{0x88D5, 0x9754},{0x88D8, 0xE5E2},{0x88D9, 0xE5E3},{0x88DC, 0x95E2},{0x88DD, 0xE5E4},
- {0x88DF, 0x8DBE},{0x88E1, 0x97A1},{0x88E8, 0xE5E9},{0x88F2, 0xE5EA},{0x88F3, 0x8FD6},{0x88F4, 0xE5E8},{0x88F5, 0xEE86},{0x88F8, 0x9787},
- {0x88F9, 0xE5E5},{0x88FC, 0xE5E7},{0x88FD, 0x90BB},{0x88FE, 0x909E},{0x8902, 0xE5E6},{0x8904, 0xE5EB},{0x8907, 0x95A1},{0x890A, 0xE5ED},
- {0x890C, 0xE5EC},{0x8910, 0x8A8C},{0x8912, 0x964A},{0x8913, 0xE5EE},{0x891C, 0xED41},{0x891D, 0xE5FA},{0x891E, 0xE5F0},{0x8925, 0xE5F1},
- {0x892A, 0xE5F2},{0x892B, 0xE5F3},{0x8936, 0xE5F7},{0x8938, 0xE5F8},{0x893B, 0xE5F6},{0x8941, 0xE5F4},{0x8943, 0xE5EF},{0x8944, 0xE5F5},
- {0x894C, 0xE5F9},{0x894D, 0xE8B5},{0x8956, 0x89A6},{0x895E, 0xE5FC},{0x895F, 0x8BDD},{0x8960, 0xE5FB},{0x8964, 0xE641},{0x8966, 0xE640},
- {0x896A, 0xE643},{0x896D, 0xE642},{0x896F, 0xE644},{0x8972, 0x8F50},{0x8974, 0xE645},{0x8977, 0xE646},{0x897E, 0xE647},{0x897F, 0x90BC},
- {0x8981, 0x9776},{0x8983, 0xE648},{0x8986, 0x95A2},{0x8987, 0x9465},{0x8988, 0xE649},{0x898A, 0xE64A},{0x898B, 0x8CA9},{0x898F, 0x8B4B},
- {0x8993, 0xE64B},{0x8996, 0x8E8B},{0x8997, 0x9460},{0x8998, 0xE64C},{0x899A, 0x8A6F},{0x89A1, 0xE64D},{0x89A6, 0xE64F},{0x89A7, 0x9797},
- {0x89A9, 0xE64E},{0x89AA, 0x9065},{0x89AC, 0xE650},{0x89AF, 0xE651},{0x89B2, 0xE652},{0x89B3, 0x8ACF},{0x89BA, 0xE653},{0x89BD, 0xE654},
- {0x89BF, 0xE655},{0x89C0, 0xE656},{0x89D2, 0x8A70},{0x89DA, 0xE657},{0x89DC, 0xE658},{0x89DD, 0xE659},{0x89E3, 0x89F0},{0x89E6, 0x9047},
- {0x89E7, 0xE65A},{0x89F4, 0xE65B},{0x89F8, 0xE65C},{0x8A00, 0x8CBE},{0x8A02, 0x92F9},{0x8A03, 0xE65D},{0x8A08, 0x8C76},{0x8A0A, 0x9075},
- {0x8A0C, 0xE660},{0x8A0E, 0x93A2},{0x8A10, 0xE65F},{0x8A12, 0xEE87},{0x8A13, 0x8C50},{0x8A16, 0xE65E},{0x8A17, 0x91F5},{0x8A18, 0x8B4C},
- {0x8A1B, 0xE661},{0x8A1D, 0xE662},{0x8A1F, 0x8FD7},{0x8A23, 0x8C8D},{0x8A25, 0xE663},{0x8A2A, 0x964B},{0x8A2D, 0x90DD},{0x8A31, 0x8B96},
- {0x8A33, 0x96F3},{0x8A34, 0x9169},{0x8A36, 0xE664},{0x8A37, 0xEE88},{0x8A3A, 0x9066},{0x8A3B, 0x9290},{0x8A3C, 0x8FD8},{0x8A41, 0xE665},
- {0x8A46, 0xE668},{0x8A48, 0xE669},{0x8A50, 0x8DBC},{0x8A51, 0x91C0},{0x8A52, 0xE667},{0x8A54, 0x8FD9},{0x8A55, 0x955D},{0x8A5B, 0xE666},
- {0x8A5E, 0x8E8C},{0x8A60, 0x8972},{0x8A62, 0xE66D},{0x8A63, 0x8C77},{0x8A66, 0x8E8E},{0x8A69, 0x8E8D},{0x8A6B, 0x986C},{0x8A6C, 0xE66C},
- {0x8A6D, 0xE66B},{0x8A6E, 0x9146},{0x8A70, 0x8B6C},{0x8A71, 0x9862},{0x8A72, 0x8A59},{0x8A73, 0x8FDA},{0x8A79, 0xEE89},{0x8A7C, 0xE66A},
- {0x8A82, 0xE66F},{0x8A84, 0xE670},{0x8A85, 0xE66E},{0x8A87, 0x8CD6},{0x8A89, 0x975F},{0x8A8C, 0x8E8F},{0x8A8D, 0x9446},{0x8A91, 0xE673},
- {0x8A93, 0x90BE},{0x8A95, 0x9261},{0x8A98, 0x9755},{0x8A9A, 0xE676},{0x8A9E, 0x8CEA},{0x8AA0, 0x90BD},{0x8AA1, 0xE672},{0x8AA3, 0xE677},
- {0x8AA4, 0x8CEB},{0x8AA5, 0xE674},{0x8AA6, 0xE675},{0x8AA7, 0xEE8A},{0x8AA8, 0xE671},{0x8AAC, 0x90E0},{0x8AAD, 0x93C7},{0x8AB0, 0x924E},
- {0x8AB2, 0x89DB},{0x8AB9, 0x94EE},{0x8ABC, 0x8B62},{0x8ABE, 0xEE8B},{0x8ABF, 0x92B2},{0x8AC2, 0xE67A},{0x8AC4, 0xE678},{0x8AC7, 0x926B},
- {0x8ACB, 0x90BF},{0x8ACC, 0x8AD0},{0x8ACD, 0xE679},{0x8ACF, 0x907A},{0x8AD2, 0x97C8},{0x8AD6, 0x985F},{0x8ADA, 0xE67B},{0x8ADB, 0xE687},
- {0x8ADC, 0x92B3},{0x8ADE, 0xE686},{0x8ADF, 0xEE8C},{0x8AE0, 0xE683},{0x8AE1, 0xE68B},{0x8AE2, 0xE684},{0x8AE4, 0xE680},{0x8AE6, 0x92FA},
- {0x8AE7, 0xE67E},{0x8AEB, 0xE67C},{0x8AED, 0x9740},{0x8AEE, 0x8E90},{0x8AF1, 0xE681},{0x8AF3, 0xE67D},{0x8AF6, 0xEE8E},{0x8AF7, 0xE685},
- {0x8AF8, 0x8F94},{0x8AFA, 0x8CBF},{0x8AFE, 0x91F8},{0x8B00, 0x9664},{0x8B01, 0x8979},{0x8B02, 0x88E0},{0x8B04, 0x93A3},{0x8B07, 0xE689},
- {0x8B0C, 0xE688},{0x8B0E, 0x93E4},{0x8B10, 0xE68D},{0x8B14, 0xE682},{0x8B16, 0xE68C},{0x8B17, 0xE68E},{0x8B19, 0x8CAA},{0x8B1A, 0xE68A},
- {0x8B1B, 0x8D75},{0x8B1D, 0x8ED3},{0x8B20, 0xE68F},{0x8B21, 0x9777},{0x8B26, 0xE692},{0x8B28, 0xE695},{0x8B2B, 0xE693},{0x8B2C, 0x9554},
- {0x8B33, 0xE690},{0x8B39, 0x8BDE},{0x8B3E, 0xE694},{0x8B41, 0xE696},{0x8B49, 0xE69A},{0x8B4C, 0xE697},{0x8B4E, 0xE699},{0x8B4F, 0xE698},
- {0x8B53, 0xEE8F},{0x8B56, 0xE69B},{0x8B58, 0x8EAF},{0x8B5A, 0xE69D},{0x8B5B, 0xE69C},{0x8B5C, 0x9588},{0x8B5F, 0xE69F},{0x8B66, 0x8C78},
- {0x8B6B, 0xE69E},{0x8B6C, 0xE6A0},{0x8B6F, 0xE6A1},{0x8B70, 0x8B63},{0x8B71, 0xE3BF},{0x8B72, 0x8FF7},{0x8B74, 0xE6A2},{0x8B77, 0x8CEC},
- {0x8B7D, 0xE6A3},{0x8B7F, 0xEE90},{0x8B80, 0xE6A4},{0x8B83, 0x8E5D},{0x8B8A, 0x9DCC},{0x8B8C, 0xE6A5},{0x8B8E, 0xE6A6},{0x8B90, 0x8F51},
- {0x8B92, 0xE6A7},{0x8B93, 0xE6A8},{0x8B96, 0xE6A9},{0x8B99, 0xE6AA},{0x8B9A, 0xE6AB},{0x8C37, 0x924A},{0x8C3A, 0xE6AC},{0x8C3F, 0xE6AE},
- {0x8C41, 0xE6AD},{0x8C46, 0x93A4},{0x8C48, 0xE6AF},{0x8C4A, 0x964C},{0x8C4C, 0xE6B0},{0x8C4E, 0xE6B1},{0x8C50, 0xE6B2},{0x8C55, 0xE6B3},
- {0x8C5A, 0x93D8},{0x8C61, 0x8FDB},{0x8C62, 0xE6B4},{0x8C6A, 0x8D8B},{0x8C6B, 0x98AC},{0x8C6C, 0xE6B5},{0x8C78, 0xE6B6},{0x8C79, 0x955E},
- {0x8C7A, 0xE6B7},{0x8C7C, 0xE6BF},{0x8C82, 0xE6B8},{0x8C85, 0xE6BA},{0x8C89, 0xE6B9},{0x8C8A, 0xE6BB},{0x8C8C, 0x9665},{0x8C8D, 0xE6BC},
- {0x8C8E, 0xE6BD},{0x8C94, 0xE6BE},{0x8C98, 0xE6C0},{0x8C9D, 0x8A4C},{0x8C9E, 0x92E5},{0x8CA0, 0x9589},{0x8CA1, 0x8DE0},{0x8CA2, 0x8D76},
- {0x8CA7, 0x956E},{0x8CA8, 0x89DD},{0x8CA9, 0x94CC},{0x8CAA, 0xE6C3},{0x8CAB, 0x8AD1},{0x8CAC, 0x90D3},{0x8CAD, 0xE6C2},{0x8CAE, 0xE6C7},
- {0x8CAF, 0x9299},{0x8CB0, 0x96E1},{0x8CB2, 0xE6C5},{0x8CB3, 0xE6C6},{0x8CB4, 0x8B4D},{0x8CB6, 0xE6C8},{0x8CB7, 0x9483},{0x8CB8, 0x91DD},
- {0x8CBB, 0x94EF},{0x8CBC, 0x935C},{0x8CBD, 0xE6C4},{0x8CBF, 0x9666},{0x8CC0, 0x89EA},{0x8CC1, 0xE6CA},{0x8CC2, 0x9847},{0x8CC3, 0x92C0},
- {0x8CC4, 0x9864},{0x8CC7, 0x8E91},{0x8CC8, 0xE6C9},{0x8CCA, 0x91AF},{0x8CCD, 0xE6DA},{0x8CCE, 0x9147},{0x8CD1, 0x93F6},{0x8CD3, 0x956F},
- {0x8CDA, 0xE6CD},{0x8CDB, 0x8E5E},{0x8CDC, 0x8E92},{0x8CDE, 0x8FDC},{0x8CE0, 0x9485},{0x8CE2, 0x8CAB},{0x8CE3, 0xE6CC},{0x8CE4, 0xE6CB},
- {0x8CE6, 0x958A},{0x8CEA, 0x8EBF},{0x8CED, 0x9371},{0x8CF0, 0xEE91},{0x8CF4, 0xEE92},{0x8CFA, 0xE6CF},{0x8CFB, 0xE6D0},{0x8CFC, 0x8D77},
- {0x8CFD, 0xE6CE},{0x8D04, 0xE6D1},{0x8D05, 0xE6D2},{0x8D07, 0xE6D4},{0x8D08, 0x91A1},{0x8D0A, 0xE6D3},{0x8D0B, 0x8AE4},{0x8D0D, 0xE6D6},
- {0x8D0F, 0xE6D5},{0x8D10, 0xE6D7},{0x8D12, 0xEE93},{0x8D13, 0xE6D9},{0x8D14, 0xE6DB},{0x8D16, 0xE6DC},{0x8D64, 0x90D4},{0x8D66, 0x8ECD},
- {0x8D67, 0xE6DD},{0x8D6B, 0x8A71},{0x8D6D, 0xE6DE},{0x8D70, 0x9196},{0x8D71, 0xE6DF},{0x8D73, 0xE6E0},{0x8D74, 0x958B},{0x8D76, 0xEE94},
- {0x8D77, 0x8B4E},{0x8D81, 0xE6E1},{0x8D85, 0x92B4},{0x8D8A, 0x897A},{0x8D99, 0xE6E2},{0x8DA3, 0x8EEF},{0x8DA8, 0x9096},{0x8DB3, 0x91AB},
- {0x8DBA, 0xE6E5},{0x8DBE, 0xE6E4},{0x8DC2, 0xE6E3},{0x8DCB, 0xE6EB},{0x8DCC, 0xE6E9},{0x8DCF, 0xE6E6},{0x8DD6, 0xE6E8},{0x8DDA, 0xE6E7},
- {0x8DDB, 0xE6EA},{0x8DDD, 0x8B97},{0x8DDF, 0xE6EE},{0x8DE1, 0x90D5},{0x8DE3, 0xE6EF},{0x8DE8, 0x8CD7},{0x8DEA, 0xE6EC},{0x8DEB, 0xE6ED},
- {0x8DEF, 0x9848},{0x8DF3, 0x92B5},{0x8DF5, 0x9148},{0x8DFC, 0xE6F0},{0x8DFF, 0xE6F3},{0x8E08, 0xE6F1},{0x8E09, 0xE6F2},{0x8E0A, 0x9778},
- {0x8E0F, 0x93A5},{0x8E10, 0xE6F6},{0x8E1D, 0xE6F4},{0x8E1E, 0xE6F5},{0x8E1F, 0xE6F7},{0x8E2A, 0xE748},{0x8E30, 0xE6FA},{0x8E34, 0xE6FB},
- {0x8E35, 0xE6F9},{0x8E42, 0xE6F8},{0x8E44, 0x92FB},{0x8E47, 0xE740},{0x8E48, 0xE744},{0x8E49, 0xE741},{0x8E4A, 0xE6FC},{0x8E4C, 0xE742},
- {0x8E50, 0xE743},{0x8E55, 0xE74A},{0x8E59, 0xE745},{0x8E5F, 0x90D6},{0x8E60, 0xE747},{0x8E63, 0xE749},{0x8E64, 0xE746},{0x8E72, 0xE74C},
- {0x8E74, 0x8F52},{0x8E76, 0xE74B},{0x8E7C, 0xE74D},{0x8E81, 0xE74E},{0x8E84, 0xE751},{0x8E85, 0xE750},{0x8E87, 0xE74F},{0x8E8A, 0xE753},
- {0x8E8B, 0xE752},{0x8E8D, 0x96F4},{0x8E91, 0xE755},{0x8E93, 0xE754},{0x8E94, 0xE756},{0x8E99, 0xE757},{0x8EA1, 0xE759},{0x8EAA, 0xE758},
- {0x8EAB, 0x9067},{0x8EAC, 0xE75A},{0x8EAF, 0x8BEB},{0x8EB0, 0xE75B},{0x8EB1, 0xE75D},{0x8EBE, 0xE75E},{0x8EC5, 0xE75F},{0x8EC6, 0xE75C},
- {0x8EC8, 0xE760},{0x8ECA, 0x8ED4},{0x8ECB, 0xE761},{0x8ECC, 0x8B4F},{0x8ECD, 0x8C52},{0x8ECF, 0xEE96},{0x8ED2, 0x8CAC},{0x8EDB, 0xE762},
- {0x8EDF, 0x93EE},{0x8EE2, 0x935D},{0x8EE3, 0xE763},{0x8EEB, 0xE766},{0x8EF8, 0x8EB2},{0x8EFB, 0xE765},{0x8EFC, 0xE764},{0x8EFD, 0x8C79},
- {0x8EFE, 0xE767},{0x8F03, 0x8A72},{0x8F05, 0xE769},{0x8F09, 0x8DDA},{0x8F0A, 0xE768},{0x8F0C, 0xE771},{0x8F12, 0xE76B},{0x8F13, 0xE76D},
- {0x8F14, 0x95E3},{0x8F15, 0xE76A},{0x8F19, 0xE76C},{0x8F1B, 0xE770},{0x8F1C, 0xE76E},{0x8F1D, 0x8B50},{0x8F1F, 0xE76F},{0x8F26, 0xE772},
- {0x8F29, 0x9479},{0x8F2A, 0x97D6},{0x8F2F, 0x8F53},{0x8F33, 0xE773},{0x8F38, 0x9741},{0x8F39, 0xE775},{0x8F3B, 0xE774},{0x8F3E, 0xE778},
- {0x8F3F, 0x9760},{0x8F42, 0xE777},{0x8F44, 0x8A8D},{0x8F45, 0xE776},{0x8F46, 0xE77B},{0x8F49, 0xE77A},{0x8F4C, 0xE779},{0x8F4D, 0x9351},
- {0x8F4E, 0xE77C},{0x8F57, 0xE77D},{0x8F5C, 0xE77E},{0x8F5F, 0x8D8C},{0x8F61, 0x8C44},{0x8F62, 0xE780},{0x8F63, 0xE781},{0x8F64, 0xE782},
- {0x8F9B, 0x9068},{0x8F9C, 0xE783},{0x8F9E, 0x8EAB},{0x8F9F, 0xE784},{0x8FA3, 0xE785},{0x8FA7, 0x999F},{0x8FA8, 0x999E},{0x8FAD, 0xE786},
- {0x8FAE, 0xE390},{0x8FAF, 0xE787},{0x8FB0, 0x9243},{0x8FB1, 0x904A},{0x8FB2, 0x945F},{0x8FB7, 0xE788},{0x8FBA, 0x95D3},{0x8FBB, 0x92D2},
- {0x8FBC, 0x8D9E},{0x8FBF, 0x9248},{0x8FC2, 0x8949},{0x8FC4, 0x9698},{0x8FC5, 0x9076},{0x8FCE, 0x8C7D},{0x8FD1, 0x8BDF},{0x8FD4, 0x95D4},
- {0x8FDA, 0xE789},{0x8FE2, 0xE78B},{0x8FE5, 0xE78A},{0x8FE6, 0x89DE},{0x8FE9, 0x93F4},{0x8FEA, 0xE78C},{0x8FEB, 0x9497},{0x8FED, 0x9352},
- {0x8FEF, 0xE78D},{0x8FF0, 0x8F71},{0x8FF4, 0xE78F},{0x8FF7, 0x96C0},{0x8FF8, 0xE79E},{0x8FF9, 0xE791},{0x8FFA, 0xE792},{0x8FFD, 0x92C7},
- {0x9000, 0x91DE},{0x9001, 0x9197},{0x9003, 0x93A6},{0x9005, 0xE790},{0x9006, 0x8B74},{0x900B, 0xE799},{0x900D, 0xE796},{0x900E, 0xE7A3},
- {0x900F, 0x93A7},{0x9010, 0x9280},{0x9011, 0xE793},{0x9013, 0x92FC},{0x9014, 0x9372},{0x9015, 0xE794},{0x9016, 0xE798},{0x9017, 0x9080},
- {0x9019, 0x9487},{0x901A, 0x92CA},{0x901D, 0x90C0},{0x901E, 0xE797},{0x901F, 0x91AC},{0x9020, 0x91A2},{0x9021, 0xE795},{0x9022, 0x88A7},
- {0x9023, 0x9841},{0x9027, 0xE79A},{0x902E, 0x91DF},{0x9031, 0x8F54},{0x9032, 0x9069},{0x9035, 0xE79C},{0x9036, 0xE79B},{0x9038, 0x88ED},
- {0x9039, 0xE79D},{0x903C, 0x954E},{0x903E, 0xE7A5},{0x9041, 0x93D9},{0x9042, 0x908B},{0x9045, 0x9278},{0x9047, 0x8BF6},{0x9049, 0xE7A4},
- {0x904A, 0x9756},{0x904B, 0x895E},{0x904D, 0x95D5},{0x904E, 0x89DF},{0x904F, 0xE79F},{0x9050, 0xE7A0},{0x9051, 0xE7A1},{0x9052, 0xE7A2},
- {0x9053, 0x93B9},{0x9054, 0x9242},{0x9055, 0x88E1},{0x9056, 0xE7A6},{0x9058, 0xE7A7},{0x9059, 0xEAA1},{0x905C, 0x91BB},{0x905E, 0xE7A8},
- {0x9060, 0x8993},{0x9061, 0x916B},{0x9063, 0x8CAD},{0x9065, 0x9779},{0x9067, 0xEE99},{0x9068, 0xE7A9},{0x9069, 0x934B},{0x906D, 0x9198},
- {0x906E, 0x8ED5},{0x906F, 0xE7AA},{0x9072, 0xE7AD},{0x9075, 0x8F85},{0x9076, 0xE7AB},{0x9077, 0x914A},{0x9078, 0x9149},{0x907A, 0x88E2},
- {0x907C, 0x97C9},{0x907D, 0xE7AF},{0x907F, 0x94F0},{0x9080, 0xE7B1},{0x9081, 0xE7B0},{0x9082, 0xE7AE},{0x9083, 0xE284},{0x9084, 0x8AD2},
- {0x9087, 0xE78E},{0x9089, 0xE7B3},{0x908A, 0xE7B2},{0x908F, 0xE7B4},{0x9091, 0x9757},{0x90A3, 0x93DF},{0x90A6, 0x964D},{0x90A8, 0xE7B5},
- {0x90AA, 0x8ED7},{0x90AF, 0xE7B6},{0x90B1, 0xE7B7},{0x90B5, 0xE7B8},{0x90B8, 0x9340},{0x90C1, 0x88E8},{0x90CA, 0x8D78},{0x90CE, 0x9859},
- {0x90DB, 0xE7BC},{0x90DE, 0xEE9A},{0x90E1, 0x8C53},{0x90E2, 0xE7B9},{0x90E4, 0xE7BA},{0x90E8, 0x9594},{0x90ED, 0x8A73},{0x90F5, 0x9758},
- {0x90F7, 0x8BBD},{0x90FD, 0x9373},{0x9102, 0xE7BD},{0x9112, 0xE7BE},{0x9115, 0xEE9C},{0x9119, 0xE7BF},{0x9127, 0xEE9D},{0x912D, 0x9341},
- {0x9130, 0xE7C1},{0x9132, 0xE7C0},{0x9149, 0x93D1},{0x914A, 0xE7C2},{0x914B, 0x8F55},{0x914C, 0x8EDE},{0x914D, 0x947A},{0x914E, 0x9291},
- {0x9152, 0x8EF0},{0x9154, 0x908C},{0x9156, 0xE7C3},{0x9158, 0xE7C4},{0x9162, 0x907C},{0x9163, 0xE7C5},{0x9165, 0xE7C6},{0x9169, 0xE7C7},
- {0x916A, 0x978F},{0x916C, 0x8F56},{0x9172, 0xE7C9},{0x9173, 0xE7C8},{0x9175, 0x8D79},{0x9177, 0x8D93},{0x9178, 0x8E5F},{0x9182, 0xE7CC},
- {0x9187, 0x8F86},{0x9189, 0xE7CB},{0x918B, 0xE7CA},{0x918D, 0x91E7},{0x9190, 0x8CED},{0x9192, 0x90C1},{0x9197, 0x94AE},{0x919C, 0x8F58},
- {0x91A2, 0xE7CD},{0x91A4, 0x8FDD},{0x91AA, 0xE7D0},{0x91AB, 0xE7CE},{0x91AF, 0xE7CF},{0x91B4, 0xE7D2},{0x91B5, 0xE7D1},{0x91B8, 0x8FF8},
- {0x91BA, 0xE7D3},{0x91C0, 0xE7D4},{0x91C1, 0xE7D5},{0x91C6, 0x94CE},{0x91C7, 0x8DD1},{0x91C8, 0x8EDF},{0x91C9, 0xE7D6},{0x91CB, 0xE7D7},
- {0x91CC, 0x97A2},{0x91CD, 0x8F64},{0x91CE, 0x96EC},{0x91CF, 0x97CA},{0x91D0, 0xE7D8},{0x91D1, 0x8BE0},{0x91D6, 0xE7D9},{0x91D7, 0xEE9F},
- {0x91D8, 0x9342},{0x91DA, 0xEE9E},{0x91DB, 0xE7DC},{0x91DC, 0x8A98},{0x91DD, 0x906A},{0x91DE, 0xEEA0},{0x91DF, 0xE7DA},{0x91E1, 0xE7DB},
- {0x91E3, 0x92DE},{0x91E4, 0xEEA3},{0x91E5, 0xEEA4},{0x91E6, 0x9674},{0x91E7, 0x8BFA},{0x91ED, 0xEEA1},{0x91EE, 0xEEA2},{0x91F5, 0xE7DE},
- {0x91F6, 0xE7DF},{0x91FC, 0xE7DD},{0x91FF, 0xE7E1},{0x9206, 0xEEA5},{0x920A, 0xEEA7},{0x920D, 0x93DD},{0x920E, 0x8A62},{0x9210, 0xEEA6},
- {0x9211, 0xE7E5},{0x9214, 0xE7E2},{0x9215, 0xE7E4},{0x921E, 0xE7E0},{0x9229, 0xE86E},{0x922C, 0xE7E3},{0x9234, 0x97E9},{0x9237, 0x8CD8},
- {0x9239, 0xEEAE},{0x923A, 0xEEA8},{0x923C, 0xEEAA},{0x923F, 0xE7ED},{0x9240, 0xEEA9},{0x9244, 0x9353},{0x9245, 0xE7E8},{0x9248, 0xE7EB},
- {0x9249, 0xE7E9},{0x924B, 0xE7EE},{0x924E, 0xEEAB},{0x9250, 0xE7EF},{0x9251, 0xEEAD},{0x9257, 0xE7E7},{0x9259, 0xEEAC},{0x925A, 0xE7F4},
- {0x925B, 0x8994},{0x925E, 0xE7E6},{0x9262, 0x94AB},{0x9264, 0xE7EA},{0x9266, 0x8FDE},{0x9267, 0xEEAF},{0x9271, 0x8D7A},{0x9277, 0xEEB1},
- {0x9278, 0xEEB2},{0x927E, 0x9667},{0x9280, 0x8BE2},{0x9283, 0x8F65},{0x9285, 0x93BA},{0x9288, 0xED43},{0x9291, 0x914C},{0x9293, 0xE7F2},
- {0x9295, 0xE7EC},{0x9296, 0xE7F1},{0x9298, 0x96C1},{0x929A, 0x92B6},{0x929B, 0xE7F3},{0x929C, 0xE7F0},{0x92A7, 0xEEB0},{0x92AD, 0x914B},
- {0x92B7, 0xE7F7},{0x92B9, 0xE7F6},{0x92CF, 0xE7F5},{0x92D0, 0xEEB6},{0x92D2, 0x964E},{0x92D3, 0xEEBA},{0x92D5, 0xEEB8},{0x92D7, 0xEEB4},
- {0x92D9, 0xEEB5},{0x92E0, 0xEEB9},{0x92E4, 0x8F9B},{0x92E7, 0xEEB3},{0x92E9, 0xE7F8},{0x92EA, 0x95DD},{0x92ED, 0x8973},{0x92F2, 0x9565},
- {0x92F3, 0x9292},{0x92F8, 0x8B98},{0x92F9, 0xED49},{0x92FA, 0xE7FA},{0x92FB, 0xEEBD},{0x92FC, 0x8D7C},{0x92FF, 0xEEC0},{0x9302, 0xEEC2},
- {0x9306, 0x8E4B},{0x930F, 0xE7F9},{0x9310, 0x908D},{0x9318, 0x908E},{0x9319, 0xE840},{0x931A, 0xE842},{0x931D, 0xEEC1},{0x931E, 0xEEBF},
- {0x9320, 0x8FF9},{0x9321, 0xEEBC},{0x9322, 0xE841},{0x9323, 0xE843},{0x9325, 0xEEBB},{0x9326, 0x8BD1},{0x9328, 0x9564},{0x932B, 0x8EE0},
- {0x932C, 0x9842},{0x932E, 0xE7FC},{0x932F, 0x8DF6},{0x9332, 0x985E},{0x9335, 0xE845},{0x933A, 0xE844},{0x933B, 0xE846},{0x9344, 0xE7FB},
- {0x9348, 0xED42},{0x934B, 0x93E7},{0x934D, 0x9374},{0x9354, 0x92D5},{0x9356, 0xE84B},{0x9357, 0xEEC4},{0x935B, 0x9262},{0x935C, 0xE847},
- {0x9360, 0xE848},{0x936C, 0x8C4C},{0x936E, 0xE84A},{0x9370, 0xEEC3},{0x9375, 0x8CAE},{0x937C, 0xE849},{0x937E, 0x8FDF},{0x938C, 0x8A99},
- {0x9394, 0xE84F},{0x9396, 0x8DBD},{0x9397, 0x9199},{0x939A, 0x92C8},{0x93A4, 0xEEC5},{0x93A7, 0x8A5A},{0x93AC, 0xE84D},{0x93AD, 0xE84E},
- {0x93AE, 0x92C1},{0x93B0, 0xE84C},{0x93B9, 0xE850},{0x93C3, 0xE856},{0x93C6, 0xEEC6},{0x93C8, 0xE859},{0x93D0, 0xE858},{0x93D1, 0x934C},
- {0x93D6, 0xE851},{0x93D7, 0xE852},{0x93D8, 0xE855},{0x93DD, 0xE857},{0x93DE, 0xEEC7},{0x93E1, 0x8BBE},{0x93E4, 0xE85A},{0x93E5, 0xE854},
- {0x93E8, 0xE853},{0x93F8, 0xEEC8},{0x9403, 0xE85E},{0x9407, 0xE85F},{0x9410, 0xE860},{0x9413, 0xE85D},{0x9414, 0xE85C},{0x9418, 0x8FE0},
- {0x9419, 0x93A8},{0x941A, 0xE85B},{0x9421, 0xE864},{0x942B, 0xE862},{0x9431, 0xEEC9},{0x9435, 0xE863},{0x9436, 0xE861},{0x9438, 0x91F6},
- {0x943A, 0xE865},{0x9441, 0xE866},{0x9444, 0xE868},{0x9445, 0xEECA},{0x9448, 0xEECB},{0x9451, 0x8AD3},{0x9452, 0xE867},{0x9453, 0x96F8},
- {0x945A, 0xE873},{0x945B, 0xE869},{0x945E, 0xE86C},{0x9460, 0xE86A},{0x9462, 0xE86B},{0x946A, 0xE86D},{0x9470, 0xE86F},{0x9475, 0xE870},
- {0x9477, 0xE871},{0x947C, 0xE874},{0x947D, 0xE872},{0x947E, 0xE875},{0x947F, 0xE877},{0x9481, 0xE876},{0x9577, 0x92B7},{0x9580, 0x96E5},
- {0x9582, 0xE878},{0x9583, 0x914D},{0x9587, 0xE879},{0x9589, 0x95C2},{0x958A, 0xE87A},{0x958B, 0x8A4A},{0x958F, 0x895B},{0x9591, 0x8AD5},
- {0x9592, 0xEECC},{0x9593, 0x8AD4},{0x9594, 0xE87B},{0x9596, 0xE87C},{0x9598, 0xE87D},{0x9599, 0xE87E},{0x95A0, 0xE880},{0x95A2, 0x8AD6},
- {0x95A3, 0x8A74},{0x95A4, 0x8D7D},{0x95A5, 0x94B4},{0x95A7, 0xE882},{0x95A8, 0xE881},{0x95AD, 0xE883},{0x95B2, 0x897B},{0x95B9, 0xE886},
- {0x95BB, 0xE885},{0x95BC, 0xE884},{0x95BE, 0xE887},{0x95C3, 0xE88A},{0x95C7, 0x88C5},{0x95CA, 0xE888},{0x95CC, 0xE88C},{0x95CD, 0xE88B},
- {0x95D4, 0xE88E},{0x95D5, 0xE88D},{0x95D6, 0xE88F},{0x95D8, 0x93AC},{0x95DC, 0xE890},{0x95E1, 0xE891},{0x95E2, 0xE893},{0x95E5, 0xE892},
- {0x961C, 0x958C},{0x9621, 0xE894},{0x9628, 0xE895},{0x962A, 0x8DE3},{0x962E, 0xE896},{0x962F, 0xE897},{0x9632, 0x9668},{0x963B, 0x916A},
- {0x963F, 0x88A2},{0x9640, 0x91C9},{0x9642, 0xE898},{0x9644, 0x958D},{0x964B, 0xE89B},{0x964C, 0xE899},{0x964D, 0x8D7E},{0x964F, 0xE89A},
- {0x9650, 0x8CC0},{0x965B, 0x95C3},{0x965C, 0xE89D},{0x965D, 0xE89F},{0x965E, 0xE89E},{0x965F, 0xE8A0},{0x9662, 0x8940},{0x9663, 0x9077},
- {0x9664, 0x8F9C},{0x9665, 0x8AD7},{0x9666, 0xE8A1},{0x966A, 0x9486},{0x966C, 0xE8A3},{0x9670, 0x8941},{0x9672, 0xE8A2},{0x9673, 0x92C2},
- {0x9675, 0x97CB},{0x9676, 0x93A9},{0x9677, 0xE89C},{0x9678, 0x97A4},{0x967A, 0x8CAF},{0x967D, 0x977A},{0x9685, 0x8BF7},{0x9686, 0x97B2},
- {0x9688, 0x8C47},{0x968A, 0x91E0},{0x968B, 0xE440},{0x968D, 0xE8A4},{0x968E, 0x8A4B},{0x968F, 0x908F},{0x9694, 0x8A75},{0x9695, 0xE8A6},
- {0x9697, 0xE8A7},{0x9698, 0xE8A5},{0x9699, 0x8C84},{0x969B, 0x8DDB},{0x969C, 0x8FE1},{0x969D, 0xEECF},{0x96A0, 0x8942},{0x96A3, 0x97D7},
- {0x96A7, 0xE8A9},{0x96A8, 0xE7AC},{0x96AA, 0xE8A8},{0x96AF, 0xEED0},{0x96B0, 0xE8AC},{0x96B1, 0xE8AA},{0x96B2, 0xE8AB},{0x96B4, 0xE8AD},
- {0x96B6, 0xE8AE},{0x96B7, 0x97EA},{0x96B8, 0xE8AF},{0x96B9, 0xE8B0},{0x96BB, 0x90C7},{0x96BC, 0x94B9},{0x96C0, 0x909D},{0x96C1, 0x8AE5},
- {0x96C4, 0x9759},{0x96C5, 0x89EB},{0x96C6, 0x8F57},{0x96C7, 0x8CD9},{0x96C9, 0xE8B3},{0x96CB, 0xE8B2},{0x96CC, 0x8E93},{0x96CD, 0xE8B4},
- {0x96CE, 0xE8B1},{0x96D1, 0x8E47},{0x96D5, 0xE8B8},{0x96D6, 0xE5AB},{0x96D9, 0x99D4},{0x96DB, 0x9097},{0x96DC, 0xE8B6},{0x96E2, 0x97A3},
- {0x96E3, 0x93EF},{0x96E8, 0x894A},{0x96EA, 0x90E1},{0x96EB, 0x8EB4},{0x96F0, 0x95B5},{0x96F2, 0x895F},{0x96F6, 0x97EB},{0x96F7, 0x978B},
- {0x96F9, 0xE8B9},{0x96FB, 0x9364},{0x9700, 0x8EF9},{0x9704, 0xE8BA},{0x9706, 0xE8BB},{0x9707, 0x906B},{0x9708, 0xE8BC},{0x970A, 0x97EC},
- {0x970D, 0xE8B7},{0x970E, 0xE8BE},{0x970F, 0xE8C0},{0x9711, 0xE8BF},{0x9713, 0xE8BD},{0x9716, 0xE8C1},{0x9719, 0xE8C2},{0x971C, 0x919A},
- {0x971E, 0x89E0},{0x9724, 0xE8C3},{0x9727, 0x96B6},{0x972A, 0xE8C4},{0x9730, 0xE8C5},{0x9732, 0x9849},{0x9733, 0xEED1},{0x9738, 0x9E50},
- {0x9739, 0xE8C6},{0x973B, 0xEED2},{0x973D, 0xE8C7},{0x973E, 0xE8C8},{0x9742, 0xE8CC},{0x9743, 0xEED3},{0x9744, 0xE8C9},{0x9746, 0xE8CA},
- {0x9748, 0xE8CB},{0x9749, 0xE8CD},{0x974D, 0xEED4},{0x974F, 0xEED5},{0x9751, 0xEED6},{0x9752, 0x90C2},{0x9755, 0xEED7},{0x9756, 0x96F5},
- {0x9759, 0x90C3},{0x975C, 0xE8CE},{0x975E, 0x94F1},{0x9760, 0xE8CF},{0x9761, 0xEA72},{0x9762, 0x96CA},{0x9764, 0xE8D0},{0x9766, 0xE8D1},
- {0x9768, 0xE8D2},{0x9769, 0x8A76},{0x976B, 0xE8D4},{0x976D, 0x9078},{0x9771, 0xE8D5},{0x9774, 0x8C43},{0x9779, 0xE8D6},{0x977A, 0xE8DA},
- {0x977C, 0xE8D8},{0x9781, 0xE8D9},{0x9784, 0x8A93},{0x9785, 0xE8D7},{0x9786, 0xE8DB},{0x978B, 0xE8DC},{0x978D, 0x88C6},{0x978F, 0xE8DD},
- {0x9790, 0xE8DE},{0x9798, 0x8FE2},{0x979C, 0xE8DF},{0x97A0, 0x8B66},{0x97A3, 0xE8E2},{0x97A6, 0xE8E1},{0x97A8, 0xE8E0},{0x97AB, 0xE691},
- {0x97AD, 0x95DA},{0x97B3, 0xE8E3},{0x97B4, 0xE8E4},{0x97C3, 0xE8E5},{0x97C6, 0xE8E6},{0x97C8, 0xE8E7},{0x97CB, 0xE8E8},{0x97D3, 0x8AD8},
- {0x97DC, 0xE8E9},{0x97ED, 0xE8EA},{0x97EE, 0x9442},{0x97F2, 0xE8EC},{0x97F3, 0x89B9},{0x97F5, 0xE8EF},{0x97F6, 0xE8EE},{0x97FB, 0x8943},
- {0x97FF, 0x8BBF},{0x9801, 0x95C5},{0x9802, 0x92B8},{0x9803, 0x8DA0},{0x9805, 0x8D80},{0x9806, 0x8F87},{0x9808, 0x907B},{0x980C, 0xE8F1},
- {0x980F, 0xE8F0},{0x9810, 0x9761},{0x9811, 0x8AE6},{0x9812, 0x94D0},{0x9813, 0x93DA},{0x9817, 0x909C},{0x9818, 0x97CC},{0x981A, 0x8C7A},
- {0x9821, 0xE8F4},{0x9824, 0xE8F3},{0x982C, 0x966A},{0x982D, 0x93AA},{0x9834, 0x896F},{0x9837, 0xE8F5},{0x9838, 0xE8F2},{0x983B, 0x9570},
- {0x983C, 0x978A},{0x983D, 0xE8F6},{0x9846, 0xE8F7},{0x984B, 0xE8F9},{0x984C, 0x91E8},{0x984D, 0x8A7A},{0x984E, 0x8A7B},{0x984F, 0xE8F8},
- {0x9854, 0x8AE7},{0x9855, 0x8CB0},{0x9857, 0xEED8},{0x9858, 0x8AE8},{0x985B, 0x935E},{0x985E, 0x97DE},{0x9865, 0xEED9},{0x9867, 0x8CDA},
- {0x986B, 0xE8FA},{0x986F, 0xE8FB},{0x9870, 0xE8FC},{0x9871, 0xE940},{0x9873, 0xE942},{0x9874, 0xE941},{0x98A8, 0x9597},{0x98AA, 0xE943},
- {0x98AF, 0xE944},{0x98B1, 0xE945},{0x98B6, 0xE946},{0x98C3, 0xE948},{0x98C4, 0xE947},{0x98C6, 0xE949},{0x98DB, 0x94F2},{0x98DC, 0xE3CA},
- {0x98DF, 0x9048},{0x98E2, 0x8B51},{0x98E9, 0xE94A},{0x98EB, 0xE94B},{0x98ED, 0x99AA},{0x98EE, 0x9F5A},{0x98EF, 0x94D1},{0x98F2, 0x88F9},
- {0x98F4, 0x88B9},{0x98FC, 0x8E94},{0x98FD, 0x964F},{0x98FE, 0x8FFC},{0x9903, 0xE94C},{0x9905, 0x96DD},{0x9909, 0xE94D},{0x990A, 0x977B},
- {0x990C, 0x8961},{0x9910, 0x8E60},{0x9912, 0xE94E},{0x9913, 0x89EC},{0x9914, 0xE94F},{0x9918, 0xE950},{0x991D, 0xE952},{0x991E, 0xE953},
- {0x9920, 0xE955},{0x9921, 0xE951},{0x9924, 0xE954},{0x9927, 0xEEDC},{0x9928, 0x8AD9},{0x992C, 0xE956},{0x992E, 0xE957},{0x993D, 0xE958},
- {0x993E, 0xE959},{0x9942, 0xE95A},{0x9945, 0xE95C},{0x9949, 0xE95B},{0x994B, 0xE95E},{0x994C, 0xE961},{0x9950, 0xE95D},{0x9951, 0xE95F},
- {0x9952, 0xE960},{0x9955, 0xE962},{0x9957, 0x8BC0},{0x9996, 0x8EF1},{0x9997, 0xE963},{0x9998, 0xE964},{0x9999, 0x8D81},{0x999E, 0xEEDE},
- {0x99A5, 0xE965},{0x99A8, 0x8A5D},{0x99AC, 0x946E},{0x99AD, 0xE966},{0x99AE, 0xE967},{0x99B3, 0x9279},{0x99B4, 0x93E9},{0x99BC, 0xE968},
- {0x99C1, 0x949D},{0x99C4, 0x91CA},{0x99C5, 0x8977},{0x99C6, 0x8BEC},{0x99C8, 0x8BED},{0x99D0, 0x9293},{0x99D1, 0xE96D},{0x99D2, 0x8BEE},
- {0x99D5, 0x89ED},{0x99D8, 0xE96C},{0x99DB, 0xE96A},{0x99DD, 0xE96B},{0x99DF, 0xE969},{0x99E2, 0xE977},{0x99ED, 0xE96E},{0x99EE, 0xE96F},
- {0x99F1, 0xE970},{0x99F2, 0xE971},{0x99F8, 0xE973},{0x99FB, 0xE972},{0x99FF, 0x8F78},{0x9A01, 0xE974},{0x9A05, 0xE976},{0x9A0E, 0x8B52},
- {0x9A0F, 0xE975},{0x9A12, 0x919B},{0x9A13, 0x8CB1},{0x9A19, 0xE978},{0x9A28, 0x91CB},{0x9A2B, 0xE979},{0x9A30, 0x93AB},{0x9A37, 0xE97A},
- {0x9A3E, 0xE980},{0x9A40, 0xE97D},{0x9A42, 0xE97C},{0x9A43, 0xE97E},{0x9A45, 0xE97B},{0x9A4D, 0xE982},{0x9A4E, 0xEEDF},{0x9A55, 0xE981},
- {0x9A57, 0xE984},{0x9A5A, 0x8BC1},{0x9A5B, 0xE983},{0x9A5F, 0xE985},{0x9A62, 0xE986},{0x9A64, 0xE988},{0x9A65, 0xE987},{0x9A69, 0xE989},
- {0x9A6A, 0xE98B},{0x9A6B, 0xE98A},{0x9AA8, 0x8D9C},{0x9AAD, 0xE98C},{0x9AB0, 0xE98D},{0x9AB8, 0x8A5B},{0x9ABC, 0xE98E},{0x9AC0, 0xE98F},
- {0x9AC4, 0x9091},{0x9ACF, 0xE990},{0x9AD1, 0xE991},{0x9AD3, 0xE992},{0x9AD4, 0xE993},{0x9AD8, 0x8D82},{0x9AD9, 0xEEE0},{0x9ADC, 0xEEE1},
- {0x9ADE, 0xE994},{0x9ADF, 0xE995},{0x9AE2, 0xE996},{0x9AE3, 0xE997},{0x9AE6, 0xE998},{0x9AEA, 0x94AF},{0x9AEB, 0xE99A},{0x9AED, 0x9545},
- {0x9AEE, 0xE99B},{0x9AEF, 0xE999},{0x9AF1, 0xE99D},{0x9AF4, 0xE99C},{0x9AF7, 0xE99E},{0x9AFB, 0xE99F},{0x9B06, 0xE9A0},{0x9B18, 0xE9A1},
- {0x9B1A, 0xE9A2},{0x9B1F, 0xE9A3},{0x9B22, 0xE9A4},{0x9B23, 0xE9A5},{0x9B25, 0xE9A6},{0x9B27, 0xE9A7},{0x9B28, 0xE9A8},{0x9B29, 0xE9A9},
- {0x9B2A, 0xE9AA},{0x9B2E, 0xE9AB},{0x9B2F, 0xE9AC},{0x9B31, 0x9F54},{0x9B32, 0xE9AD},{0x9B3B, 0xE2F6},{0x9B3C, 0x8B53},{0x9B41, 0x8A40},
- {0x9B42, 0x8DB0},{0x9B43, 0xE9AF},{0x9B44, 0xE9AE},{0x9B45, 0x96A3},{0x9B4D, 0xE9B1},{0x9B4E, 0xE9B2},{0x9B4F, 0xE9B0},{0x9B51, 0xE9B3},
- {0x9B54, 0x9682},{0x9B58, 0xE9B4},{0x9B5A, 0x8B9B},{0x9B6F, 0x9844},{0x9B72, 0xEEE3},{0x9B74, 0xE9B5},{0x9B75, 0xEEE2},{0x9B83, 0xE9B7},
- {0x9B8E, 0x88BC},{0x9B8F, 0xEEE4},{0x9B91, 0xE9B8},{0x9B92, 0x95A9},{0x9B93, 0xE9B6},{0x9B96, 0xE9B9},{0x9B97, 0xE9BA},{0x9B9F, 0xE9BB},
- {0x9BA0, 0xE9BC},{0x9BA8, 0xE9BD},{0x9BAA, 0x968E},{0x9BAB, 0x8E4C},{0x9BAD, 0x8DF8},{0x9BAE, 0x914E},{0x9BB1, 0xEEE5},{0x9BB4, 0xE9BE},
- {0x9BB9, 0xE9C1},{0x9BBB, 0xEEE6},{0x9BC0, 0xE9BF},{0x9BC6, 0xE9C2},{0x9BC9, 0x8CEF},{0x9BCA, 0xE9C0},{0x9BCF, 0xE9C3},{0x9BD1, 0xE9C4},
- {0x9BD2, 0xE9C5},{0x9BD4, 0xE9C9},{0x9BD6, 0x8E49},{0x9BDB, 0x91E2},{0x9BE1, 0xE9CA},{0x9BE2, 0xE9C7},{0x9BE3, 0xE9C6},{0x9BE4, 0xE9C8},
- {0x9BE8, 0x8C7E},{0x9BF0, 0xE9CE},{0x9BF1, 0xE9CD},{0x9BF2, 0xE9CC},{0x9BF5, 0x88B1},{0x9C00, 0xEEE7},{0x9C04, 0xE9D8},{0x9C06, 0xE9D4},
- {0x9C08, 0xE9D5},{0x9C09, 0xE9D1},{0x9C0A, 0xE9D7},{0x9C0C, 0xE9D3},{0x9C0D, 0x8A82},{0x9C10, 0x986B},{0x9C12, 0xE9D6},{0x9C13, 0xE9D2},
- {0x9C14, 0xE9D0},{0x9C15, 0xE9CF},{0x9C1B, 0xE9DA},{0x9C21, 0xE9DD},{0x9C24, 0xE9DC},{0x9C25, 0xE9DB},{0x9C2D, 0x9568},{0x9C2E, 0xE9D9},
- {0x9C2F, 0x88F1},{0x9C30, 0xE9DE},{0x9C32, 0xE9E0},{0x9C39, 0x8A8F},{0x9C3A, 0xE9CB},{0x9C3B, 0x8956},{0x9C3E, 0xE9E2},{0x9C46, 0xE9E1},
- {0x9C47, 0xE9DF},{0x9C48, 0x924C},{0x9C52, 0x9690},{0x9C57, 0x97D8},{0x9C5A, 0xE9E3},{0x9C60, 0xE9E4},{0x9C67, 0xE9E5},{0x9C76, 0xE9E6},
- {0x9C78, 0xE9E7},{0x9CE5, 0x92B9},{0x9CE7, 0xE9E8},{0x9CE9, 0x94B5},{0x9CEB, 0xE9ED},{0x9CEC, 0xE9E9},{0x9CF0, 0xE9EA},{0x9CF3, 0x9650},
- {0x9CF4, 0x96C2},{0x9CF6, 0x93CE},{0x9D03, 0xE9EE},{0x9D06, 0xE9EF},{0x9D07, 0x93BC},{0x9D08, 0xE9EC},{0x9D09, 0xE9EB},{0x9D0E, 0x89A8},
- {0x9D12, 0xE9F7},{0x9D15, 0xE9F6},{0x9D1B, 0x8995},{0x9D1F, 0xE9F4},{0x9D23, 0xE9F3},{0x9D26, 0xE9F1},{0x9D28, 0x8A9B},{0x9D2A, 0xE9F0},
- {0x9D2B, 0x8EB0},{0x9D2C, 0x89A7},{0x9D3B, 0x8D83},{0x9D3E, 0xE9FA},{0x9D3F, 0xE9F9},{0x9D41, 0xE9F8},{0x9D44, 0xE9F5},{0x9D46, 0xE9FB},
- {0x9D48, 0xE9FC},{0x9D50, 0xEA44},{0x9D51, 0xEA43},{0x9D59, 0xEA45},{0x9D5C, 0x894C},{0x9D5D, 0xEA40},{0x9D5E, 0xEA41},{0x9D60, 0x8D94},
- {0x9D61, 0x96B7},{0x9D64, 0xEA42},{0x9D6B, 0xEEE9},{0x9D6C, 0x9651},{0x9D6F, 0xEA4A},{0x9D70, 0xEEE8},{0x9D72, 0xEA46},{0x9D7A, 0xEA4B},
- {0x9D87, 0xEA48},{0x9D89, 0xEA47},{0x9D8F, 0x8C7B},{0x9D9A, 0xEA4C},{0x9DA4, 0xEA4D},{0x9DA9, 0xEA4E},{0x9DAB, 0xEA49},{0x9DAF, 0xE9F2},
- {0x9DB2, 0xEA4F},{0x9DB4, 0x92DF},{0x9DB8, 0xEA53},{0x9DBA, 0xEA54},{0x9DBB, 0xEA52},{0x9DC1, 0xEA51},{0x9DC2, 0xEA57},{0x9DC4, 0xEA50},
- {0x9DC6, 0xEA55},{0x9DCF, 0xEA56},{0x9DD3, 0xEA59},{0x9DD9, 0xEA58},{0x9DE6, 0xEA5B},{0x9DED, 0xEA5C},{0x9DEF, 0xEA5D},{0x9DF2, 0x9868},
- {0x9DF8, 0xEA5A},{0x9DF9, 0x91E9},{0x9DFA, 0x8DEB},{0x9DFD, 0xEA5E},{0x9E19, 0xEEEB},{0x9E1A, 0xEA5F},{0x9E1B, 0xEA60},{0x9E1E, 0xEA61},
- {0x9E75, 0xEA62},{0x9E78, 0x8CB2},{0x9E79, 0xEA63},{0x9E7D, 0xEA64},{0x9E7F, 0x8EAD},{0x9E81, 0xEA65},{0x9E88, 0xEA66},{0x9E8B, 0xEA67},
- {0x9E8C, 0xEA68},{0x9E91, 0xEA6B},{0x9E92, 0xEA69},{0x9E93, 0x985B},{0x9E95, 0xEA6A},{0x9E97, 0x97ED},{0x9E9D, 0xEA6C},{0x9E9F, 0x97D9},
- {0x9EA5, 0xEA6D},{0x9EA6, 0x949E},{0x9EA9, 0xEA6E},{0x9EAA, 0xEA70},{0x9EAD, 0xEA71},{0x9EB8, 0xEA6F},{0x9EB9, 0x8D8D},{0x9EBA, 0x96CB},
- {0x9EBB, 0x9683},{0x9EBC, 0x9BF5},{0x9EBE, 0x9F80},{0x9EBF, 0x969B},{0x9EC4, 0x89A9},{0x9ECC, 0xEA73},{0x9ECD, 0x8B6F},{0x9ECE, 0xEA74},
- {0x9ECF, 0xEA75},{0x9ED0, 0xEA76},{0x9ED1, 0xEEEC},{0x9ED2, 0x8D95},{0x9ED4, 0xEA77},{0x9ED8, 0xE0D2},{0x9ED9, 0x96D9},{0x9EDB, 0x91E1},
- {0x9EDC, 0xEA78},{0x9EDD, 0xEA7A},{0x9EDE, 0xEA79},{0x9EE0, 0xEA7B},{0x9EE5, 0xEA7C},{0x9EE8, 0xEA7D},{0x9EEF, 0xEA7E},{0x9EF4, 0xEA80},
- {0x9EF6, 0xEA81},{0x9EF7, 0xEA82},{0x9EF9, 0xEA83},{0x9EFB, 0xEA84},{0x9EFC, 0xEA85},{0x9EFD, 0xEA86},{0x9F07, 0xEA87},{0x9F08, 0xEA88},
- {0x9F0E, 0x9343},{0x9F13, 0x8CDB},{0x9F15, 0xEA8A},{0x9F20, 0x916C},{0x9F21, 0xEA8B},{0x9F2C, 0xEA8C},{0x9F3B, 0x9540},{0x9F3E, 0xEA8D},
- {0x9F4A, 0xEA8E},{0x9F4B, 0xE256},{0x9F4E, 0xE6D8},{0x9F4F, 0xE8EB},{0x9F52, 0xEA8F},{0x9F54, 0xEA90},{0x9F5F, 0xEA92},{0x9F60, 0xEA93},
- {0x9F61, 0xEA94},{0x9F62, 0x97EE},{0x9F63, 0xEA91},{0x9F66, 0xEA95},{0x9F67, 0xEA96},{0x9F6A, 0xEA98},{0x9F6C, 0xEA97},{0x9F72, 0xEA9A},
- {0x9F76, 0xEA9B},{0x9F77, 0xEA99},{0x9F8D, 0x97B4},{0x9F95, 0xEA9C},{0x9F9C, 0xEA9D},{0x9F9D, 0xE273},{0x9FA0, 0xEA9E},{0xF929, 0xEDC4},
- {0xF9DC, 0xEECD},{0xFA0E, 0xED73},{0xFA0F, 0xED7E},{0xFA10, 0xED80},{0xFA11, 0xED95},{0xFA12, 0xEDBC},{0xFA13, 0xEDCC},{0xFA14, 0xEDCE},
- {0xFA15, 0xEDF9},{0xFA16, 0xEE42},{0xFA17, 0xEE59},{0xFA18, 0xEE61},{0xFA19, 0xEE62},{0xFA1A, 0xEE63},{0xFA1B, 0xEE65},{0xFA1C, 0xEE69},
- {0xFA1D, 0xEE6C},{0xFA1E, 0xEE75},{0xFA1F, 0xEE81},{0xFA20, 0xEE83},{0xFA21, 0xEE84},{0xFA22, 0xEE8D},{0xFA23, 0xEE95},{0xFA24, 0xEE97},
- {0xFA25, 0xEE98},{0xFA26, 0xEE9B},{0xFA27, 0xEEB7},{0xFA28, 0xEEBE},{0xFA29, 0xEECE},{0xFA2A, 0xEEDA},{0xFA2B, 0xEEDB},{0xFA2C, 0xEEDD},
- {0xFA2D, 0xEEEA},{0xFF01, 0x8149},{0xFF02, 0xEEFC},{0xFF03, 0x8194},{0xFF04, 0x8190},{0xFF05, 0x8193},{0xFF06, 0x8195},{0xFF07, 0xEEFB},
- {0xFF08, 0x8169},{0xFF09, 0x816A},{0xFF0A, 0x8196},{0xFF0B, 0x817B},{0xFF0C, 0x8143},{0xFF0D, 0x817C},{0xFF0E, 0x8144},{0xFF0F, 0x815E},
- {0xFF10, 0x824F},{0xFF11, 0x8250},{0xFF12, 0x8251},{0xFF13, 0x8252},{0xFF14, 0x8253},{0xFF15, 0x8254},{0xFF16, 0x8255},{0xFF17, 0x8256},
- {0xFF18, 0x8257},{0xFF19, 0x8258},{0xFF1A, 0x8146},{0xFF1B, 0x8147},{0xFF1C, 0x8183},{0xFF1D, 0x8181},{0xFF1E, 0x8184},{0xFF1F, 0x8148},
- {0xFF20, 0x8197},{0xFF21, 0x8260},{0xFF22, 0x8261},{0xFF23, 0x8262},{0xFF24, 0x8263},{0xFF25, 0x8264},{0xFF26, 0x8265},{0xFF27, 0x8266},
- {0xFF28, 0x8267},{0xFF29, 0x8268},{0xFF2A, 0x8269},{0xFF2B, 0x826A},{0xFF2C, 0x826B},{0xFF2D, 0x826C},{0xFF2E, 0x826D},{0xFF2F, 0x826E},
- {0xFF30, 0x826F},{0xFF31, 0x8270},{0xFF32, 0x8271},{0xFF33, 0x8272},{0xFF34, 0x8273},{0xFF35, 0x8274},{0xFF36, 0x8275},{0xFF37, 0x8276},
- {0xFF38, 0x8277},{0xFF39, 0x8278},{0xFF3A, 0x8279},{0xFF3B, 0x816D},{0xFF3C, 0x815F},{0xFF3D, 0x816E},{0xFF3E, 0x814F},{0xFF3F, 0x8151},
- {0xFF40, 0x814D},{0xFF41, 0x8281},{0xFF42, 0x8282},{0xFF43, 0x8283},{0xFF44, 0x8284},{0xFF45, 0x8285},{0xFF46, 0x8286},{0xFF47, 0x8287},
- {0xFF48, 0x8288},{0xFF49, 0x8289},{0xFF4A, 0x828A},{0xFF4B, 0x828B},{0xFF4C, 0x828C},{0xFF4D, 0x828D},{0xFF4E, 0x828E},{0xFF4F, 0x828F},
- {0xFF50, 0x8290},{0xFF51, 0x8291},{0xFF52, 0x8292},{0xFF53, 0x8293},{0xFF54, 0x8294},{0xFF55, 0x8295},{0xFF56, 0x8296},{0xFF57, 0x8297},
- {0xFF58, 0x8298},{0xFF59, 0x8299},{0xFF5A, 0x829A},{0xFF5B, 0x816F},{0xFF5C, 0x8162},{0xFF5D, 0x8170},{0xFF5E, 0x8160},{0xFF61, 0x00A1},
- {0xFF62, 0x00A2},{0xFF63, 0x00A3},{0xFF64, 0x00A4},{0xFF65, 0x00A5},{0xFF66, 0x00A6},{0xFF67, 0x00A7},{0xFF68, 0x00A8},{0xFF69, 0x00A9},
- {0xFF6A, 0x00AA},{0xFF6B, 0x00AB},{0xFF6C, 0x00AC},{0xFF6D, 0x00AD},{0xFF6E, 0x00AE},{0xFF6F, 0x00AF},{0xFF70, 0x00B0},{0xFF71, 0x00B1},
- {0xFF72, 0x00B2},{0xFF73, 0x00B3},{0xFF74, 0x00B4},{0xFF75, 0x00B5},{0xFF76, 0x00B6},{0xFF77, 0x00B7},{0xFF78, 0x00B8},{0xFF79, 0x00B9},
- {0xFF7A, 0x00BA},{0xFF7B, 0x00BB},{0xFF7C, 0x00BC},{0xFF7D, 0x00BD},{0xFF7E, 0x00BE},{0xFF7F, 0x00BF},{0xFF80, 0x00C0},{0xFF81, 0x00C1},
- {0xFF82, 0x00C2},{0xFF83, 0x00C3},{0xFF84, 0x00C4},{0xFF85, 0x00C5},{0xFF86, 0x00C6},{0xFF87, 0x00C7},{0xFF88, 0x00C8},{0xFF89, 0x00C9},
- {0xFF8A, 0x00CA},{0xFF8B, 0x00CB},{0xFF8C, 0x00CC},{0xFF8D, 0x00CD},{0xFF8E, 0x00CE},{0xFF8F, 0x00CF},{0xFF90, 0x00D0},{0xFF91, 0x00D1},
- {0xFF92, 0x00D2},{0xFF93, 0x00D3},{0xFF94, 0x00D4},{0xFF95, 0x00D5},{0xFF96, 0x00D6},{0xFF97, 0x00D7},{0xFF98, 0x00D8},{0xFF99, 0x00D9},
- {0xFF9A, 0x00DA},{0xFF9B, 0x00DB},{0xFF9C, 0x00DC},{0xFF9D, 0x00DD},{0xFF9E, 0x00DE},{0xFF9F, 0x00DF},{0xFFE0, 0x8191},{0xFFE1, 0x8192},
- {0xFFE2, 0x81CA},{0xFFE3, 0x8150},{0xFFE4, 0xEEFA},{0xFFE5, 0x818F}
-};
diff --git a/vcl/source/fontsubset/u2wansung.inc b/vcl/source/fontsubset/u2wansung.inc
deleted file mode 100644
index b321c9e58bfa..000000000000
--- a/vcl/source/fontsubset/u2wansung.inc
+++ /dev/null
@@ -1,1071 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// TODO: use generic RTL_TEXTENCODING_WANSUNG to get rid of this file
-
-sal_uInt16pair xlat_1_5[8319] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A1, 0xA2AE},
- {0x00A4, 0xA2B4},{0x00A7, 0xA1D7},{0x00A8, 0xA1A7},{0x00AA, 0xA8A3},{0x00AD, 0xA1A9},{0x00B0, 0xA1C6},{0x00B1, 0xA1BE},{0x00B2, 0xA9F7},
- {0x00B3, 0xA9F8},{0x00B4, 0xA2A5},{0x00B6, 0xA2D2},{0x00B7, 0xA1A4},{0x00B8, 0xA2AC},{0x00B9, 0xA9F6},{0x00BA, 0xA8AC},{0x00BC, 0xA8F9},
- {0x00BD, 0xA8F6},{0x00BE, 0xA8FA},{0x00BF, 0xA2AF},{0x00C6, 0xA8A1},{0x00D0, 0xA8A2},{0x00D7, 0xA1BF},{0x00D8, 0xA8AA},{0x00DE, 0xA8AD},
- {0x00DF, 0xA9AC},{0x00E6, 0xA9A1},{0x00F0, 0xA9A3},{0x00F7, 0xA1C0},{0x00F8, 0xA9AA},{0x00FE, 0xA9AD},{0x0111, 0xA9A2},{0x0126, 0xA8A4},
- {0x0127, 0xA9A4},{0x0131, 0xA9A5},{0x0132, 0xA8A6},{0x0133, 0xA9A6},{0x0138, 0xA9A7},{0x013F, 0xA8A8},{0x0140, 0xA9A8},{0x0141, 0xA8A9},
- {0x0142, 0xA9A9},{0x0149, 0xA9B0},{0x014A, 0xA8AF},{0x014B, 0xA9AF},{0x0152, 0xA8AB},{0x0153, 0xA9AB},{0x0166, 0xA8AE},{0x0167, 0xA9AE},
- {0x02C7, 0xA2A7},{0x02D0, 0xA2B0},{0x02D8, 0xA2A8},{0x02D9, 0xA2AB},{0x02DA, 0xA2AA},{0x02DB, 0xA2AD},{0x02DD, 0xA2A9},{0x0391, 0xA5C1},
- {0x0392, 0xA5C2},{0x0393, 0xA5C3},{0x0394, 0xA5C4},{0x0395, 0xA5C5},{0x0396, 0xA5C6},{0x0397, 0xA5C7},{0x0398, 0xA5C8},{0x0399, 0xA5C9},
- {0x039A, 0xA5CA},{0x039B, 0xA5CB},{0x039C, 0xA5CC},{0x039D, 0xA5CD},{0x039E, 0xA5CE},{0x039F, 0xA5CF},{0x03A0, 0xA5D0},{0x03A1, 0xA5D1},
- {0x03A3, 0xA5D2},{0x03A4, 0xA5D3},{0x03A5, 0xA5D4},{0x03A6, 0xA5D5},{0x03A7, 0xA5D6},{0x03A8, 0xA5D7},{0x03A9, 0xA5D8},{0x03B1, 0xA5E1},
- {0x03B2, 0xA5E2},{0x03B3, 0xA5E3},{0x03B4, 0xA5E4},{0x03B5, 0xA5E5},{0x03B6, 0xA5E6},{0x03B7, 0xA5E7},{0x03B8, 0xA5E8},{0x03B9, 0xA5E9},
- {0x03BA, 0xA5EA},{0x03BB, 0xA5EB},{0x03BC, 0xA5EC},{0x03BD, 0xA5ED},{0x03BE, 0xA5EE},{0x03BF, 0xA5EF},{0x03C0, 0xA5F0},{0x03C1, 0xA5F1},
- {0x03C3, 0xA5F2},{0x03C4, 0xA5F3},{0x03C5, 0xA5F4},{0x03C6, 0xA5F5},{0x03C7, 0xA5F6},{0x03C8, 0xA5F7},{0x03C9, 0xA5F8},{0x0401, 0xACA7},
- {0x0410, 0xACA1},{0x0411, 0xACA2},{0x0412, 0xACA3},{0x0413, 0xACA4},{0x0414, 0xACA5},{0x0415, 0xACA6},{0x0416, 0xACA8},{0x0417, 0xACA9},
- {0x0418, 0xACAA},{0x0419, 0xACAB},{0x041A, 0xACAC},{0x041B, 0xACAD},{0x041C, 0xACAE},{0x041D, 0xACAF},{0x041E, 0xACB0},{0x041F, 0xACB1},
- {0x0420, 0xACB2},{0x0421, 0xACB3},{0x0422, 0xACB4},{0x0423, 0xACB5},{0x0424, 0xACB6},{0x0425, 0xACB7},{0x0426, 0xACB8},{0x0427, 0xACB9},
- {0x0428, 0xACBA},{0x0429, 0xACBB},{0x042A, 0xACBC},{0x042B, 0xACBD},{0x042C, 0xACBE},{0x042D, 0xACBF},{0x042E, 0xACC0},{0x042F, 0xACC1},
- {0x0430, 0xACD1},{0x0431, 0xACD2},{0x0432, 0xACD3},{0x0433, 0xACD4},{0x0434, 0xACD5},{0x0435, 0xACD6},{0x0436, 0xACD8},{0x0437, 0xACD9},
- {0x0438, 0xACDA},{0x0439, 0xACDB},{0x043A, 0xACDC},{0x043B, 0xACDD},{0x043C, 0xACDE},{0x043D, 0xACDF},{0x043E, 0xACE0},{0x043F, 0xACE1},
- {0x0440, 0xACE2},{0x0441, 0xACE3},{0x0442, 0xACE4},{0x0443, 0xACE5},{0x0444, 0xACE6},{0x0445, 0xACE7},{0x0446, 0xACE8},{0x0447, 0xACE9},
- {0x0448, 0xACEA},{0x0449, 0xACEB},{0x044A, 0xACEC},{0x044B, 0xACED},{0x044C, 0xACEE},{0x044D, 0xACEF},{0x044E, 0xACF0},{0x044F, 0xACF1},
- {0x0451, 0xACD7},{0x2015, 0xA1AA},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2020, 0xA2D3},{0x2021, 0xA2D4},
- {0x2025, 0xA1A5},{0x2026, 0xA1A6},{0x2030, 0xA2B6},{0x2032, 0xA1C7},{0x2033, 0xA1C8},{0x203B, 0xA1D8},{0x2074, 0xA9F9},{0x207F, 0xA9FA},
- {0x2081, 0xA9FB},{0x2082, 0xA9FC},{0x2083, 0xA9FD},{0x2084, 0xA9FE},{0x2103, 0xA1C9},{0x2109, 0xA2B5},{0x2113, 0xA7A4},{0x2116, 0xA2E0},
- {0x2121, 0xA2E5},{0x2122, 0xA2E2},{0x2126, 0xA7D9},{0x212B, 0xA1CA},{0x2153, 0xA8F7},{0x2154, 0xA8F8},{0x215B, 0xA8FB},{0x215C, 0xA8FC},
- {0x215D, 0xA8FD},{0x215E, 0xA8FE},{0x2160, 0xA5B0},{0x2161, 0xA5B1},{0x2162, 0xA5B2},{0x2163, 0xA5B3},{0x2164, 0xA5B4},{0x2165, 0xA5B5},
- {0x2166, 0xA5B6},{0x2167, 0xA5B7},{0x2168, 0xA5B8},{0x2169, 0xA5B9},{0x2170, 0xA5A1},{0x2171, 0xA5A2},{0x2172, 0xA5A3},{0x2173, 0xA5A4},
- {0x2174, 0xA5A5},{0x2175, 0xA5A6},{0x2176, 0xA5A7},{0x2177, 0xA5A8},{0x2178, 0xA5A9},{0x2179, 0xA5AA},{0x2190, 0xA1E7},{0x2191, 0xA1E8},
- {0x2192, 0xA1E6},{0x2193, 0xA1E9},{0x2194, 0xA1EA},{0x2195, 0xA2D5},{0x2196, 0xA2D8},{0x2197, 0xA2D6},{0x2198, 0xA2D9},{0x2199, 0xA2D7},
- {0x21D2, 0xA2A1},{0x21D4, 0xA2A2},{0x2200, 0xA2A3},{0x2202, 0xA1D3},{0x2203, 0xA2A4},{0x2207, 0xA1D4},{0x2208, 0xA1F4},{0x220B, 0xA1F5},
- {0x220F, 0xA2B3},{0x2211, 0xA2B2},{0x221A, 0xA1EE},{0x221D, 0xA1F0},{0x221E, 0xA1C4},{0x2220, 0xA1D0},{0x2225, 0xA1AB},{0x2227, 0xA1FC},
- {0x2228, 0xA1FD},{0x2229, 0xA1FB},{0x222A, 0xA1FA},{0x222B, 0xA1F2},{0x222C, 0xA1F3},{0x222E, 0xA2B1},{0x2234, 0xA1C5},{0x2235, 0xA1F1},
- {0x223C, 0xA1AD},{0x223D, 0xA1EF},{0x2252, 0xA1D6},{0x2260, 0xA1C1},{0x2261, 0xA1D5},{0x2264, 0xA1C2},{0x2265, 0xA1C3},{0x226A, 0xA1EC},
- {0x226B, 0xA1ED},{0x2282, 0xA1F8},{0x2283, 0xA1F9},{0x2286, 0xA1F6},{0x2287, 0xA1F7},{0x2299, 0xA2C1},{0x22A5, 0xA1D1},{0x2312, 0xA1D2},
- {0x2460, 0xA8E7},{0x2461, 0xA8E8},{0x2462, 0xA8E9},{0x2463, 0xA8EA},{0x2464, 0xA8EB},{0x2465, 0xA8EC},{0x2466, 0xA8ED},{0x2467, 0xA8EE},
- {0x2468, 0xA8EF},{0x2469, 0xA8F0},{0x246A, 0xA8F1},{0x246B, 0xA8F2},{0x246C, 0xA8F3},{0x246D, 0xA8F4},{0x246E, 0xA8F5},{0x2474, 0xA9E7},
- {0x2475, 0xA9E8},{0x2476, 0xA9E9},{0x2477, 0xA9EA},{0x2478, 0xA9EB},{0x2479, 0xA9EC},{0x247A, 0xA9ED},{0x247B, 0xA9EE},{0x247C, 0xA9EF},
- {0x247D, 0xA9F0},{0x247E, 0xA9F1},{0x247F, 0xA9F2},{0x2480, 0xA9F3},{0x2481, 0xA9F4},{0x2482, 0xA9F5},{0x249C, 0xA9CD},{0x249D, 0xA9CE},
- {0x249E, 0xA9CF},{0x249F, 0xA9D0},{0x24A0, 0xA9D1},{0x24A1, 0xA9D2},{0x24A2, 0xA9D3},{0x24A3, 0xA9D4},{0x24A4, 0xA9D5},{0x24A5, 0xA9D6},
- {0x24A6, 0xA9D7},{0x24A7, 0xA9D8},{0x24A8, 0xA9D9},{0x24A9, 0xA9DA},{0x24AA, 0xA9DB},{0x24AB, 0xA9DC},{0x24AC, 0xA9DD},{0x24AD, 0xA9DE},
- {0x24AE, 0xA9DF},{0x24AF, 0xA9E0},{0x24B0, 0xA9E1},{0x24B1, 0xA9E2},{0x24B2, 0xA9E3},{0x24B3, 0xA9E4},{0x24B4, 0xA9E5},{0x24B5, 0xA9E6},
- {0x24D0, 0xA8CD},{0x24D1, 0xA8CE},{0x24D2, 0xA8CF},{0x24D3, 0xA8D0},{0x24D4, 0xA8D1},{0x24D5, 0xA8D2},{0x24D6, 0xA8D3},{0x24D7, 0xA8D4},
- {0x24D8, 0xA8D5},{0x24D9, 0xA8D6},{0x24DA, 0xA8D7},{0x24DB, 0xA8D8},{0x24DC, 0xA8D9},{0x24DD, 0xA8DA},{0x24DE, 0xA8DB},{0x24DF, 0xA8DC},
- {0x24E0, 0xA8DD},{0x24E1, 0xA8DE},{0x24E2, 0xA8DF},{0x24E3, 0xA8E0},{0x24E4, 0xA8E1},{0x24E5, 0xA8E2},{0x24E6, 0xA8E3},{0x24E7, 0xA8E4},
- {0x24E8, 0xA8E5},{0x24E9, 0xA8E6},{0x2500, 0xA6A1},{0x2501, 0xA6AC},{0x2502, 0xA6A2},{0x2503, 0xA6AD},{0x250C, 0xA6A3},{0x250D, 0xA6C8},
- {0x250E, 0xA6C7},{0x250F, 0xA6AE},{0x2510, 0xA6A4},{0x2511, 0xA6C2},{0x2512, 0xA6C1},{0x2513, 0xA6AF},{0x2514, 0xA6A6},{0x2515, 0xA6C6},
- {0x2516, 0xA6C5},{0x2517, 0xA6B1},{0x2518, 0xA6A5},{0x2519, 0xA6C4},{0x251A, 0xA6C3},{0x251B, 0xA6B0},{0x251C, 0xA6A7},{0x251D, 0xA6BC},
- {0x251E, 0xA6C9},{0x251F, 0xA6CA},{0x2520, 0xA6B7},{0x2521, 0xA6CB},{0x2522, 0xA6CC},{0x2523, 0xA6B2},{0x2524, 0xA6A9},{0x2525, 0xA6BE},
- {0x2526, 0xA6CD},{0x2527, 0xA6CE},{0x2528, 0xA6B9},{0x2529, 0xA6CF},{0x252A, 0xA6D0},{0x252B, 0xA6B4},{0x252C, 0xA6A8},{0x252D, 0xA6D1},
- {0x252E, 0xA6D2},{0x252F, 0xA6B8},{0x2530, 0xA6BD},{0x2531, 0xA6D3},{0x2532, 0xA6D4},{0x2533, 0xA6B3},{0x2534, 0xA6AA},{0x2535, 0xA6D5},
- {0x2536, 0xA6D6},{0x2537, 0xA6BA},{0x2538, 0xA6BF},{0x2539, 0xA6D7},{0x253A, 0xA6D8},{0x253B, 0xA6B5},{0x253C, 0xA6AB},{0x253D, 0xA6D9},
- {0x253E, 0xA6DA},{0x253F, 0xA6BB},{0x2540, 0xA6DB},{0x2541, 0xA6DC},{0x2542, 0xA6C0},{0x2543, 0xA6DD},{0x2544, 0xA6DE},{0x2545, 0xA6DF},
- {0x2546, 0xA6E0},{0x2547, 0xA6E1},{0x2548, 0xA6E2},{0x2549, 0xA6E3},{0x254A, 0xA6E4},{0x254B, 0xA6B6},{0x2592, 0xA2C6},{0x25A0, 0xA1E1},
- {0x25A1, 0xA1E0},{0x25A3, 0xA2C3},{0x25A4, 0xA2C7},{0x25A5, 0xA2C8},{0x25A6, 0xA2CB},{0x25A7, 0xA2CA},{0x25A8, 0xA2C9},{0x25A9, 0xA2CC},
- {0x25B2, 0xA1E3},{0x25B3, 0xA1E2},{0x25B6, 0xA2BA},{0x25B7, 0xA2B9},{0x25BC, 0xA1E5},{0x25BD, 0xA1E4},{0x25C0, 0xA2B8},{0x25C1, 0xA2B7},
- {0x25C6, 0xA1DF},{0x25C7, 0xA1DE},{0x25C8, 0xA2C2},{0x25CB, 0xA1DB},{0x25CE, 0xA1DD},{0x25CF, 0xA1DC},{0x25D0, 0xA2C4},{0x25D1, 0xA2C5},
- {0x2605, 0xA1DA},{0x2606, 0xA1D9},{0x260E, 0xA2CF},{0x260F, 0xA2CE},{0x261C, 0xA2D0},{0x261E, 0xA2D1},{0x2640, 0xA1CF},{0x2642, 0xA1CE},
- {0x2660, 0xA2BC},{0x2661, 0xA2BD},{0x2663, 0xA2C0},{0x2664, 0xA2BB},{0x2665, 0xA2BE},{0x2667, 0xA2BF},{0x2668, 0xA2CD},{0x2669, 0xA2DB},
- {0x266A, 0xA2DC},{0x266C, 0xA2DD},{0x266D, 0xA2DA},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},{0x3003, 0xA1A8},{0x3008, 0xA1B4},
- {0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},{0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BC},
- {0x3011, 0xA1BD},{0x3013, 0xA1EB},{0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3041, 0xAAA1},{0x3042, 0xAAA2},{0x3043, 0xAAA3},{0x3044, 0xAAA4},
- {0x3045, 0xAAA5},{0x3046, 0xAAA6},{0x3047, 0xAAA7},{0x3048, 0xAAA8},{0x3049, 0xAAA9},{0x304A, 0xAAAA},{0x304B, 0xAAAB},{0x304C, 0xAAAC},
- {0x304D, 0xAAAD},{0x304E, 0xAAAE},{0x304F, 0xAAAF},{0x3050, 0xAAB0},{0x3051, 0xAAB1},{0x3052, 0xAAB2},{0x3053, 0xAAB3},{0x3054, 0xAAB4},
- {0x3055, 0xAAB5},{0x3056, 0xAAB6},{0x3057, 0xAAB7},{0x3058, 0xAAB8},{0x3059, 0xAAB9},{0x305A, 0xAABA},{0x305B, 0xAABB},{0x305C, 0xAABC},
- {0x305D, 0xAABD},{0x305E, 0xAABE},{0x305F, 0xAABF},{0x3060, 0xAAC0},{0x3061, 0xAAC1},{0x3062, 0xAAC2},{0x3063, 0xAAC3},{0x3064, 0xAAC4},
- {0x3065, 0xAAC5},{0x3066, 0xAAC6},{0x3067, 0xAAC7},{0x3068, 0xAAC8},{0x3069, 0xAAC9},{0x306A, 0xAACA},{0x306B, 0xAACB},{0x306C, 0xAACC},
- {0x306D, 0xAACD},{0x306E, 0xAACE},{0x306F, 0xAACF},{0x3070, 0xAAD0},{0x3071, 0xAAD1},{0x3072, 0xAAD2},{0x3073, 0xAAD3},{0x3074, 0xAAD4},
- {0x3075, 0xAAD5},{0x3076, 0xAAD6},{0x3077, 0xAAD7},{0x3078, 0xAAD8},{0x3079, 0xAAD9},{0x307A, 0xAADA},{0x307B, 0xAADB},{0x307C, 0xAADC},
- {0x307D, 0xAADD},{0x307E, 0xAADE},{0x307F, 0xAADF},{0x3080, 0xAAE0},{0x3081, 0xAAE1},{0x3082, 0xAAE2},{0x3083, 0xAAE3},{0x3084, 0xAAE4},
- {0x3085, 0xAAE5},{0x3086, 0xAAE6},{0x3087, 0xAAE7},{0x3088, 0xAAE8},{0x3089, 0xAAE9},{0x308A, 0xAAEA},{0x308B, 0xAAEB},{0x308C, 0xAAEC},
- {0x308D, 0xAAED},{0x308E, 0xAAEE},{0x308F, 0xAAEF},{0x3090, 0xAAF0},{0x3091, 0xAAF1},{0x3092, 0xAAF2},{0x3093, 0xAAF3},{0x30A1, 0xABA1},
- {0x30A2, 0xABA2},{0x30A3, 0xABA3},{0x30A4, 0xABA4},{0x30A5, 0xABA5},{0x30A6, 0xABA6},{0x30A7, 0xABA7},{0x30A8, 0xABA8},{0x30A9, 0xABA9},
- {0x30AA, 0xABAA},{0x30AB, 0xABAB},{0x30AC, 0xABAC},{0x30AD, 0xABAD},{0x30AE, 0xABAE},{0x30AF, 0xABAF},{0x30B0, 0xABB0},{0x30B1, 0xABB1},
- {0x30B2, 0xABB2},{0x30B3, 0xABB3},{0x30B4, 0xABB4},{0x30B5, 0xABB5},{0x30B6, 0xABB6},{0x30B7, 0xABB7},{0x30B8, 0xABB8},{0x30B9, 0xABB9},
- {0x30BA, 0xABBA},{0x30BB, 0xABBB},{0x30BC, 0xABBC},{0x30BD, 0xABBD},{0x30BE, 0xABBE},{0x30BF, 0xABBF},{0x30C0, 0xABC0},{0x30C1, 0xABC1},
- {0x30C2, 0xABC2},{0x30C3, 0xABC3},{0x30C4, 0xABC4},{0x30C5, 0xABC5},{0x30C6, 0xABC6},{0x30C7, 0xABC7},{0x30C8, 0xABC8},{0x30C9, 0xABC9},
- {0x30CA, 0xABCA},{0x30CB, 0xABCB},{0x30CC, 0xABCC},{0x30CD, 0xABCD},{0x30CE, 0xABCE},{0x30CF, 0xABCF},{0x30D0, 0xABD0},{0x30D1, 0xABD1},
- {0x30D2, 0xABD2},{0x30D3, 0xABD3},{0x30D4, 0xABD4},{0x30D5, 0xABD5},{0x30D6, 0xABD6},{0x30D7, 0xABD7},{0x30D8, 0xABD8},{0x30D9, 0xABD9},
- {0x30DA, 0xABDA},{0x30DB, 0xABDB},{0x30DC, 0xABDC},{0x30DD, 0xABDD},{0x30DE, 0xABDE},{0x30DF, 0xABDF},{0x30E0, 0xABE0},{0x30E1, 0xABE1},
- {0x30E2, 0xABE2},{0x30E3, 0xABE3},{0x30E4, 0xABE4},{0x30E5, 0xABE5},{0x30E6, 0xABE6},{0x30E7, 0xABE7},{0x30E8, 0xABE8},{0x30E9, 0xABE9},
- {0x30EA, 0xABEA},{0x30EB, 0xABEB},{0x30EC, 0xABEC},{0x30ED, 0xABED},{0x30EE, 0xABEE},{0x30EF, 0xABEF},{0x30F0, 0xABF0},{0x30F1, 0xABF1},
- {0x30F2, 0xABF2},{0x30F3, 0xABF3},{0x30F4, 0xABF4},{0x30F5, 0xABF5},{0x30F6, 0xABF6},{0x3131, 0xA4A1},{0x3132, 0xA4A2},{0x3133, 0xA4A3},
- {0x3134, 0xA4A4},{0x3135, 0xA4A5},{0x3136, 0xA4A6},{0x3137, 0xA4A7},{0x3138, 0xA4A8},{0x3139, 0xA4A9},{0x313A, 0xA4AA},{0x313B, 0xA4AB},
- {0x313C, 0xA4AC},{0x313D, 0xA4AD},{0x313E, 0xA4AE},{0x313F, 0xA4AF},{0x3140, 0xA4B0},{0x3141, 0xA4B1},{0x3142, 0xA4B2},{0x3143, 0xA4B3},
- {0x3144, 0xA4B4},{0x3145, 0xA4B5},{0x3146, 0xA4B6},{0x3147, 0xA4B7},{0x3148, 0xA4B8},{0x3149, 0xA4B9},{0x314A, 0xA4BA},{0x314B, 0xA4BB},
- {0x314C, 0xA4BC},{0x314D, 0xA4BD},{0x314E, 0xA4BE},{0x314F, 0xA4BF},{0x3150, 0xA4C0},{0x3151, 0xA4C1},{0x3152, 0xA4C2},{0x3153, 0xA4C3},
- {0x3154, 0xA4C4},{0x3155, 0xA4C5},{0x3156, 0xA4C6},{0x3157, 0xA4C7},{0x3158, 0xA4C8},{0x3159, 0xA4C9},{0x315A, 0xA4CA},{0x315B, 0xA4CB},
- {0x315C, 0xA4CC},{0x315D, 0xA4CD},{0x315E, 0xA4CE},{0x315F, 0xA4CF},{0x3160, 0xA4D0},{0x3161, 0xA4D1},{0x3162, 0xA4D2},{0x3163, 0xA4D3},
- {0x3164, 0xA4D4},{0x3165, 0xA4D5},{0x3166, 0xA4D6},{0x3167, 0xA4D7},{0x3168, 0xA4D8},{0x3169, 0xA4D9},{0x316A, 0xA4DA},{0x316B, 0xA4DB},
- {0x316C, 0xA4DC},{0x316D, 0xA4DD},{0x316E, 0xA4DE},{0x316F, 0xA4DF},{0x3170, 0xA4E0},{0x3171, 0xA4E1},{0x3172, 0xA4E2},{0x3173, 0xA4E3},
- {0x3174, 0xA4E4},{0x3175, 0xA4E5},{0x3176, 0xA4E6},{0x3177, 0xA4E7},{0x3178, 0xA4E8},{0x3179, 0xA4E9},{0x317A, 0xA4EA},{0x317B, 0xA4EB},
- {0x317C, 0xA4EC},{0x317D, 0xA4ED},{0x317E, 0xA4EE},{0x317F, 0xA4EF},{0x3180, 0xA4F0},{0x3181, 0xA4F1},{0x3182, 0xA4F2},{0x3183, 0xA4F3},
- {0x3184, 0xA4F4},{0x3185, 0xA4F5},{0x3186, 0xA4F6},{0x3187, 0xA4F7},{0x3188, 0xA4F8},{0x3189, 0xA4F9},{0x318A, 0xA4FA},{0x318B, 0xA4FB},
- {0x318C, 0xA4FC},{0x318D, 0xA4FD},{0x318E, 0xA4FE},{0x3200, 0xA9B1},{0x3201, 0xA9B2},{0x3202, 0xA9B3},{0x3203, 0xA9B4},{0x3204, 0xA9B5},
- {0x3205, 0xA9B6},{0x3206, 0xA9B7},{0x3207, 0xA9B8},{0x3208, 0xA9B9},{0x3209, 0xA9BA},{0x320A, 0xA9BB},{0x320B, 0xA9BC},{0x320C, 0xA9BD},
- {0x320D, 0xA9BE},{0x320E, 0xA9BF},{0x320F, 0xA9C0},{0x3210, 0xA9C1},{0x3211, 0xA9C2},{0x3212, 0xA9C3},{0x3213, 0xA9C4},{0x3214, 0xA9C5},
- {0x3215, 0xA9C6},{0x3216, 0xA9C7},{0x3217, 0xA9C8},{0x3218, 0xA9C9},{0x3219, 0xA9CA},{0x321A, 0xA9CB},{0x321B, 0xA9CC},{0x321C, 0xA2DF},
- {0x3260, 0xA8B1},{0x3261, 0xA8B2},{0x3262, 0xA8B3},{0x3263, 0xA8B4},{0x3264, 0xA8B5},{0x3265, 0xA8B6},{0x3266, 0xA8B7},{0x3267, 0xA8B8},
- {0x3268, 0xA8B9},{0x3269, 0xA8BA},{0x326A, 0xA8BB},{0x326B, 0xA8BC},{0x326C, 0xA8BD},{0x326D, 0xA8BE},{0x326E, 0xA8BF},{0x326F, 0xA8C0},
- {0x3270, 0xA8C1},{0x3271, 0xA8C2},{0x3272, 0xA8C3},{0x3273, 0xA8C4},{0x3274, 0xA8C5},{0x3275, 0xA8C6},{0x3276, 0xA8C7},{0x3277, 0xA8C8},
- {0x3278, 0xA8C9},{0x3279, 0xA8CA},{0x327A, 0xA8CB},{0x327B, 0xA8CC},{0x327F, 0xA2DE},{0x3380, 0xA7C9},{0x3381, 0xA7CA},{0x3382, 0xA7CB},
- {0x3383, 0xA7CC},{0x3384, 0xA7CD},{0x3388, 0xA7BA},{0x3389, 0xA7BB},{0x338A, 0xA7DC},{0x338B, 0xA7DD},{0x338C, 0xA7DE},{0x338D, 0xA7B6},
- {0x338E, 0xA7B7},{0x338F, 0xA7B8},{0x3390, 0xA7D4},{0x3391, 0xA7D5},{0x3392, 0xA7D6},{0x3393, 0xA7D7},{0x3394, 0xA7D8},{0x3395, 0xA7A1},
- {0x3396, 0xA7A2},{0x3397, 0xA7A3},{0x3398, 0xA7A5},{0x3399, 0xA7AB},{0x339A, 0xA7AC},{0x339B, 0xA7AD},{0x339C, 0xA7AE},{0x339D, 0xA7AF},
- {0x339E, 0xA7B0},{0x339F, 0xA7B1},{0x33A0, 0xA7B2},{0x33A1, 0xA7B3},{0x33A2, 0xA7B4},{0x33A3, 0xA7A7},{0x33A4, 0xA7A8},{0x33A5, 0xA7A9},
- {0x33A6, 0xA7AA},{0x33A7, 0xA7BD},{0x33A8, 0xA7BE},{0x33A9, 0xA7E5},{0x33AA, 0xA7E6},{0x33AB, 0xA7E7},{0x33AC, 0xA7E8},{0x33AD, 0xA7E1},
- {0x33AE, 0xA7E2},{0x33AF, 0xA7E3},{0x33B0, 0xA7BF},{0x33B1, 0xA7C0},{0x33B2, 0xA7C1},{0x33B3, 0xA7C2},{0x33B4, 0xA7C3},{0x33B5, 0xA7C4},
- {0x33B6, 0xA7C5},{0x33B7, 0xA7C6},{0x33B8, 0xA7C7},{0x33B9, 0xA7C8},{0x33BA, 0xA7CE},{0x33BB, 0xA7CF},{0x33BC, 0xA7D0},{0x33BD, 0xA7D1},
- {0x33BE, 0xA7D2},{0x33BF, 0xA7D3},{0x33C0, 0xA7DA},{0x33C1, 0xA7DB},{0x33C2, 0xA2E3},{0x33C3, 0xA7EC},{0x33C4, 0xA7A6},{0x33C5, 0xA7E0},
- {0x33C6, 0xA7EF},{0x33C7, 0xA2E1},{0x33C8, 0xA7BC},{0x33C9, 0xA7ED},{0x33CA, 0xA7B5},{0x33CF, 0xA7B9},{0x33D0, 0xA7EA},{0x33D3, 0xA7EB},
- {0x33D6, 0xA7DF},{0x33D8, 0xA2E4},{0x33DB, 0xA7E4},{0x33DC, 0xA7EE},{0x33DD, 0xA7E9},{0x4E00, 0xECE9},{0x4E01, 0xEFCB},{0x4E03, 0xF6D2},
- {0x4E07, 0xD8B2},{0x4E08, 0xEDDB},{0x4E09, 0xDFB2},{0x4E0A, 0xDFBE},{0x4E0B, 0xF9BB},{0x4E0D, 0xDCF4},{0x4E11, 0xF5E4},{0x4E14, 0xF3A6},
- {0x4E15, 0xDDE0},{0x4E16, 0xE1A6},{0x4E18, 0xCEF8},{0x4E19, 0xDCB0},{0x4E1E, 0xE3AA},{0x4E2D, 0xF1E9},{0x4E32, 0xCDFA},{0x4E38, 0xFCAF},
- {0x4E39, 0xD3A1},{0x4E3B, 0xF1AB},{0x4E42, 0xE7D1},{0x4E43, 0xD2AC},{0x4E45, 0xCEF9},{0x4E4B, 0xF1FD},{0x4E4D, 0xDEBF},{0x4E4E, 0xFBBA},
- {0x4E4F, 0xF9B9},{0x4E56, 0xCED2},{0x4E58, 0xE3AB},{0x4E59, 0xEBE0},{0x4E5D, 0xCEFA},{0x4E5E, 0xCBF7},{0x4E5F, 0xE5A5},{0x4E6B, 0xCAE1},
- {0x4E6D, 0xD4CC},{0x4E73, 0xEAE1},{0x4E76, 0xDCE3},{0x4E77, 0xDFAD},{0x4E7E, 0xCBEB},{0x4E82, 0xD5AF},{0x4E86, 0xD6F5},{0x4E88, 0xE5F8},
- {0x4E8B, 0xDEC0},{0x4E8C, 0xECA3},{0x4E8E, 0xE9CD},{0x4E90, 0xEAA7},{0x4E91, 0xE9F6},{0x4E92, 0xFBBB},{0x4E94, 0xE7E9},{0x4E95, 0xEFCC},
- {0x4E98, 0xD0E6},{0x4E9B, 0xDEC1},{0x4E9E, 0xE4AC},{0x4EA1, 0xD8CC},{0x4EA2, 0xF9F1},{0x4EA4, 0xCEDF},{0x4EA5, 0xFAA4},{0x4EA6, 0xE6B2},
- {0x4EA8, 0xFAFB},{0x4EAB, 0xFABD},{0x4EAC, 0xCCC8},{0x4EAD, 0xEFCD},{0x4EAE, 0xD5D5},{0x4EB6, 0xD3A2},{0x4EBA, 0xECD1},{0x4EC0, 0xE4A7},
- {0x4EC1, 0xECD2},{0x4EC4, 0xF6B1},{0x4EC7, 0xCEFB},{0x4ECA, 0xD0D1},{0x4ECB, 0xCBBF},{0x4ECD, 0xEDA4},{0x4ED4, 0xEDA8},{0x4ED5, 0xDEC2},
- {0x4ED6, 0xF6E2},{0x4ED7, 0xEDDC},{0x4ED8, 0xDCF5},{0x4ED9, 0xE0B9},{0x4EDD, 0xD4CE},{0x4EDF, 0xF4B5},{0x4EE3, 0xD3DB},{0x4EE4, 0xD6B5},
- {0x4EE5, 0xECA4},{0x4EF0, 0xE4E6},{0x4EF2, 0xF1EA},{0x4EF6, 0xCBEC},{0x4EF7, 0xCBC0},{0x4EFB, 0xECF2},{0x4F01, 0xD0EA},{0x4F09, 0xF9F2},
- {0x4F0A, 0xECA5},{0x4F0B, 0xD0DF},{0x4F0D, 0xE7EA},{0x4F0E, 0xD0EB},{0x4F0F, 0xDCD1},{0x4F10, 0xDBE9},{0x4F11, 0xFDCC},{0x4F2F, 0xDBD7},
- {0x4F34, 0xDAE1},{0x4F36, 0xD6B6},{0x4F38, 0xE3DF},{0x4F3A, 0xDEC3},{0x4F3C, 0xDEC4},{0x4F3D, 0xCAA1},{0x4F43, 0xEEEC},{0x4F46, 0xD3A3},
- {0x4F47, 0xEEB7},{0x4F48, 0xF8CF},{0x4F4D, 0xEAC8},{0x4F4E, 0xEEB8},{0x4F4F, 0xF1AC},{0x4F50, 0xF1A5},{0x4F51, 0xE9CE},{0x4F55, 0xF9BC},
- {0x4F59, 0xE5F9},{0x4F5A, 0xECEA},{0x4F5B, 0xDDD6},{0x4F5C, 0xEDC2},{0x4F69, 0xF8A5},{0x4F6F, 0xE5BA},{0x4F70, 0xDBD8},{0x4F73, 0xCAA2},
- {0x4F76, 0xD1CD},{0x4F7A, 0xEEED},{0x4F7E, 0xECEB},{0x4F7F, 0xDEC5},{0x4F81, 0xE3E0},{0x4F83, 0xCAC9},{0x4F84, 0xF2E9},{0x4F86, 0xD5CE},
- {0x4F88, 0xF6B6},{0x4F8A, 0xCEC2},{0x4F8B, 0xD6C7},{0x4F8D, 0xE3B4},{0x4F8F, 0xF1AD},{0x4F91, 0xEAE2},{0x4F96, 0xD7C2},{0x4F98, 0xF3A7},
- {0x4F9B, 0xCDEA},{0x4F9D, 0xEBEE},{0x4FAE, 0xD9B2},{0x4FAF, 0xFDA5},{0x4FB5, 0xF6D5},{0x4FB6, 0xD5E2},{0x4FBF, 0xF8B5},{0x4FC2, 0xCCF5},
- {0x4FC3, 0xF5B5},{0x4FC4, 0xE4AD},{0x4FC9, 0xE7EB},{0x4FCA, 0xF1D5},{0x4FCE, 0xF0BB},{0x4FD1, 0xE9B5},{0x4FD3, 0xCCC9},{0x4FD4, 0xFAD5},
- {0x4FD7, 0xE1D4},{0x4FDA, 0xD7D6},{0x4FDD, 0xDCC1},{0x4FDF, 0xDEC6},{0x4FE0, 0xFAEF},{0x4FE1, 0xE3E1},{0x4FEE, 0xE1F3},{0x4FEF, 0xDCF6},
- {0x4FF1, 0xCEFC},{0x4FF3, 0xDBC4},{0x4FF5, 0xF8F1},{0x4FF8, 0xDCE4},{0x4FFA, 0xE5EF},{0x5002, 0xDCB1},{0x5006, 0xD5D6},{0x5009, 0xF3DA},
- {0x500B, 0xCBC1},{0x500D, 0xDBC3},{0x5011, 0xD9FA},{0x5012, 0xD3EE},{0x5016, 0xFAB8},{0x5019, 0xFDA6},{0x501A, 0xEBEF},{0x501C, 0xF4A6},
- {0x501E, 0xCCCA},{0x501F, 0xF3A8},{0x5021, 0xF3DB},{0x5023, 0xDBA7},{0x5024, 0xF6B7},{0x5026, 0xCFE6},{0x5027, 0xF0F2},{0x5028, 0xCBDA},
- {0x502A, 0xE7D2},{0x502B, 0xD7C3},{0x502C, 0xF6F0},{0x502D, 0xE8DE},{0x503B, 0xE5A6},{0x5043, 0xE5E7},{0x5047, 0xCAA3},{0x5048, 0xCCA7},
- {0x5049, 0xEAC9},{0x504F, 0xF8B6},{0x5055, 0xFAA5},{0x505A, 0xF1AE},{0x505C, 0xEFCE},{0x5065, 0xCBED},{0x5074, 0xF6B0},{0x5075, 0xEFCF},
- {0x5076, 0xE9CF},{0x5078, 0xF7DE},{0x5080, 0xCED3},{0x5085, 0xDCF7},{0x508D, 0xDBA8},{0x5091, 0xCBF8},{0x5098, 0xDFA1},{0x5099, 0xDDE1},
- {0x50AC, 0xF5CA},{0x50AD, 0xE9B6},{0x50B2, 0xE7EC},{0x50B3, 0xEEEE},{0x50B5, 0xF3F0},{0x50B7, 0xDFBF},{0x50BE, 0xCCCB},{0x50C5, 0xD0C1},
- {0x50C9, 0xF4D2},{0x50CA, 0xE0BA},{0x50CF, 0xDFC0},{0x50D1, 0xCEE0},{0x50D5, 0xDCD2},{0x50D6, 0xFDEA},{0x50DA, 0xD6F6},{0x50DE, 0xEACA},
- {0x50E5, 0xE8E9},{0x50E7, 0xE3AC},{0x50ED, 0xF3D0},{0x50F9, 0xCAA4},{0x50FB, 0xDBF8},{0x50FF, 0xDEC7},{0x5100, 0xEBF0},{0x5101, 0xF1D6},
- {0x5104, 0xE5E2},{0x5106, 0xCCCC},{0x5109, 0xCBFB},{0x5112, 0xEAE3},{0x511F, 0xDFC1},{0x5121, 0xD6ED},{0x512A, 0xE9D0},{0x5132, 0xEEB9},
- {0x5137, 0xD5E3},{0x513A, 0xD1D3},{0x513C, 0xE5F0},{0x5140, 0xE8B4},{0x5141, 0xEBC3},{0x5143, 0xEAAA},{0x5144, 0xFAFC},{0x5145, 0xF5F6},
- {0x5146, 0xF0BC},{0x5147, 0xFDD4},{0x5148, 0xE0BB},{0x5149, 0xCEC3},{0x514B, 0xD0BA},{0x514C, 0xF7BA},{0x514D, 0xD8F3},{0x514E, 0xF7CD},
- {0x5152, 0xE4AE},{0x515C, 0xD4DF},{0x5162, 0xD0E7},{0x5165, 0xECFD},{0x5167, 0xD2AE},{0x5168, 0xEEEF},{0x5169, 0xD5D7},{0x516A, 0xEAE4},
- {0x516B, 0xF8A2},{0x516C, 0xCDEB},{0x516D, 0xD7BF},{0x516E, 0xFBB1},{0x5171, 0xCDEC},{0x5175, 0xDCB2},{0x5176, 0xD0EC},{0x5177, 0xCEFD},
- {0x5178, 0xEEF0},{0x517C, 0xCCC2},{0x5180, 0xD0ED},{0x5186, 0xE5F7},{0x518A, 0xF3FC},{0x518D, 0xEEA2},{0x5192, 0xD9B3},{0x5195, 0xD8F4},
- {0x5197, 0xE9B7},{0x51A0, 0xCEAE},{0x51A5, 0xD9A2},{0x51AA, 0xD8F1},{0x51AC, 0xD4CF},{0x51B6, 0xE5A7},{0x51B7, 0xD5D2},{0x51BD, 0xD6A9},
- {0x51C4, 0xF4A2},{0x51C6, 0xF1D7},{0x51C9, 0xD5D8},{0x51CB, 0xF0BD},{0x51CC, 0xD7D0},{0x51CD, 0xD4D0},{0x51DC, 0xD7CF},{0x51DD, 0xEBEA},
- {0x51DE, 0xFDEB},{0x51E1, 0xDBED},{0x51F0, 0xFCC5},{0x51F1, 0xCBC2},{0x51F6, 0xFDD5},{0x51F8, 0xF4C8},{0x51F9, 0xE8EA},{0x51FA, 0xF5F3},
- {0x51FD, 0xF9DE},{0x5200, 0xD3EF},{0x5203, 0xECD3},{0x5206, 0xDDC2},{0x5207, 0xEFB7},{0x5208, 0xE7D4},{0x520A, 0xCACA},{0x520E, 0xD9FB},
- {0x5211, 0xFAFD},{0x5217, 0xD6AA},{0x521D, 0xF4F8},{0x5224, 0xF7F7},{0x5225, 0xDCAC},{0x5229, 0xD7D7},{0x522A, 0xDFA2},{0x522E, 0xCEBE},
- {0x5230, 0xD3F0},{0x5236, 0xF0A4},{0x5237, 0xE1EC},{0x5238, 0xCFE7},{0x5239, 0xF3CB},{0x523A, 0xEDA9},{0x523B, 0xCABE},{0x5243, 0xF4EF},
- {0x5247, 0xF6CE},{0x524A, 0xDEFB},{0x524B, 0xD0BB},{0x524C, 0xD5B7},{0x524D, 0xEEF1},{0x5254, 0xF4A8},{0x5256, 0xDCF8},{0x525B, 0xCBA7},
- {0x525D, 0xDACE},{0x5261, 0xE0E6},{0x5269, 0xEDA5},{0x526A, 0xEEF2},{0x526F, 0xDCF9},{0x5272, 0xF9DC},{0x5275, 0xF3DC},{0x527D, 0xF8F2},
- {0x527F, 0xF4F9},{0x5283, 0xFCF1},{0x5287, 0xD0BC},{0x5288, 0xDBF9},{0x5289, 0xD7B1},{0x528D, 0xCBFC},{0x5291, 0xF0A5},{0x5292, 0xCBFD},
- {0x529B, 0xD5F4},{0x529F, 0xCDED},{0x52A0, 0xCAA5},{0x52A3, 0xD6AB},{0x52A4, 0xD0C2},{0x52A9, 0xF0BE},{0x52AA, 0xD2BD},{0x52AB, 0xCCA4},
- {0x52BE, 0xFAB6},{0x52C1, 0xCCCD},{0x52C3, 0xDAFA},{0x52C5, 0xF6CF},{0x52C7, 0xE9B8},{0x52C9, 0xD8F5},{0x52CD, 0xCCCE},{0x52D2, 0xD7CD},
- {0x52D5, 0xD4D1},{0x52D6, 0xE9ED},{0x52D8, 0xCAEB},{0x52D9, 0xD9E2},{0x52DB, 0xFDB2},{0x52DD, 0xE3AD},{0x52DE, 0xD6CC},{0x52DF, 0xD9B4},
- {0x52E2, 0xE1A7},{0x52E3, 0xEED3},{0x52E4, 0xD0C3},{0x52F3, 0xFDB3},{0x52F5, 0xD5E4},{0x52F8, 0xCFE8},{0x52FA, 0xEDC3},{0x52FB, 0xD0B2},
- {0x52FE, 0xCEFE},{0x52FF, 0xDAA8},{0x5305, 0xF8D0},{0x5308, 0xFDD6},{0x530D, 0xF8D1},{0x530F, 0xF8D2},{0x5310, 0xDCD3},{0x5315, 0xDDE2},
- {0x5316, 0xFBF9},{0x5317, 0xDDC1},{0x5319, 0xE3B5},{0x5320, 0xEDDD},{0x5321, 0xCEC4},{0x5323, 0xCBA1},{0x532A, 0xDDE3},{0x532F, 0xFCDD},
- {0x5339, 0xF9AF},{0x533F, 0xD2FB},{0x5340, 0xCFA1},{0x5341, 0xE4A8},{0x5343, 0xF4B6},{0x5344, 0xECFE},{0x5347, 0xE3AE},{0x5348, 0xE7ED},
- {0x5349, 0xFDC1},{0x534A, 0xDAE2},{0x534D, 0xD8B3},{0x5351, 0xDDE4},{0x5352, 0xF0EF},{0x5353, 0xF6F1},{0x5354, 0xFAF0},{0x5357, 0xD1F5},
- {0x535A, 0xDACF},{0x535C, 0xDCD4},{0x535E, 0xDCA6},{0x5360, 0xEFBF},{0x5366, 0xCECF},{0x5368, 0xE0D9},{0x536F, 0xD9D6},{0x5370, 0xECD4},
- {0x5371, 0xEACB},{0x5374, 0xCABF},{0x5375, 0xD5B0},{0x5377, 0xCFE9},{0x537D, 0xF1ED},{0x537F, 0xCCCF},{0x5384, 0xE4F8},{0x5393, 0xE4ED},
- {0x5398, 0xD7D8},{0x539A, 0xFDA7},{0x539F, 0xEAAB},{0x53A0, 0xF6B2},{0x53A5, 0xCFF0},{0x53A6, 0xF9BD},{0x53AD, 0xE6F4},{0x53BB, 0xCBDB},
- {0x53C3, 0xF3D1},{0x53C8, 0xE9D1},{0x53C9, 0xF3A9},{0x53CA, 0xD0E0},{0x53CB, 0xE9D2},{0x53CD, 0xDAE3},{0x53D4, 0xE2D2},{0x53D6, 0xF6A2},
- {0x53D7, 0xE1F4},{0x53DB, 0xDAE4},{0x53E1, 0xE7D5},{0x53E2, 0xF5BF},{0x53E3, 0xCFA2},{0x53E4, 0xCDAF},{0x53E5, 0xCFA3},{0x53E9, 0xCDB0},
- {0x53EA, 0xF1FE},{0x53EB, 0xD0A3},{0x53EC, 0xE1AF},{0x53ED, 0xF8A3},{0x53EF, 0xCAA6},{0x53F0, 0xF7BB},{0x53F1, 0xF2EA},{0x53F2, 0xDEC8},
- {0x53F3, 0xE9D3},{0x53F8, 0xDEC9},{0x5403, 0xFDDE},{0x5404, 0xCAC0},{0x5408, 0xF9EA},{0x5409, 0xD1CE},{0x540A, 0xEED4},{0x540C, 0xD4D2},
- {0x540D, 0xD9A3},{0x540E, 0xFDA8},{0x540F, 0xD7D9},{0x5410, 0xF7CE},{0x5411, 0xFABE},{0x541B, 0xCFD6},{0x541D, 0xD7F0},{0x541F, 0xEBE1},
- {0x5420, 0xF8C5},{0x5426, 0xDCFA},{0x5429, 0xDDC3},{0x542B, 0xF9DF},{0x5433, 0xE7EF},{0x5438, 0xFDE5},{0x5439, 0xF6A3},{0x543B, 0xD9FC},
- {0x543C, 0xFDA9},{0x543E, 0xE7EE},{0x5442, 0xD5E5},{0x5448, 0xEFD0},{0x544A, 0xCDB1},{0x5451, 0xF7A2},{0x5468, 0xF1B2},{0x546A, 0xF1B1},
- {0x5471, 0xCDB2},{0x5473, 0xDAAB},{0x5475, 0xCAA7},{0x547B, 0xE3E2},{0x547C, 0xFBBC},{0x547D, 0xD9A4},{0x5480, 0xEEBA},{0x5486, 0xF8D3},
- {0x548C, 0xFBFA},{0x548E, 0xCFA4},{0x5490, 0xDCFB},{0x54A4, 0xF6E3},{0x54A8, 0xEDAA},{0x54AB, 0xF2A1},{0x54AC, 0xCEE1},{0x54B3, 0xFAA6},
- {0x54B8, 0xF9E0},{0x54BD, 0xECD6},{0x54C0, 0xE4EE},{0x54C1, 0xF9A1},{0x54C4, 0xFBEF},{0x54C8, 0xF9EB},{0x54C9, 0xEEA3},{0x54E1, 0xEAAC},
- {0x54E5, 0xCAA8},{0x54E8, 0xF4FA},{0x54ED, 0xCDD6},{0x54EE, 0xFCF6},{0x54F2, 0xF4C9},{0x54FA, 0xF8D4},{0x5504, 0xF8A6},{0x5506, 0xDECA},
- {0x5507, 0xF2C6},{0x550E, 0xD7DA},{0x5510, 0xD3D0},{0x551C, 0xD8C5},{0x552F, 0xEAE6},{0x5531, 0xF3DD},{0x5535, 0xE4DA},{0x553E, 0xF6E4},
- {0x5544, 0xF6F2},{0x5546, 0xDFC2},{0x554F, 0xD9FD},{0x5553, 0xCCF6},{0x5556, 0xD3BA},{0x555E, 0xE4AF},{0x5563, 0xF9E1},{0x557C, 0xF0A6},
- {0x5580, 0xCBD3},{0x5584, 0xE0BC},{0x5586, 0xF4CA},{0x5587, 0xD4FA},{0x5589, 0xFDAA},{0x558A, 0xF9E2},{0x5598, 0xF4B7},{0x5599, 0xFDC2},
- {0x559A, 0xFCB0},{0x559C, 0xFDEC},{0x559D, 0xCAE2},{0x55A7, 0xFDBD},{0x55A9, 0xEAE7},{0x55AA, 0xDFC3},{0x55AB, 0xD1D2},{0x55AC, 0xCEE2},
- {0x55AE, 0xD3A4},{0x55C5, 0xFDAB},{0x55C7, 0xDFE0},{0x55D4, 0xF2C7},{0x55DA, 0xE7F0},{0x55DC, 0xD0EE},{0x55DF, 0xF3AA},{0x55E3, 0xDECB},
- {0x55E4, 0xF6B8},{0x55FD, 0xE1F5},{0x55FE, 0xF1B3},{0x5606, 0xF7A3},{0x5609, 0xCAA9},{0x5614, 0xCFA5},{0x5617, 0xDFC4},{0x562F, 0xE1B0},
- {0x5632, 0xF0BF},{0x5634, 0xF6A4},{0x5636, 0xE3B6},{0x5653, 0xFAC6},{0x5668, 0xD0EF},{0x566B, 0xFDED},{0x5674, 0xDDC4},{0x5686, 0xFCF7},
- {0x56A5, 0xE6BF},{0x56AC, 0xDEAD},{0x56AE, 0xFABF},{0x56B4, 0xE5F1},{0x56BC, 0xEDC4},{0x56CA, 0xD2A5},{0x56CD, 0xFDEE},{0x56D1, 0xF5B6},
- {0x56DA, 0xE1F6},{0x56DB, 0xDECC},{0x56DE, 0xFCDE},{0x56E0, 0xECD7},{0x56F0, 0xCDDD},{0x56F9, 0xD6B7},{0x56FA, 0xCDB3},{0x5703, 0xF8D5},
- {0x5704, 0xE5D8},{0x5708, 0xCFEA},{0x570B, 0xCFD0},{0x570D, 0xEACC},{0x5712, 0xEAAE},{0x5713, 0xEAAD},{0x5716, 0xD3F1},{0x5718, 0xD3A5},
- {0x571F, 0xF7CF},{0x5728, 0xEEA4},{0x572D, 0xD0A4},{0x5730, 0xF2A2},{0x573B, 0xD0F0},{0x5740, 0xF2A3},{0x5742, 0xF7F8},{0x5747, 0xD0B3},
- {0x574A, 0xDBA9},{0x574D, 0xD3BB},{0x574E, 0xCAEC},{0x5750, 0xF1A6},{0x5751, 0xCBD5},{0x5761, 0xF7E7},{0x5764, 0xCDDE},{0x5766, 0xF7A4},
- {0x576A, 0xF8C0},{0x576E, 0xD3DD},{0x5770, 0xCCD0},{0x5775, 0xCFA6},{0x577C, 0xF6F3},{0x5782, 0xE1F7},{0x5788, 0xD3DC},{0x578B, 0xFAFE},
- {0x5793, 0xFAA7},{0x57A0, 0xEBD9},{0x57A2, 0xCFA7},{0x57A3, 0xEAAF},{0x57C3, 0xE4EF},{0x57C7, 0xE9B9},{0x57C8, 0xF1D8},{0x57CB, 0xD8D8},
- {0x57CE, 0xE0F2},{0x57DF, 0xE6B4},{0x57E0, 0xDCFC},{0x57F0, 0xF3F1},{0x57F4, 0xE3D0},{0x57F7, 0xF2FB},{0x57F9, 0xDBC6},{0x57FA, 0xD0F1},
- {0x57FC, 0xD0F2},{0x5800, 0xCFDC},{0x5802, 0xD3D1},{0x5805, 0xCCB1},{0x5806, 0xF7D8},{0x5808, 0xCBA8},{0x5809, 0xEBBC},{0x580A, 0xE4BE},
- {0x581E, 0xF4DC},{0x5821, 0xDCC2},{0x5824, 0xF0A7},{0x5827, 0xE6C0},{0x582A, 0xCAED},{0x582F, 0xE8EB},{0x5830, 0xE5E8},{0x5831, 0xDCC3},
- {0x5834, 0xEDDE},{0x5835, 0xD3F2},{0x583A, 0xCCF7},{0x584A, 0xCED4},{0x584B, 0xE7AB},{0x584F, 0xCBC3},{0x5851, 0xE1B1},{0x5854, 0xF7B2},
- {0x5857, 0xD3F3},{0x5858, 0xD3D2},{0x585A, 0xF5C0},{0x585E, 0xDFDD},{0x5861, 0xEEF3},{0x5862, 0xE7F1},{0x5864, 0xFDB4},{0x5875, 0xF2C8},
- {0x5879, 0xF3D2},{0x587C, 0xEEF4},{0x587E, 0xE2D3},{0x5883, 0xCCD1},{0x5885, 0xDFEA},{0x5889, 0xE9BA},{0x5893, 0xD9D7},{0x589C, 0xF5CD},
- {0x589E, 0xF1F2},{0x589F, 0xFAC7},{0x58A8, 0xD9F8},{0x58A9, 0xD4C2},{0x58AE, 0xF6E5},{0x58B3, 0xDDC5},{0x58BA, 0xE7F2},{0x58BB, 0xEDDF},
- {0x58BE, 0xCACB},{0x58C1, 0xDBFA},{0x58C5, 0xE8B5},{0x58C7, 0xD3A6},{0x58CE, 0xFDB5},{0x58D1, 0xF9C9},{0x58D3, 0xE4E2},{0x58D5, 0xFBBD},
- {0x58D8, 0xD7A4},{0x58D9, 0xCEC5},{0x58DE, 0xCED5},{0x58DF, 0xD6E6},{0x58E4, 0xE5BD},{0x58EB, 0xDECD},{0x58EC, 0xECF3},{0x58EF, 0xEDE0},
- {0x58F9, 0xECEC},{0x58FA, 0xFBBE},{0x58FB, 0xDFEB},{0x58FD, 0xE1F8},{0x590F, 0xF9BE},{0x5914, 0xD0F3},{0x5915, 0xE0AA},{0x5916, 0xE8E2},
- {0x5919, 0xE2D4},{0x591A, 0xD2FD},{0x591C, 0xE5A8},{0x5922, 0xD9D3},{0x5927, 0xD3DE},{0x5929, 0xF4B8},{0x592A, 0xF7BC},{0x592B, 0xDCFD},
- {0x592D, 0xE8EC},{0x592E, 0xE4E7},{0x5931, 0xE3F7},{0x5937, 0xECA8},{0x593E, 0xFAF1},{0x5944, 0xE5F2},{0x5947, 0xD0F4},{0x5948, 0xD2AF},
- {0x5949, 0xDCE5},{0x594E, 0xD0A5},{0x594F, 0xF1B4},{0x5950, 0xFCB1},{0x5951, 0xCCF8},{0x5954, 0xDDC6},{0x5955, 0xFAD1},{0x5957, 0xF7DF},
- {0x595A, 0xFAA8},{0x5960, 0xEEF5},{0x5962, 0xDECE},{0x5967, 0xE7F3},{0x596A, 0xF7AC},{0x596B, 0xEBC4},{0x596C, 0xEDE1},{0x596D, 0xE0AB},
- {0x596E, 0xDDC7},{0x5973, 0xD2B3},{0x5974, 0xD2BF},{0x5978, 0xCACC},{0x597D, 0xFBBF},{0x5982, 0xE5FD},{0x5983, 0xDDE5},{0x5984, 0xD8CD},
- {0x598A, 0xECF4},{0x5993, 0xD0F5},{0x5996, 0xE8ED},{0x5997, 0xD0D2},{0x5999, 0xD9D8},{0x59A5, 0xF6E6},{0x59A8, 0xDBAA},{0x59AC, 0xF7E0},
- {0x59B9, 0xD8D9},{0x59BB, 0xF4A3},{0x59BE, 0xF4DD},{0x59C3, 0xEFD1},{0x59C6, 0xD9B5},{0x59C9, 0xEDAB},{0x59CB, 0xE3B7},{0x59D0, 0xEEBB},
- {0x59D1, 0xCDB4},{0x59D3, 0xE0F3},{0x59D4, 0xEACD},{0x59D9, 0xECF5},{0x59DA, 0xE8EE},{0x59DC, 0xCBA9},{0x59DD, 0xF1AF},{0x59E6, 0xCACD},
- {0x59E8, 0xECA9},{0x59EA, 0xF2EB},{0x59EC, 0xFDEF},{0x59EE, 0xF9F3},{0x59F8, 0xE6C1},{0x59FB, 0xECD8},{0x59FF, 0xEDAC},{0x5A01, 0xEACE},
- {0x5A03, 0xE8DF},{0x5A11, 0xDECF},{0x5A18, 0xD2A6},{0x5A1B, 0xE7F4},{0x5A1C, 0xD1D6},{0x5A1F, 0xE6C2},{0x5A20, 0xE3E3},{0x5A25, 0xE4B0},
- {0x5A29, 0xD8B4},{0x5A36, 0xF6A5},{0x5A3C, 0xF3DE},{0x5A41, 0xD7A5},{0x5A46, 0xF7E8},{0x5A49, 0xE8C6},{0x5A5A, 0xFBE6},{0x5A62, 0xDDE6},
- {0x5A66, 0xDCFE},{0x5A92, 0xD8DA},{0x5A9A, 0xDAAC},{0x5A9B, 0xEAB0},{0x5AA4, 0xE3B8},{0x5AC1, 0xCAAA},{0x5AC2, 0xE1F9},{0x5AC4, 0xEAB1},
- {0x5AC9, 0xF2EC},{0x5ACC, 0xFAEE},{0x5AE1, 0xEED5},{0x5AE6, 0xF9F4},{0x5AE9, 0xD2EC},{0x5B05, 0xFBFB},{0x5B09, 0xFDF0},{0x5B0B, 0xE0BD},
- {0x5B0C, 0xCEE3},{0x5B16, 0xF8C6},{0x5B2A, 0xDEAE},{0x5B40, 0xDFC5},{0x5B43, 0xE5BE},{0x5B50, 0xEDAD},{0x5B51, 0xFAEA},{0x5B54, 0xCDEE},
- {0x5B55, 0xEDA6},{0x5B57, 0xEDAE},{0x5B58, 0xF0ED},{0x5B5A, 0xDDA1},{0x5B5C, 0xEDAF},{0x5B5D, 0xFCF8},{0x5B5F, 0xD8EB},{0x5B63, 0xCCF9},
- {0x5B64, 0xCDB5},{0x5B69, 0xFAA9},{0x5B6B, 0xE1DD},{0x5B70, 0xE2D5},{0x5B71, 0xEDCF},{0x5B75, 0xDDA2},{0x5B78, 0xF9CA},{0x5B7A, 0xEAE8},
- {0x5B7C, 0xE5ED},{0x5B85, 0xD3EB},{0x5B87, 0xE9D4},{0x5B88, 0xE1FA},{0x5B89, 0xE4CC},{0x5B8B, 0xE1E4},{0x5B8C, 0xE8C7},{0x5B8F, 0xCEDB},
- {0x5B93, 0xDCD5},{0x5B95, 0xF7B5},{0x5B96, 0xFCF3},{0x5B97, 0xF0F3},{0x5B98, 0xCEAF},{0x5B99, 0xF1B5},{0x5B9A, 0xEFD2},{0x5B9B, 0xE8C8},
- {0x5B9C, 0xEBF1},{0x5BA2, 0xCBD4},{0x5BA3, 0xE0BE},{0x5BA4, 0xE3F8},{0x5BA5, 0xEAE9},{0x5BA6, 0xFCB2},{0x5BAC, 0xE0F4},{0x5BAE, 0xCFE0},
- {0x5BB0, 0xEEA5},{0x5BB3, 0xFAAA},{0x5BB4, 0xE6C3},{0x5BB5, 0xE1B2},{0x5BB6, 0xCAAB},{0x5BB8, 0xE3E4},{0x5BB9, 0xE9BB},{0x5BBF, 0xE2D6},
- {0x5BC0, 0xF3F2},{0x5BC2, 0xEED6},{0x5BC3, 0xEAB2},{0x5BC4, 0xD0F6},{0x5BC5, 0xECD9},{0x5BC6, 0xDACB},{0x5BC7, 0xCFA8},{0x5BCC, 0xDDA3},
- {0x5BD0, 0xD8DB},{0x5BD2, 0xF9CE},{0x5BD3, 0xE9D5},{0x5BD4, 0xE3D1},{0x5BD7, 0xD2BC},{0x5BDE, 0xD8AC},{0x5BDF, 0xF3CC},{0x5BE1, 0xCDFB},
- {0x5BE2, 0xF6D6},{0x5BE4, 0xE7F5},{0x5BE5, 0xE8EF},{0x5BE6, 0xE3F9},{0x5BE7, 0xD2BB},{0x5BE8, 0xF3F3},{0x5BE9, 0xE3FB},{0x5BEB, 0xDED0},
- {0x5BEC, 0xCEB0},{0x5BEE, 0xD6F7},{0x5BEF, 0xF1D9},{0x5BF5, 0xF5C1},{0x5BF6, 0xDCC4},{0x5BF8, 0xF5BB},{0x5BFA, 0xDED1},{0x5C01, 0xDCE6},
- {0x5C04, 0xDED2},{0x5C07, 0xEDE2},{0x5C08, 0xEEF6},{0x5C09, 0xEACF},{0x5C0A, 0xF0EE},{0x5C0B, 0xE3FC},{0x5C0D, 0xD3DF},{0x5C0E, 0xD3F4},
- {0x5C0F, 0xE1B3},{0x5C11, 0xE1B4},{0x5C16, 0xF4D3},{0x5C19, 0xDFC6},{0x5C24, 0xE9D6},{0x5C28, 0xDBAB},{0x5C31, 0xF6A6},{0x5C38, 0xE3B9},
- {0x5C39, 0xEBC5},{0x5C3A, 0xF4A9},{0x5C3B, 0xCDB6},{0x5C3C, 0xD2F9},{0x5C3E, 0xDAAD},{0x5C3F, 0xD2E3},{0x5C40, 0xCFD1},{0x5C45, 0xCBDC},
- {0x5C46, 0xCCFA},{0x5C48, 0xCFDD},{0x5C4B, 0xE8A9},{0x5C4D, 0xE3BB},{0x5C4E, 0xE3BA},{0x5C51, 0xE0DA},{0x5C55, 0xEEF7},{0x5C5B, 0xDCB3},
- {0x5C60, 0xD3F5},{0x5C62, 0xD7A6},{0x5C64, 0xF6B5},{0x5C65, 0xD7DB},{0x5C6C, 0xE1D5},{0x5C6F, 0xD4EA},{0x5C71, 0xDFA3},{0x5C79, 0xFDDF},
- {0x5C90, 0xD0F7},{0x5C91, 0xEDD4},{0x5CA1, 0xCBAA},{0x5CA9, 0xE4DB},{0x5CAB, 0xE1FB},{0x5CAC, 0xCBA2},{0x5CB1, 0xD3E0},{0x5CB3, 0xE4BF},
- {0x5CB5, 0xFBC0},{0x5CB7, 0xDABE},{0x5CB8, 0xE4CD},{0x5CBA, 0xD6B9},{0x5CBE, 0xEFC0},{0x5CC0, 0xE1FC},{0x5CD9, 0xF6B9},{0x5CE0, 0xDFC7},
- {0x5CE8, 0xE4B1},{0x5CEF, 0xDCE7},{0x5CF0, 0xDCE8},{0x5CF4, 0xFAD6},{0x5CF6, 0xD3F6},{0x5CFB, 0xF1DA},{0x5CFD, 0xFAF2},{0x5D07, 0xE2FD},
- {0x5D0D, 0xD5CF},{0x5D0E, 0xD0F8},{0x5D11, 0xCDDF},{0x5D14, 0xF5CB},{0x5D16, 0xE4F0},{0x5D17, 0xCBAB},{0x5D19, 0xD7C4},{0x5D27, 0xE2FE},
- {0x5D29, 0xDDDA},{0x5D4B, 0xDAAE},{0x5D4C, 0xCAEE},{0x5D50, 0xD5B9},{0x5D69, 0xE3A1},{0x5D6C, 0xE8E3},{0x5D6F, 0xF3AB},{0x5D87, 0xCFA9},
- {0x5D8B, 0xD3F7},{0x5D9D, 0xD4F1},{0x5DA0, 0xCEE4},{0x5DA2, 0xE8F2},{0x5DAA, 0xE5F5},{0x5DB8, 0xE7AE},{0x5DBA, 0xD6BA},{0x5DBC, 0xDFEC},
- {0x5DBD, 0xE4C0},{0x5DCD, 0xE8E4},{0x5DD2, 0xD8B5},{0x5DD6, 0xE4DC},{0x5DDD, 0xF4B9},{0x5DDE, 0xF1B6},{0x5DE1, 0xE2DE},{0x5DE2, 0xE1B5},
- {0x5DE5, 0xCDEF},{0x5DE6, 0xF1A7},{0x5DE7, 0xCEE5},{0x5DE8, 0xCBDD},{0x5DEB, 0xD9E3},{0x5DEE, 0xF3AC},{0x5DF1, 0xD0F9},{0x5DF2, 0xECAB},
- {0x5DF3, 0xDED3},{0x5DF4, 0xF7E9},{0x5DF7, 0xF9F5},{0x5DFD, 0xE1DE},{0x5DFE, 0xCBEE},{0x5E02, 0xE3BC},{0x5E03, 0xF8D6},{0x5E06, 0xDBEE},
- {0x5E0C, 0xFDF1},{0x5E11, 0xF7B6},{0x5E16, 0xF4DE},{0x5E19, 0xF2ED},{0x5E1B, 0xDBD9},{0x5E1D, 0xF0A8},{0x5E25, 0xE1FD},{0x5E2B, 0xDED4},
- {0x5E2D, 0xE0AC},{0x5E33, 0xEDE3},{0x5E36, 0xD3E1},{0x5E38, 0xDFC8},{0x5E3D, 0xD9B6},{0x5E3F, 0xFDAC},{0x5E40, 0xEFD3},{0x5E44, 0xE4C1},
- {0x5E45, 0xF8EB},{0x5E47, 0xDBAC},{0x5E4C, 0xFCC6},{0x5E55, 0xD8AD},{0x5E5F, 0xF6BA},{0x5E61, 0xDBDF},{0x5E62, 0xD3D3},{0x5E63, 0xF8C7},
- {0x5E72, 0xCACE},{0x5E73, 0xF8C1},{0x5E74, 0xD2B4},{0x5E77, 0xDCB4},{0x5E78, 0xFAB9},{0x5E79, 0xCACF},{0x5E7B, 0xFCB3},{0x5E7C, 0xEAEA},
- {0x5E7D, 0xEAEB},{0x5E7E, 0xD0FA},{0x5E84, 0xEDE4},{0x5E87, 0xDDE7},{0x5E8A, 0xDFC9},{0x5E8F, 0xDFED},{0x5E95, 0xEEBC},{0x5E97, 0xEFC1},
- {0x5E9A, 0xCCD2},{0x5E9C, 0xDDA4},{0x5EA0, 0xDFCA},{0x5EA6, 0xD3F8},{0x5EA7, 0xF1A8},{0x5EAB, 0xCDB7},{0x5EAD, 0xEFD4},{0x5EB5, 0xE4DD},
- {0x5EB6, 0xDFEE},{0x5EB7, 0xCBAC},{0x5EB8, 0xE9BC},{0x5EBE, 0xEAEC},{0x5EC2, 0xDFCB},{0x5EC8, 0xF9BF},{0x5EC9, 0xD6AF},{0x5ECA, 0xD5C6},
- {0x5ED0, 0xCFAA},{0x5ED3, 0xCEA9},{0x5ED6, 0xD6F8},{0x5EDA, 0xF1B7},{0x5EDB, 0xEEF8},{0x5EDF, 0xD9D9},{0x5EE0, 0xF3DF},{0x5EE2, 0xF8C8},
- {0x5EE3, 0xCEC6},{0x5EEC, 0xD5E6},{0x5EF3, 0xF4E6},{0x5EF6, 0xE6C5},{0x5EF7, 0xEFD5},{0x5EFA, 0xCBEF},{0x5EFB, 0xFCDF},{0x5F01, 0xDCA7},
- {0x5F04, 0xD6E7},{0x5F0A, 0xF8C9},{0x5F0F, 0xE3D2},{0x5F11, 0xE3BD},{0x5F13, 0xCFE1},{0x5F14, 0xF0C0},{0x5F15, 0xECDA},{0x5F17, 0xDDD7},
- {0x5F18, 0xFBF0},{0x5F1B, 0xECAC},{0x5F1F, 0xF0A9},{0x5F26, 0xFAD7},{0x5F27, 0xFBC1},{0x5F29, 0xD2C0},{0x5F31, 0xE5B0},{0x5F35, 0xEDE5},
- {0x5F3A, 0xCBAD},{0x5F3C, 0xF9B0},{0x5F48, 0xF7A5},{0x5F4A, 0xCBAE},{0x5F4C, 0xDAAF},{0x5F4E, 0xD8B6},{0x5F56, 0xD3A7},{0x5F57, 0xFBB2},
- {0x5F59, 0xFDC4},{0x5F5B, 0xECAD},{0x5F62, 0xFBA1},{0x5F66, 0xE5E9},{0x5F67, 0xE9EE},{0x5F69, 0xF3F4},{0x5F6A, 0xF8F3},{0x5F6B, 0xF0C1},
- {0x5F6C, 0xDEAF},{0x5F6D, 0xF8B0},{0x5F70, 0xF3E0},{0x5F71, 0xE7AF},{0x5F77, 0xDBAD},{0x5F79, 0xE6B5},{0x5F7C, 0xF9A8},{0x5F7F, 0xDDD8},
- {0x5F80, 0xE8D9},{0x5F81, 0xEFD6},{0x5F85, 0xD3E2},{0x5F87, 0xE2DF},{0x5F8A, 0xFCE0},{0x5F8B, 0xD7C8},{0x5F8C, 0xFDAD},{0x5F90, 0xDFEF},
- {0x5F91, 0xCCD3},{0x5F92, 0xD3F9},{0x5F97, 0xD4F0},{0x5F98, 0xDBC7},{0x5F99, 0xDED5},{0x5F9E, 0xF0F4},{0x5FA0, 0xD5D0},{0x5FA1, 0xE5D9},
- {0x5FA8, 0xFCC7},{0x5FA9, 0xDCD6},{0x5FAA, 0xE2E0},{0x5FAE, 0xDAB0},{0x5FB5, 0xF3A3},{0x5FB7, 0xD3EC},{0x5FB9, 0xF4CB},{0x5FBD, 0xFDC5},
- {0x5FC3, 0xE3FD},{0x5FC5, 0xF9B1},{0x5FCC, 0xD0FB},{0x5FCD, 0xECDB},{0x5FD6, 0xF5BC},{0x5FD7, 0xF2A4},{0x5FD8, 0xD8CE},{0x5FD9, 0xD8CF},
- {0x5FE0, 0xF5F7},{0x5FEB, 0xF6E1},{0x5FF5, 0xD2B7},{0x5FFD, 0xFBEC},{0x5FFF, 0xDDC8},{0x600F, 0xE4E8},{0x6012, 0xD2C1},{0x6016, 0xF8D7},
- {0x601C, 0xD6BB},{0x601D, 0xDED6},{0x6020, 0xF7BD},{0x6021, 0xECAE},{0x6025, 0xD0E1},{0x6027, 0xE0F5},{0x6028, 0xEAB3},{0x602A, 0xCED6},
- {0x602F, 0xCCA5},{0x6041, 0xECF6},{0x6042, 0xE2E1},{0x6043, 0xE3BE},{0x604D, 0xFCC8},{0x6050, 0xCDF0},{0x6052, 0xF9F6},{0x6055, 0xDFF0},
- {0x6059, 0xE5BF},{0x605D, 0xCEBF},{0x6062, 0xFCE1},{0x6063, 0xEDB0},{0x6064, 0xFDD1},{0x6065, 0xF6BB},{0x6068, 0xF9CF},{0x6069, 0xEBDA},
- {0x606A, 0xCAC1},{0x606C, 0xD2B8},{0x606D, 0xCDF1},{0x606F, 0xE3D3},{0x6070, 0xFDE6},{0x6085, 0xE6ED},{0x6089, 0xE3FA},{0x608C, 0xF0AA},
- {0x608D, 0xF9D0},{0x6094, 0xFCE2},{0x6096, 0xF8A7},{0x609A, 0xE1E5},{0x609B, 0xEEF9},{0x609F, 0xE7F6},{0x60A0, 0xEAED},{0x60A3, 0xFCB4},
- {0x60A4, 0xF5C2},{0x60A7, 0xD7DC},{0x60B0, 0xF0F5},{0x60B2, 0xDDE8},{0x60B3, 0xD3ED},{0x60B4, 0xF5FC},{0x60B6, 0xDABF},{0x60B8, 0xCCFB},
- {0x60BC, 0xD3FA},{0x60BD, 0xF4A4},{0x60C5, 0xEFD7},{0x60C7, 0xD4C3},{0x60D1, 0xFBE3},{0x60DA, 0xFBED},{0x60DC, 0xE0AD},{0x60DF, 0xEAEE},
- {0x60E0, 0xFBB3},{0x60E1, 0xE4C2},{0x60F0, 0xF6E7},{0x60F1, 0xD2DD},{0x60F3, 0xDFCC},{0x60F6, 0xFCC9},{0x60F9, 0xE5A9},{0x60FA, 0xE0F6},
- {0x60FB, 0xF6B3},{0x6101, 0xE1FE},{0x6106, 0xCBF0},{0x6108, 0xEAEF},{0x6109, 0xEAF0},{0x610D, 0xDAC0},{0x610E, 0xF8B4},{0x610F, 0xEBF2},
- {0x6115, 0xE4C3},{0x611A, 0xE9D7},{0x611B, 0xE4F1},{0x611F, 0xCAEF},{0x6127, 0xCED7},{0x6130, 0xFCCA},{0x6134, 0xF3E1},{0x6137, 0xCBC4},
- {0x613C, 0xE3E5},{0x613E, 0xCBC5},{0x613F, 0xEAB4},{0x6142, 0xE9BD},{0x6144, 0xD7C9},{0x6147, 0xEBDB},{0x6148, 0xEDB1},{0x614A, 0xCCC3},
- {0x614B, 0xF7BE},{0x614C, 0xFCCB},{0x6153, 0xF8F4},{0x6155, 0xD9B7},{0x6158, 0xF3D3},{0x6159, 0xF3D4},{0x615D, 0xF7E4},{0x615F, 0xF7D1},
- {0x6162, 0xD8B7},{0x6163, 0xCEB1},{0x6164, 0xCAC2},{0x6167, 0xFBB4},{0x6168, 0xCBC6},{0x616B, 0xF0F6},{0x616E, 0xD5E7},{0x6170, 0xEAD0},
- {0x6176, 0xCCD4},{0x6177, 0xCBAF},{0x617D, 0xF4AA},{0x617E, 0xE9AF},{0x6181, 0xF5C3},{0x6182, 0xE9D8},{0x618A, 0xDDE9},{0x618E, 0xF1F3},
- {0x6190, 0xD5FB},{0x6191, 0xDEBB},{0x6194, 0xF4FB},{0x6198, 0xFDF3},{0x6199, 0xFDF2},{0x619A, 0xF7A6},{0x61A4, 0xDDC9},{0x61A7, 0xD4D3},
- {0x61A9, 0xCCA8},{0x61AB, 0xDAC1},{0x61AC, 0xCCD5},{0x61AE, 0xD9E4},{0x61B2, 0xFACA},{0x61B6, 0xE5E3},{0x61BA, 0xD3BC},{0x61BE, 0xCAF0},
- {0x61C3, 0xD0C4},{0x61C7, 0xCAD0},{0x61C8, 0xFAAB},{0x61C9, 0xEBEB},{0x61CA, 0xE7F8},{0x61CB, 0xD9E5},{0x61E6, 0xD1D7},{0x61F2, 0xF3A4},
- {0x61F6, 0xD4FB},{0x61F7, 0xFCE3},{0x61F8, 0xFAD8},{0x61FA, 0xF3D5},{0x61FC, 0xCFAB},{0x61FF, 0xEBF3},{0x6200, 0xD5FC},{0x6207, 0xD3D4},
- {0x6208, 0xCDFC},{0x620A, 0xD9E6},{0x620C, 0xE2F9},{0x620D, 0xE2A1},{0x620E, 0xEBD4},{0x6210, 0xE0F7},{0x6211, 0xE4B2},{0x6212, 0xCCFC},
- {0x6216, 0xFBE4},{0x621A, 0xF4AB},{0x621F, 0xD0BD},{0x6221, 0xCAF1},{0x622A, 0xEFB8},{0x622E, 0xD7C0},{0x6230, 0xEEFA},{0x6231, 0xFDF4},
- {0x6234, 0xD3E3},{0x6236, 0xFBC2},{0x623E, 0xD5E8},{0x623F, 0xDBAE},{0x6240, 0xE1B6},{0x6241, 0xF8B7},{0x6247, 0xE0BF},{0x6248, 0xFBC3},
- {0x6249, 0xDDEA},{0x624B, 0xE2A2},{0x624D, 0xEEA6},{0x6253, 0xF6E8},{0x6258, 0xF6F5},{0x626E, 0xDDCA},{0x6271, 0xD0E2},{0x6276, 0xDDA6},
- {0x6279, 0xDDEB},{0x627C, 0xE4F9},{0x627F, 0xE3AF},{0x6280, 0xD0FC},{0x6284, 0xF4FC},{0x6289, 0xCCBC},{0x628A, 0xF7EA},{0x6291, 0xE5E4},
- {0x6292, 0xDFF1},{0x6295, 0xF7E1},{0x6297, 0xF9F7},{0x6298, 0xEFB9},{0x629B, 0xF8D8},{0x62AB, 0xF9A9},{0x62B1, 0xF8D9},{0x62B5, 0xEEBD},
- {0x62B9, 0xD8C6},{0x62BC, 0xE4E3},{0x62BD, 0xF5CE},{0x62C2, 0xDDD9},{0x62C7, 0xD9E7},{0x62C8, 0xD2B9},{0x62C9, 0xD5C3},{0x62CC, 0xDAE5},
- {0x62CD, 0xDAD0},{0x62CF, 0xD1D9},{0x62D0, 0xCED8},{0x62D2, 0xCBDE},{0x62D3, 0xF4AC},{0x62D4, 0xDAFB},{0x62D6, 0xF6E9},{0x62D7, 0xE8F3},
- {0x62D8, 0xCFAC},{0x62D9, 0xF0F0},{0x62DB, 0xF4FD},{0x62DC, 0xDBC8},{0x62EC, 0xCEC0},{0x62ED, 0xE3D4},{0x62EE, 0xD1CF},{0x62EF, 0xF1F5},
- {0x62F1, 0xCDF2},{0x62F3, 0xCFEB},{0x62F7, 0xCDB8},{0x62FE, 0xE3A6},{0x62FF, 0xD1DA},{0x6301, 0xF2A5},{0x6307, 0xF2A6},{0x6309, 0xE4CE},
- {0x6311, 0xD3FB},{0x632B, 0xF1A9},{0x632F, 0xF2C9},{0x633A, 0xEFD8},{0x633B, 0xE6C9},{0x633D, 0xD8B8},{0x633E, 0xFAF3},{0x6349, 0xF3B5},
- {0x634C, 0xF8A4},{0x634F, 0xD1F3},{0x6350, 0xE6C8},{0x6355, 0xF8DA},{0x6367, 0xDCE9},{0x6368, 0xDED7},{0x636E, 0xCBDF},{0x6372, 0xCFEC},
- {0x6377, 0xF4DF},{0x637A, 0xD1F4},{0x637B, 0xD2BA},{0x637F, 0xDFF2},{0x6383, 0xE1B7},{0x6388, 0xE2A3},{0x6389, 0xD3FC},{0x638C, 0xEDE6},
- {0x6392, 0xDBC9},{0x6396, 0xE4FA},{0x6398, 0xCFDE},{0x639B, 0xCED0},{0x63A0, 0xD5D3},{0x63A1, 0xF3F5},{0x63A2, 0xF7AE},{0x63A5, 0xEFC8},
- {0x63A7, 0xCDF3},{0x63A8, 0xF5CF},{0x63A9, 0xE5F3},{0x63AA, 0xF0C2},{0x63C0, 0xCAD1},{0x63C4, 0xEAF1},{0x63C6, 0xD0A6},{0x63CF, 0xD9DA},
- {0x63D0, 0xF0AB},{0x63D6, 0xEBE7},{0x63DA, 0xE5C0},{0x63DB, 0xFCB5},{0x63E1, 0xE4C4},{0x63ED, 0xCCA9},{0x63EE, 0xFDC6},{0x63F4, 0xEAB5},
- {0x63F6, 0xE5AA},{0x63F7, 0xDFBA},{0x640D, 0xE1DF},{0x640F, 0xDAD1},{0x6414, 0xE1B8},{0x6416, 0xE8F4},{0x6417, 0xD3FD},{0x641C, 0xE2A4},
- {0x6422, 0xF2CA},{0x642C, 0xDAE6},{0x642D, 0xF7B3},{0x643A, 0xFDCD},{0x643E, 0xF3B6},{0x6458, 0xEED7},{0x6460, 0xF5C4},{0x6469, 0xD8A4},
- {0x646F, 0xF2A7},{0x6478, 0xD9B8},{0x6479, 0xD9B9},{0x647A, 0xEFC9},{0x6488, 0xD6CE},{0x6491, 0xF7CB},{0x6492, 0xDFAE},{0x6493, 0xE8F5},
- {0x649A, 0xD2B5},{0x649E, 0xD3D5},{0x64A4, 0xF4CC},{0x64A5, 0xDAFC},{0x64AB, 0xD9E8},{0x64AD, 0xF7EB},{0x64AE, 0xF5C9},{0x64B0, 0xF3BC},
- {0x64B2, 0xDAD2},{0x64BB, 0xD3B5},{0x64C1, 0xE8B6},{0x64C4, 0xD6CF},{0x64C5, 0xF4BA},{0x64C7, 0xF7C9},{0x64CA, 0xCCAA},{0x64CD, 0xF0C3},
- {0x64CE, 0xCCD6},{0x64D2, 0xD0D3},{0x64D4, 0xD3BD},{0x64D8, 0xDBFB},{0x64DA, 0xCBE0},{0x64E1, 0xD3E4},{0x64E2, 0xF6F7},{0x64E5, 0xD5BA},
- {0x64E6, 0xF3CD},{0x64E7, 0xCBE1},{0x64EC, 0xEBF4},{0x64F2, 0xF4AD},{0x64F4, 0xFCAA},{0x64FA, 0xF7EC},{0x64FE, 0xE8F6},{0x6500, 0xDAE7},
- {0x6504, 0xF7CC},{0x6518, 0xE5C1},{0x651D, 0xE0EE},{0x6523, 0xD5FD},{0x652A, 0xCEE6},{0x652B, 0xFCAB},{0x652C, 0xD5BB},{0x652F, 0xF2A8},
- {0x6536, 0xE2A5},{0x6537, 0xCDB9},{0x6538, 0xEAF2},{0x6539, 0xCBC7},{0x653B, 0xCDF4},{0x653E, 0xDBAF},{0x653F, 0xEFD9},{0x6545, 0xCDBA},
- {0x6548, 0xFCF9},{0x654D, 0xDFF3},{0x654E, 0xCEE7},{0x654F, 0xDAC2},{0x6551, 0xCFAD},{0x6556, 0xE7F9},{0x6557, 0xF8A8},{0x655E, 0xF3E2},
- {0x6562, 0xCAF2},{0x6563, 0xDFA4},{0x6566, 0xD4C4},{0x656C, 0xCCD7},{0x656D, 0xE5C2},{0x6572, 0xCDBB},{0x6574, 0xEFDA},{0x6575, 0xEED8},
- {0x6577, 0xDDA7},{0x6578, 0xE2A6},{0x657E, 0xE0C0},{0x6582, 0xD6B0},{0x6583, 0xF8CA},{0x6585, 0xFCFA},{0x6587, 0xD9FE},{0x658C, 0xDEB0},
- {0x6590, 0xDDEC},{0x6591, 0xDAE8},{0x6597, 0xD4E0},{0x6599, 0xD6F9},{0x659B, 0xCDD7},{0x659C, 0xDED8},{0x659F, 0xF2F8},{0x65A1, 0xE4D6},
- {0x65A4, 0xD0C5},{0x65A5, 0xF4AE},{0x65A7, 0xDDA8},{0x65AB, 0xEDC5},{0x65AC, 0xF3D6},{0x65AF, 0xDED9},{0x65B0, 0xE3E6},{0x65B7, 0xD3A8},
- {0x65B9, 0xDBB0},{0x65BC, 0xE5DA},{0x65BD, 0xE3BF},{0x65C1, 0xDBB1},{0x65C5, 0xD5E9},{0x65CB, 0xE0C1},{0x65CC, 0xEFDB},{0x65CF, 0xF0E9},
- {0x65D2, 0xD7B2},{0x65D7, 0xD0FD},{0x65E0, 0xD9E9},{0x65E3, 0xD0FE},{0x65E5, 0xECED},{0x65E6, 0xD3A9},{0x65E8, 0xF2A9},{0x65E9, 0xF0C4},
- {0x65EC, 0xE2E2},{0x65ED, 0xE9EF},{0x65F1, 0xF9D1},{0x65F4, 0xE9D9},{0x65FA, 0xE8DA},{0x65FB, 0xDAC3},{0x65FC, 0xDAC4},{0x65FD, 0xD4C5},
- {0x65FF, 0xE7FA},{0x6606, 0xCDE0},{0x6607, 0xE3B0},{0x6609, 0xDBB2},{0x660A, 0xFBC4},{0x660C, 0xF3E3},{0x660E, 0xD9A5},{0x660F, 0xFBE7},
- {0x6610, 0xDDCB},{0x6611, 0xD0D4},{0x6613, 0xE6B6},{0x6614, 0xE0AE},{0x6615, 0xFDDA},{0x661E, 0xDCB5},{0x661F, 0xE0F8},{0x6620, 0xE7B1},
- {0x6625, 0xF5F0},{0x6627, 0xD8DC},{0x6628, 0xEDC6},{0x662D, 0xE1B9},{0x662F, 0xE3C0},{0x6630, 0xF9C0},{0x6631, 0xE9F0},{0x6634, 0xD9DB},
- {0x6636, 0xF3E4},{0x663A, 0xDCB6},{0x663B, 0xE4E9},{0x6641, 0xF0C5},{0x6642, 0xE3C1},{0x6643, 0xFCCC},{0x6644, 0xFCCD},{0x6649, 0xF2CB},
- {0x664B, 0xF2CC},{0x664F, 0xE4CF},{0x6659, 0xF1DB},{0x665B, 0xFAD9},{0x665D, 0xF1B8},{0x665E, 0xFDF5},{0x665F, 0xE0F9},{0x6664, 0xE7FB},
- {0x6665, 0xFCB7},{0x6666, 0xFCE4},{0x6667, 0xFBC5},{0x6668, 0xE3E7},{0x6669, 0xD8B9},{0x666B, 0xF6F8},{0x666E, 0xDCC5},{0x666F, 0xCCD8},
- {0x6673, 0xE0AF},{0x6674, 0xF4E7},{0x6676, 0xEFDC},{0x6677, 0xCFFC},{0x6678, 0xEFDD},{0x667A, 0xF2AA},{0x6684, 0xFDBE},{0x6687, 0xCAAC},
- {0x6688, 0xFDBB},{0x6689, 0xFDC7},{0x668E, 0xE7B2},{0x6690, 0xEAD1},{0x6691, 0xDFF4},{0x6696, 0xD1EC},{0x6697, 0xE4DE},{0x6698, 0xE5C3},
- {0x669D, 0xD9A6},{0x66A0, 0xCDBC},{0x66A2, 0xF3E5},{0x66AB, 0xEDD5},{0x66AE, 0xD9BA},{0x66B2, 0xEDE7},{0x66B3, 0xFBB5},{0x66B4, 0xF8EC},
- {0x66B9, 0xE0E7},{0x66BB, 0xCCD9},{0x66BE, 0xD4C6},{0x66C4, 0xE7A5},{0x66C6, 0xD5F5},{0x66C7, 0xD3BE},{0x66C9, 0xFCFB},{0x66D6, 0xE4F2},
- {0x66D9, 0xDFF5},{0x66DC, 0xE8F8},{0x66DD, 0xF8ED},{0x66E0, 0xCEC7},{0x66E6, 0xFDF6},{0x66F0, 0xE8D8},{0x66F2, 0xCDD8},{0x66F3, 0xE7D6},
- {0x66F4, 0xCCDA},{0x66F7, 0xCAE3},{0x66F8, 0xDFF6},{0x66F9, 0xF0C7},{0x66FA, 0xF0C6},{0x66FC, 0xD8BA},{0x66FE, 0xF1F4},{0x66FF, 0xF4F0},
- {0x6700, 0xF5CC},{0x6703, 0xFCE5},{0x6708, 0xEAC5},{0x6709, 0xEAF3},{0x670B, 0xDDDB},{0x670D, 0xDCD7},{0x6714, 0xDEFD},{0x6715, 0xF2F9},
- {0x6717, 0xD5C7},{0x671B, 0xD8D0},{0x671D, 0xF0C8},{0x671E, 0xD1A1},{0x671F, 0xD1A2},{0x6726, 0xD9D4},{0x6727, 0xD6E8},{0x6728, 0xD9CA},
- {0x672A, 0xDAB1},{0x672B, 0xD8C7},{0x672C, 0xDCE2},{0x672D, 0xF3CE},{0x672E, 0xF5F4},{0x6731, 0xF1B9},{0x6734, 0xDAD3},{0x6736, 0xF6EA},
- {0x673A, 0xCFF5},{0x673D, 0xFDAE},{0x6746, 0xCAD2},{0x6749, 0xDFB4},{0x674E, 0xD7DD},{0x674F, 0xFABA},{0x6750, 0xEEA7},{0x6751, 0xF5BD},
- {0x6753, 0xF8F5},{0x6756, 0xEDE8},{0x675C, 0xD4E1},{0x675E, 0xD1A3},{0x675F, 0xE1D6},{0x676D, 0xF9F8},{0x676F, 0xDBCA},{0x6770, 0xCBF9},
- {0x6771, 0xD4D4},{0x6773, 0xD9DC},{0x6775, 0xEEBE},{0x6777, 0xF7ED},{0x677B, 0xD2EE},{0x677E, 0xE1E6},{0x677F, 0xF7F9},{0x6787, 0xDDED},
- {0x6789, 0xE8DB},{0x678B, 0xDBB3},{0x678F, 0xD1F7},{0x6790, 0xE0B0},{0x6793, 0xD4E2},{0x6795, 0xF6D7},{0x6797, 0xD7F9},{0x679A, 0xD8DD},
- {0x679C, 0xCDFD},{0x679D, 0xF2AB},{0x67AF, 0xCDBD},{0x67B0, 0xF8C2},{0x67B3, 0xF2AC},{0x67B6, 0xCAAD},{0x67B7, 0xCAAE},{0x67B8, 0xCFAE},
- {0x67BE, 0xE3C2},{0x67C4, 0xDCB7},{0x67CF, 0xDBDA},{0x67D0, 0xD9BB},{0x67D1, 0xCAF3},{0x67D2, 0xF6D3},{0x67D3, 0xE6F8},{0x67D4, 0xEAF5},
- {0x67DA, 0xEAF6},{0x67DD, 0xF6F9},{0x67E9, 0xCFAF},{0x67EC, 0xCAD3},{0x67EF, 0xCAAF},{0x67F0, 0xD2B0},{0x67F1, 0xF1BA},{0x67F3, 0xD7B3},
- {0x67F4, 0xE3C3},{0x67F5, 0xF3FD},{0x67F6, 0xDEDA},{0x67FB, 0xDEDB},{0x67FE, 0xEFDE},{0x6812, 0xE2E3},{0x6813, 0xEEFB},{0x6816, 0xDFF7},
- {0x6817, 0xD7CA},{0x6821, 0xCEE8},{0x6822, 0xDBDB},{0x682A, 0xF1BB},{0x682F, 0xE9F1},{0x6838, 0xFAB7},{0x6839, 0xD0C6},{0x683C, 0xCCAB},
- {0x683D, 0xEEA8},{0x6840, 0xCBFA},{0x6841, 0xF9F9},{0x6842, 0xCCFD},{0x6843, 0xD3FE},{0x6848, 0xE4D0},{0x684E, 0xF2EE},{0x6850, 0xD4D5},
- {0x6851, 0xDFCD},{0x6853, 0xFCB8},{0x6854, 0xD1D0},{0x686D, 0xF2CD},{0x6876, 0xF7D2},{0x687F, 0xCAD4},{0x6881, 0xD5D9},{0x6885, 0xD8DE},
- {0x688F, 0xCDD9},{0x6893, 0xEEA9},{0x6894, 0xF6BC},{0x6897, 0xCCDB},{0x689D, 0xF0C9},{0x689F, 0xFCFC},{0x68A1, 0xE8C9},{0x68A2, 0xF4FE},
- {0x68A7, 0xE7FC},{0x68A8, 0xD7DE},{0x68AD, 0xDEDC},{0x68AF, 0xF0AC},{0x68B0, 0xCCFE},{0x68B1, 0xCDE1},{0x68B3, 0xE1BA},{0x68B5, 0xDBEF},
- {0x68B6, 0xDAB2},{0x68C4, 0xD1A5},{0x68C5, 0xDCB8},{0x68C9, 0xD8F6},{0x68CB, 0xD1A4},{0x68CD, 0xCDE2},{0x68D2, 0xDCEA},{0x68D5, 0xF0F7},
- {0x68D7, 0xF0CA},{0x68D8, 0xD0BE},{0x68DA, 0xDDDC},{0x68DF, 0xD4D6},{0x68E0, 0xD3D6},{0x68E7, 0xEDD0},{0x68E8, 0xCDA1},{0x68EE, 0xDFB5},
- {0x68F2, 0xDFF8},{0x68F9, 0xD4A1},{0x68FA, 0xCEB2},{0x6900, 0xE8CA},{0x6905, 0xEBF5},{0x690D, 0xE3D5},{0x690E, 0xF5D0},{0x6912, 0xF5A1},
- {0x6927, 0xD9A7},{0x6930, 0xE5AB},{0x693D, 0xE6CB},{0x693F, 0xF5F1},{0x694A, 0xE5C5},{0x6953, 0xF9A3},{0x6954, 0xE0DB},{0x6955, 0xF6EB},
- {0x6957, 0xCBF1},{0x6959, 0xD9EA},{0x695A, 0xF5A2},{0x695E, 0xD7D1},{0x6960, 0xD1F8},{0x6961, 0xEAF8},{0x6962, 0xEAF9},{0x6963, 0xDAB3},
- {0x6968, 0xEFDF},{0x696B, 0xF1EF},{0x696D, 0xE5F6},{0x696E, 0xEEBF},{0x696F, 0xE2E4},{0x6975, 0xD0BF},{0x6977, 0xFAAC},{0x6978, 0xF5D1},
- {0x6979, 0xE7B3},{0x6995, 0xE9BE},{0x699B, 0xF2CE},{0x699C, 0xDBB4},{0x69A5, 0xFCCE},{0x69A7, 0xDDEE},{0x69AE, 0xE7B4},{0x69B4, 0xD7B4},
- {0x69BB, 0xF7B4},{0x69C1, 0xCDBE},{0x69C3, 0xDAE9},{0x69CB, 0xCFB0},{0x69CC, 0xF7D9},{0x69CD, 0xF3E6},{0x69D0, 0xCED9},{0x69E8, 0xCEAA},
- {0x69EA, 0xCBC8},{0x69FB, 0xD0A7},{0x69FD, 0xF0CB},{0x69FF, 0xD0C7},{0x6A02, 0xE4C5},{0x6A0A, 0xDBE0},{0x6A11, 0xD5DA},{0x6A13, 0xD7A7},
- {0x6A17, 0xEEC0},{0x6A19, 0xF8F6},{0x6A1E, 0xF5D2},{0x6A1F, 0xEDE9},{0x6A21, 0xD9BC},{0x6A23, 0xE5C6},{0x6A35, 0xF5A3},{0x6A38, 0xDAD4},
- {0x6A39, 0xE2A7},{0x6A3A, 0xFBFC},{0x6A3D, 0xF1DC},{0x6A44, 0xCAF4},{0x6A48, 0xE8FA},{0x6A4B, 0xCEE9},{0x6A52, 0xE9F8},{0x6A53, 0xE2E5},
- {0x6A58, 0xD0B9},{0x6A59, 0xD4F2},{0x6A5F, 0xD1A6},{0x6A61, 0xDFCE},{0x6A6B, 0xFCF4},{0x6A80, 0xD3AA},{0x6A84, 0xCCAC},{0x6A89, 0xEFE0},
- {0x6A8D, 0xE5E5},{0x6A8E, 0xD0D5},{0x6A97, 0xDBFC},{0x6A9C, 0xFCE6},{0x6AA2, 0xCBFE},{0x6AA3, 0xEDEA},{0x6AB3, 0xDEB1},{0x6ABB, 0xF9E3},
- {0x6AC2, 0xD4A2},{0x6AC3, 0xCFF6},{0x6AD3, 0xD6D0},{0x6ADA, 0xD5EA},{0x6ADB, 0xF1EE},{0x6AF6, 0xFACB},{0x6AFB, 0xE5A1},{0x6B04, 0xD5B1},
- {0x6B0A, 0xCFED},{0x6B0C, 0xEDEB},{0x6B12, 0xD5B2},{0x6B16, 0xD5BC},{0x6B20, 0xFDE2},{0x6B21, 0xF3AD},{0x6B23, 0xFDDB},{0x6B32, 0xE9B0},
- {0x6B3A, 0xD1A7},{0x6B3D, 0xFDE3},{0x6B3E, 0xCEB3},{0x6B46, 0xFDE4},{0x6B47, 0xFACE},{0x6B4C, 0xCAB0},{0x6B4E, 0xF7A7},{0x6B50, 0xCFB1},
- {0x6B5F, 0xE6A2},{0x6B61, 0xFCB6},{0x6B62, 0xF2AD},{0x6B63, 0xEFE1},{0x6B64, 0xF3AE},{0x6B65, 0xDCC6},{0x6B66, 0xD9EB},{0x6B6A, 0xE8E0},
- {0x6B72, 0xE1A8},{0x6B77, 0xD5F6},{0x6B78, 0xCFFD},{0x6B7B, 0xDEDD},{0x6B7F, 0xD9D1},{0x6B83, 0xE4EA},{0x6B84, 0xF2CF},{0x6B86, 0xF7BF},
- {0x6B89, 0xE2E6},{0x6B8A, 0xE2A8},{0x6B96, 0xE3D6},{0x6B98, 0xEDD1},{0x6B9E, 0xE9F9},{0x6BAE, 0xD6B1},{0x6BAF, 0xDEB2},{0x6BB2, 0xE0E8},
- {0x6BB5, 0xD3AB},{0x6BB7, 0xEBDC},{0x6BBA, 0xDFAF},{0x6BBC, 0xCAC3},{0x6BBF, 0xEEFC},{0x6BC1, 0xFDC3},{0x6BC5, 0xEBF6},{0x6BC6, 0xCFB2},
- {0x6BCB, 0xD9EC},{0x6BCD, 0xD9BD},{0x6BCF, 0xD8DF},{0x6BD2, 0xD4B8},{0x6BD3, 0xEBBE},{0x6BD4, 0xDDEF},{0x6BD6, 0xDDF0},{0x6BD7, 0xDDF1},
- {0x6BD8, 0xDDF2},{0x6BDB, 0xD9BE},{0x6BEB, 0xFBC6},{0x6BEC, 0xCFB3},{0x6C08, 0xEEFD},{0x6C0F, 0xE4AB},{0x6C11, 0xDAC5},{0x6C13, 0xD8EC},
- {0x6C23, 0xD1A8},{0x6C34, 0xE2A9},{0x6C37, 0xDEBC},{0x6C38, 0xE7B5},{0x6C3E, 0xDBF0},{0x6C40, 0xEFE2},{0x6C41, 0xF1F0},{0x6C42, 0xCFB4},
- {0x6C4E, 0xDBF1},{0x6C50, 0xE0B1},{0x6C55, 0xDFA5},{0x6C57, 0xF9D2},{0x6C5A, 0xE7FD},{0x6C5D, 0xE6A3},{0x6C5E, 0xFBF1},{0x6C5F, 0xCBB0},
- {0x6C60, 0xF2AE},{0x6C68, 0xCDE7},{0x6C6A, 0xE8DC},{0x6C6D, 0xE7D7},{0x6C70, 0xF7C0},{0x6C72, 0xD0E3},{0x6C76, 0xDAA1},{0x6C7A, 0xCCBD},
- {0x6C7D, 0xD1A9},{0x6C7E, 0xDDCC},{0x6C81, 0xE3FE},{0x6C82, 0xD1AA},{0x6C83, 0xE8AA},{0x6C85, 0xEAB6},{0x6C86, 0xF9FA},{0x6C87, 0xE6CC},
- {0x6C88, 0xF6D8},{0x6C8C, 0xD4C7},{0x6C90, 0xD9CB},{0x6C92, 0xD9D2},{0x6C93, 0xD3CB},{0x6C94, 0xD8F7},{0x6C95, 0xDAA9},{0x6C96, 0xF5F8},
- {0x6C99, 0xDEDE},{0x6C9A, 0xF2AF},{0x6C9B, 0xF8A9},{0x6CAB, 0xD8C8},{0x6CAE, 0xEEC1},{0x6CB3, 0xF9C1},{0x6CB8, 0xDDF3},{0x6CB9, 0xEAFA},
- {0x6CBB, 0xF6BD},{0x6CBC, 0xE1BB},{0x6CBD, 0xCDBF},{0x6CBE, 0xF4D4},{0x6CBF, 0xE6CD},{0x6CC1, 0xFCCF},{0x6CC2, 0xFBA2},{0x6CC4, 0xE0DC},
- {0x6CC9, 0xF4BB},{0x6CCA, 0xDAD5},{0x6CCC, 0xF9B2},{0x6CD3, 0xFBF2},{0x6CD5, 0xDBF6},{0x6CD7, 0xDEDF},{0x6CDB, 0xDBF2},{0x6CE1, 0xF8DC},
- {0x6CE2, 0xF7EE},{0x6CE3, 0xEBE8},{0x6CE5, 0xD2FA},{0x6CE8, 0xF1BC},{0x6CEB, 0xFADA},{0x6CEE, 0xDAEA},{0x6CEF, 0xDAC6},{0x6CF0, 0xF7C1},
- {0x6CF3, 0xE7B6},{0x6D0B, 0xE5C7},{0x6D0C, 0xD6AC},{0x6D11, 0xDCC7},{0x6D17, 0xE1A9},{0x6D19, 0xE2AA},{0x6D1B, 0xD5A6},{0x6D1E, 0xD4D7},
- {0x6D25, 0xF2D0},{0x6D27, 0xEAFB},{0x6D29, 0xE0DD},{0x6D2A, 0xFBF3},{0x6D32, 0xF1BD},{0x6D35, 0xE2E7},{0x6D36, 0xFDD7},{0x6D38, 0xCEC8},
- {0x6D39, 0xEAB7},{0x6D3B, 0xFCC0},{0x6D3D, 0xFDE7},{0x6D3E, 0xF7EF},{0x6D41, 0xD7B5},{0x6D59, 0xEFBA},{0x6D5A, 0xF1DD},{0x6D5C, 0xDEB3},
- {0x6D63, 0xE8CB},{0x6D66, 0xF8DD},{0x6D69, 0xFBC7},{0x6D6A, 0xD5C8},{0x6D6C, 0xD7DF},{0x6D6E, 0xDDA9},{0x6D74, 0xE9B1},{0x6D77, 0xFAAD},
- {0x6D78, 0xF6D9},{0x6D79, 0xFAF4},{0x6D7F, 0xF8AA},{0x6D85, 0xE6EE},{0x6D87, 0xCCDC},{0x6D88, 0xE1BC},{0x6D89, 0xE0EF},{0x6D8C, 0xE9BF},
- {0x6D8D, 0xFCFD},{0x6D8E, 0xE6CE},{0x6D91, 0xE1D7},{0x6D93, 0xE6CF},{0x6D95, 0xF4F1},{0x6DAF, 0xE4F3},{0x6DB2, 0xE4FB},{0x6DB5, 0xF9E4},
- {0x6DC0, 0xEFE3},{0x6DC3, 0xCFEE},{0x6DC4, 0xF6BE},{0x6DC5, 0xE0B2},{0x6DC6, 0xFCFE},{0x6DC7, 0xD1AB},{0x6DCB, 0xD7FA},{0x6DCF, 0xFBC8},
- {0x6DD1, 0xE2D7},{0x6DD8, 0xD4A3},{0x6DD9, 0xF0F8},{0x6DDA, 0xD7A8},{0x6DDE, 0xE1E7},{0x6DE1, 0xD3BF},{0x6DE8, 0xEFE4},{0x6DEA, 0xD7C5},
- {0x6DEB, 0xEBE2},{0x6DEE, 0xFCE7},{0x6DF1, 0xE4A2},{0x6DF3, 0xE2E8},{0x6DF5, 0xE6D0},{0x6DF7, 0xFBE8},{0x6DF8, 0xF4E8},{0x6DF9, 0xE5F4},
- {0x6DFA, 0xF4BC},{0x6DFB, 0xF4D5},{0x6E17, 0xDFB6},{0x6E19, 0xFCB9},{0x6E1A, 0xEEC2},{0x6E1B, 0xCAF5},{0x6E1F, 0xEFE5},{0x6E20, 0xCBE2},
- {0x6E21, 0xD4A4},{0x6E23, 0xDEE0},{0x6E24, 0xDAFD},{0x6E25, 0xE4C6},{0x6E26, 0xE8BE},{0x6E2B, 0xE0DE},{0x6E2C, 0xF6B4},{0x6E2D, 0xEAD2},
- {0x6E2F, 0xF9FB},{0x6E32, 0xE0C2},{0x6E34, 0xCAE4},{0x6E36, 0xE7B7},{0x6E38, 0xEAFD},{0x6E3A, 0xD9DD},{0x6E3C, 0xDAB4},{0x6E3D, 0xEEAA},
- {0x6E3E, 0xFBE9},{0x6E43, 0xDBCB},{0x6E44, 0xDAB5},{0x6E4A, 0xF1BE},{0x6E4D, 0xD3AC},{0x6E56, 0xFBC9},{0x6E58, 0xDFCF},{0x6E5B, 0xD3C0},
- {0x6E5C, 0xE3D7},{0x6E5E, 0xEFE6},{0x6E5F, 0xFCD0},{0x6E67, 0xE9C0},{0x6E6B, 0xF5D3},{0x6E6E, 0xECDC},{0x6E6F, 0xF7B7},{0x6E72, 0xEAB8},
- {0x6E73, 0xD1F9},{0x6E7A, 0xDCC8},{0x6E90, 0xEAB9},{0x6E96, 0xF1DE},{0x6E9C, 0xD7B6},{0x6E9D, 0xCFB5},{0x6E9F, 0xD9A8},{0x6EA2, 0xECEE},
- {0x6EA5, 0xDDAA},{0x6EAA, 0xCDA2},{0x6EAB, 0xE8AE},{0x6EAF, 0xE1BD},{0x6EB1, 0xF2D1},{0x6EB6, 0xE9C1},{0x6EBA, 0xD2FC},{0x6EC2, 0xDBB5},
- {0x6EC4, 0xF3E7},{0x6EC5, 0xD8FE},{0x6EC9, 0xFCD1},{0x6ECB, 0xEDB2},{0x6ECC, 0xF4AF},{0x6ECE, 0xFBA3},{0x6ED1, 0xFCC1},{0x6ED3, 0xEEAB},
- {0x6ED4, 0xD4A5},{0x6EEF, 0xF4F2},{0x6EF4, 0xEED9},{0x6EF8, 0xFBCA},{0x6EFE, 0xCDE3},{0x6EFF, 0xD8BB},{0x6F01, 0xE5DB},{0x6F02, 0xF8F7},
- {0x6F06, 0xF6D4},{0x6F0F, 0xD7A9},{0x6F11, 0xCBC9},{0x6F14, 0xE6D1},{0x6F15, 0xF0CC},{0x6F20, 0xD8AE},{0x6F22, 0xF9D3},{0x6F23, 0xD5FE},
- {0x6F2B, 0xD8BC},{0x6F2C, 0xF2B0},{0x6F31, 0xE2AB},{0x6F32, 0xF3E8},{0x6F38, 0xEFC2},{0x6F3F, 0xEDEC},{0x6F41, 0xE7B8},{0x6F51, 0xDAFE},
- {0x6F54, 0xCCBE},{0x6F57, 0xF2FC},{0x6F58, 0xDAEB},{0x6F5A, 0xE2D8},{0x6F5B, 0xEDD6},{0x6F5E, 0xD6D1},{0x6F5F, 0xE0B3},{0x6F62, 0xFCD2},
- {0x6F64, 0xEBC8},{0x6F6D, 0xD3C1},{0x6F6E, 0xF0CD},{0x6F70, 0xCFF7},{0x6F7A, 0xEDD2},{0x6F7C, 0xD4D8},{0x6F7D, 0xDCC9},{0x6F7E, 0xD7F1},
- {0x6F81, 0xDFBB},{0x6F84, 0xF3A5},{0x6F88, 0xF4CD},{0x6F8D, 0xF1BF},{0x6F8E, 0xF8B1},{0x6F90, 0xE9FA},{0x6F94, 0xFBCB},{0x6F97, 0xCAD5},
- {0x6FA3, 0xF9D4},{0x6FA4, 0xF7CA},{0x6FA7, 0xD6C8},{0x6FAE, 0xFCE8},{0x6FAF, 0xF3BD},{0x6FB1, 0xEEFE},{0x6FB3, 0xE7FE},{0x6FB9, 0xD3C2},
- {0x6FBE, 0xD3B6},{0x6FC0, 0xCCAD},{0x6FC1, 0xF6FA},{0x6FC2, 0xD6B2},{0x6FC3, 0xD2D8},{0x6FCA, 0xE7D8},{0x6FD5, 0xE3A5},{0x6FDA, 0xE7B9},
- {0x6FDF, 0xF0AD},{0x6FE0, 0xFBCC},{0x6FE1, 0xEBA1},{0x6FE4, 0xD4A6},{0x6FE9, 0xFBCD},{0x6FEB, 0xD5BD},{0x6FEC, 0xF1DF},{0x6FEF, 0xF6FB},
- {0x6FF1, 0xDEB4},{0x6FFE, 0xD5EB},{0x7001, 0xE5C8},{0x7005, 0xFBA4},{0x7006, 0xD4B9},{0x7009, 0xDEE1},{0x700B, 0xE4A3},{0x700F, 0xD7B7},
- {0x7011, 0xF8EE},{0x7015, 0xDEB5},{0x7018, 0xD6D2},{0x701A, 0xF9D5},{0x701B, 0xE7BA},{0x701C, 0xEBD5},{0x701D, 0xD5F7},{0x701E, 0xEFE7},
- {0x701F, 0xE1BE},{0x7023, 0xFAAE},{0x7027, 0xD6E9},{0x7028, 0xD6EE},{0x702F, 0xE7BB},{0x7037, 0xECCB},{0x703E, 0xD5B3},{0x704C, 0xCEB4},
- {0x7050, 0xFBA5},{0x7051, 0xE1EE},{0x7058, 0xF7A8},{0x705D, 0xFBCE},{0x7063, 0xD8BD},{0x706B, 0xFBFD},{0x7070, 0xFCE9},{0x7078, 0xCFB6},
- {0x707C, 0xEDC7},{0x707D, 0xEEAC},{0x7085, 0xCCDD},{0x708A, 0xF6A7},{0x708E, 0xE6FA},{0x7092, 0xF5A4},{0x7098, 0xFDDC},{0x7099, 0xEDB3},
- {0x709A, 0xCEC9},{0x70A1, 0xEFE8},{0x70A4, 0xE1BF},{0x70AB, 0xFADB},{0x70AC, 0xCBE3},{0x70AD, 0xF7A9},{0x70AF, 0xFBA6},{0x70B3, 0xDCB9},
- {0x70B7, 0xF1C0},{0x70B8, 0xEDC8},{0x70B9, 0xEFC3},{0x70C8, 0xD6AD},{0x70CB, 0xFDCE},{0x70CF, 0xE8A1},{0x70D8, 0xFBF4},{0x70D9, 0xD5A7},
- {0x70DD, 0xF1F6},{0x70DF, 0xE6D3},{0x70F1, 0xCCDE},{0x70F9, 0xF8B2},{0x70FD, 0xDCEB},{0x7104, 0xFDB6},{0x7109, 0xE5EA},{0x710C, 0xF1E0},
- {0x7119, 0xDBCC},{0x711A, 0xDDCD},{0x711E, 0xD4C8},{0x7121, 0xD9ED},{0x7126, 0xF5A5},{0x7130, 0xE6FB},{0x7136, 0xE6D4},{0x7147, 0xFDC8},
- {0x7149, 0xD6A1},{0x714A, 0xFDBF},{0x714C, 0xFCD3},{0x714E, 0xEFA1},{0x7150, 0xE7BC},{0x7156, 0xD1EE},{0x7159, 0xE6D5},{0x715C, 0xE9F2},
- {0x715E, 0xDFB0},{0x7164, 0xD8E0},{0x7165, 0xFCBA},{0x7166, 0xFDAF},{0x7167, 0xF0CE},{0x7169, 0xDBE1},{0x716C, 0xE5C9},{0x716E, 0xEDB4},
- {0x717D, 0xE0C3},{0x7184, 0xE3D8},{0x7189, 0xE9FB},{0x718A, 0xEAA8},{0x718F, 0xFDB7},{0x7192, 0xFBA7},{0x7194, 0xE9C2},{0x7199, 0xFDF7},
- {0x719F, 0xE2D9},{0x71A2, 0xDCEC},{0x71AC, 0xE8A2},{0x71B1, 0xE6F0},{0x71B9, 0xFDF8},{0x71BA, 0xFDF9},{0x71BE, 0xF6BF},{0x71C1, 0xE7A7},
- {0x71C3, 0xE6D7},{0x71C8, 0xD4F3},{0x71C9, 0xD4C9},{0x71CE, 0xD6FA},{0x71D0, 0xD7F2},{0x71D2, 0xE1C0},{0x71D4, 0xDBE2},{0x71D5, 0xE6D8},
- {0x71DF, 0xE7BD},{0x71E5, 0xF0CF},{0x71E6, 0xF3BE},{0x71E7, 0xE2AC},{0x71ED, 0xF5B7},{0x71EE, 0xE0F0},{0x71FB, 0xFDB8},{0x71FC, 0xE3E8},
- {0x71FE, 0xD4A7},{0x71FF, 0xE8FC},{0x7200, 0xFAD2},{0x7206, 0xF8EF},{0x7210, 0xD6D3},{0x721B, 0xD5B4},{0x722A, 0xF0D0},{0x722C, 0xF7F0},
- {0x722D, 0xEEB3},{0x7230, 0xEABA},{0x7232, 0xEAD3},{0x7235, 0xEDC9},{0x7236, 0xDDAB},{0x723A, 0xE5AC},{0x723B, 0xFDA1},{0x723D, 0xDFD0},
- {0x723E, 0xECB3},{0x7240, 0xDFD1},{0x7246, 0xEDED},{0x7247, 0xF8B8},{0x7248, 0xF7FA},{0x724C, 0xF8AB},{0x7252, 0xF4E0},{0x7258, 0xD4BA},
- {0x7259, 0xE4B3},{0x725B, 0xE9DA},{0x725D, 0xDEB6},{0x725F, 0xD9BF},{0x7261, 0xD9C0},{0x7262, 0xD6EF},{0x7267, 0xD9CC},{0x7269, 0xDAAA},
- {0x7272, 0xDFE5},{0x7279, 0xF7E5},{0x727D, 0xCCB2},{0x7280, 0xDFF9},{0x7281, 0xD7E0},{0x72A2, 0xD4BB},{0x72A7, 0xFDFA},{0x72AC, 0xCCB3},
- {0x72AF, 0xDBF3},{0x72C0, 0xDFD2},{0x72C2, 0xCECA},{0x72C4, 0xEEDA},{0x72CE, 0xE4E4},{0x72D0, 0xFBCF},{0x72D7, 0xCFB7},{0x72D9, 0xEEC3},
- {0x72E1, 0xCEEA},{0x72E9, 0xE2AD},{0x72F8, 0xD7E1},{0x72F9, 0xFAF5},{0x72FC, 0xD5C9},{0x72FD, 0xF8AC},{0x730A, 0xE7D9},{0x7316, 0xF3E9},
- {0x731B, 0xD8ED},{0x731C, 0xE3C4},{0x731D, 0xF0F1},{0x7325, 0xE8E5},{0x7329, 0xE0FA},{0x732A, 0xEEC4},{0x732B, 0xD9DE},{0x7336, 0xEBA2},
- {0x7337, 0xEBA3},{0x733E, 0xFCC2},{0x733F, 0xEABB},{0x7344, 0xE8AB},{0x7345, 0xDEE2},{0x7350, 0xEDEF},{0x7352, 0xE8A3},{0x7357, 0xCFF1},
- {0x7368, 0xD4BC},{0x736A, 0xFCEA},{0x7370, 0xE7BE},{0x7372, 0xFCF2},{0x7375, 0xD6B4},{0x7378, 0xE2AE},{0x737A, 0xD3B7},{0x737B, 0xFACC},
- {0x7384, 0xFADC},{0x7386, 0xEDB5},{0x7387, 0xE1E3},{0x7389, 0xE8AC},{0x738B, 0xE8DD},{0x738E, 0xEFE9},{0x7394, 0xF4BD},{0x7396, 0xCFB8},
- {0x7397, 0xE9DB},{0x7398, 0xD1AC},{0x739F, 0xDAC7},{0x73A7, 0xEBC9},{0x73A9, 0xE8CC},{0x73AD, 0xDEB7},{0x73B2, 0xD6BC},{0x73B3, 0xD3E5},
- {0x73B9, 0xFADD},{0x73C0, 0xDAD6},{0x73C2, 0xCAB1},{0x73C9, 0xDAC8},{0x73CA, 0xDFA6},{0x73CC, 0xF9B3},{0x73CD, 0xF2D2},{0x73CF, 0xCAC4},
- {0x73D6, 0xCECB},{0x73D9, 0xCDF5},{0x73DD, 0xFDB0},{0x73DE, 0xD5A8},{0x73E0, 0xF1C1},{0x73E3, 0xE2E9},{0x73E4, 0xDCCA},{0x73E5, 0xECB4},
- {0x73E6, 0xFAC0},{0x73E9, 0xFBA8},{0x73EA, 0xD0A8},{0x73ED, 0xDAEC},{0x73F7, 0xD9EE},{0x73F9, 0xE0FB},{0x73FD, 0xEFEA},{0x73FE, 0xFADE},
- {0x7401, 0xE0C4},{0x7403, 0xCFB9},{0x7405, 0xD5CA},{0x7406, 0xD7E2},{0x7407, 0xE2AF},{0x7409, 0xD7B8},{0x7413, 0xE8CD},{0x741B, 0xF6DA},
- {0x7420, 0xEFA2},{0x7421, 0xE2DA},{0x7422, 0xF6FC},{0x7425, 0xFBD0},{0x7426, 0xD1AD},{0x7428, 0xCDE4},{0x742A, 0xD1AE},{0x742B, 0xDCED},
- {0x742C, 0xE8CE},{0x742E, 0xF0F9},{0x742F, 0xCEB5},{0x7430, 0xE6FC},{0x7433, 0xD7FB},{0x7434, 0xD0D6},{0x7435, 0xDDF5},{0x7436, 0xF7F1},
- {0x7438, 0xF6FD},{0x743A, 0xDBF7},{0x743F, 0xFBEA},{0x7440, 0xE9DC},{0x7441, 0xD9C1},{0x7443, 0xF5F2},{0x7444, 0xE0C5},{0x744B, 0xEAD4},
- {0x7455, 0xF9C2},{0x7457, 0xEABC},{0x7459, 0xD2C5},{0x745A, 0xFBD1},{0x745B, 0xE7C0},{0x745C, 0xEBA5},{0x745E, 0xDFFA},{0x745F, 0xE3A2},
- {0x7460, 0xD7B9},{0x7462, 0xE9C3},{0x7464, 0xE8FD},{0x7465, 0xE8AF},{0x7468, 0xF2D3},{0x7469, 0xFBA9},{0x746A, 0xD8A5},{0x746F, 0xD5CB},
- {0x747E, 0xD0C8},{0x7482, 0xD1AF},{0x7483, 0xD7E3},{0x7487, 0xE0C6},{0x7489, 0xD6A2},{0x748B, 0xEDF0},{0x7498, 0xD7F3},{0x749C, 0xFCD4},
- {0x749E, 0xDAD7},{0x749F, 0xCCDF},{0x74A1, 0xF2D4},{0x74A3, 0xD1B0},{0x74A5, 0xCCE0},{0x74A7, 0xDBFD},{0x74A8, 0xF3BF},{0x74AA, 0xF0D1},
- {0x74B0, 0xFCBB},{0x74B2, 0xE2B0},{0x74B5, 0xE6A5},{0x74B9, 0xE2DB},{0x74BD, 0xDFDE},{0x74BF, 0xE0C7},{0x74C6, 0xF2EF},{0x74CA, 0xCCE1},
- {0x74CF, 0xD6EA},{0x74D4, 0xE7C2},{0x74D8, 0xCEB6},{0x74DA, 0xF3C0},{0x74DC, 0xCDFE},{0x74E0, 0xFBD2},{0x74E2, 0xF8F8},{0x74E3, 0xF7FB},
- {0x74E6, 0xE8BF},{0x74EE, 0xE8B7},{0x74F7, 0xEDB6},{0x7501, 0xDCBA},{0x7504, 0xCCB4},{0x7511, 0xF1F7},{0x7515, 0xE8B8},{0x7518, 0xCAF6},
- {0x751A, 0xE4A4},{0x751B, 0xF4D6},{0x751F, 0xDFE6},{0x7523, 0xDFA7},{0x7525, 0xDFE7},{0x7526, 0xE1C1},{0x7528, 0xE9C4},{0x752B, 0xDCCB},
- {0x752C, 0xE9C5},{0x7530, 0xEFA3},{0x7531, 0xEBA6},{0x7532, 0xCBA3},{0x7533, 0xE3E9},{0x7537, 0xD1FB},{0x7538, 0xEFA4},{0x753A, 0xEFEB},
- {0x7547, 0xD0B4},{0x754C, 0xCDA3},{0x754F, 0xE8E6},{0x7551, 0xEFA5},{0x7553, 0xD3CC},{0x7554, 0xDAED},{0x7559, 0xD7BA},{0x755B, 0xF2D5},
- {0x755C, 0xF5E5},{0x755D, 0xD9EF},{0x7562, 0xF9B4},{0x7565, 0xD5D4},{0x7566, 0xFDCF},{0x756A, 0xDBE3},{0x756F, 0xF1E1},{0x7570, 0xECB6},
- {0x7575, 0xFBFE},{0x7576, 0xD3D7},{0x7578, 0xD1B1},{0x757A, 0xCBB1},{0x757F, 0xD1B2},{0x7586, 0xCBB2},{0x7587, 0xF1C2},{0x758A, 0xF4E1},
- {0x758B, 0xF9B5},{0x758E, 0xE1C3},{0x758F, 0xE1C2},{0x7591, 0xEBF7},{0x759D, 0xDFA8},{0x75A5, 0xCBCA},{0x75AB, 0xE6B9},{0x75B1, 0xF8DE},
- {0x75B2, 0xF9AA},{0x75B3, 0xCAF7},{0x75B5, 0xEDB7},{0x75B8, 0xD3B8},{0x75B9, 0xF2D6},{0x75BC, 0xD4D9},{0x75BD, 0xEEC5},{0x75BE, 0xF2F0},
- {0x75C2, 0xCAB2},{0x75C5, 0xDCBB},{0x75C7, 0xF1F8},{0x75CD, 0xECB7},{0x75D2, 0xE5CA},{0x75D4, 0xF6C0},{0x75D5, 0xFDDD},{0x75D8, 0xD4E3},
- {0x75D9, 0xCCE2},{0x75DB, 0xF7D4},{0x75E2, 0xD7E5},{0x75F0, 0xD3C3},{0x75F2, 0xD8A6},{0x75F4, 0xF6C1},{0x75FA, 0xDDF6},{0x75FC, 0xCDC0},
- {0x7600, 0xE5DC},{0x760D, 0xE5CB},{0x7619, 0xE1C4},{0x761F, 0xE8B0},{0x7620, 0xF4B0},{0x7621, 0xF3EA},{0x7622, 0xDAEE},{0x7624, 0xD7BB},
- {0x7626, 0xE2B1},{0x763B, 0xD7AA},{0x7642, 0xD6FB},{0x764C, 0xE4DF},{0x764E, 0xCAD6},{0x7652, 0xEBA8},{0x7656, 0xDBFE},{0x7661, 0xF6C2},
- {0x7664, 0xEFBB},{0x7669, 0xD4FD},{0x766C, 0xE0C8},{0x7670, 0xE8B9},{0x7672, 0xEFA6},{0x7678, 0xCDA4},{0x767B, 0xD4F4},{0x767C, 0xDBA1},
- {0x767D, 0xDBDC},{0x767E, 0xDBDD},{0x7684, 0xEEDC},{0x7686, 0xCBCB},{0x7687, 0xFCD5},{0x768E, 0xCEEB},{0x7690, 0xCDC1},{0x7693, 0xFBD3},
- {0x76AE, 0xF9AB},{0x76BA, 0xF5D4},{0x76BF, 0xD9A9},{0x76C2, 0xE9DD},{0x76C3, 0xDBCD},{0x76C6, 0xDDCE},{0x76C8, 0xE7C3},{0x76CA, 0xECCC},
- {0x76D2, 0xF9EC},{0x76D6, 0xCBCC},{0x76DB, 0xE0FC},{0x76DC, 0xD4A8},{0x76DE, 0xEDD3},{0x76DF, 0xD8EF},{0x76E1, 0xF2D7},{0x76E3, 0xCAF8},
- {0x76E4, 0xDAEF},{0x76E7, 0xD6D4},{0x76EE, 0xD9CD},{0x76F2, 0xD8EE},{0x76F4, 0xF2C1},{0x76F8, 0xDFD3},{0x76FC, 0xDAF0},{0x76FE, 0xE2EA},
- {0x7701, 0xE0FD},{0x7704, 0xD8F8},{0x7708, 0xF7AF},{0x7709, 0xDAB6},{0x770B, 0xCAD7},{0x771E, 0xF2D8},{0x7720, 0xD8F9},{0x7729, 0xFADF},
- {0x7737, 0xCFEF},{0x7738, 0xD9C2},{0x773A, 0xF0D2},{0x773C, 0xE4D1},{0x7740, 0xF3B7},{0x774D, 0xFAE0},{0x775B, 0xEFEC},{0x7761, 0xE2B2},
- {0x7763, 0xD4BD},{0x7766, 0xD9CE},{0x776B, 0xF4E2},{0x7779, 0xD4A9},{0x777E, 0xCDC2},{0x777F, 0xE7DA},{0x778B, 0xF2D9},{0x7791, 0xD9AA},
- {0x779E, 0xD8BE},{0x77A5, 0xDCAD},{0x77AC, 0xE2EB},{0x77AD, 0xD6FC},{0x77B0, 0xCAF9},{0x77B3, 0xD4DA},{0x77BB, 0xF4D7},{0x77BC, 0xCCA1},
- {0x77BF, 0xCFBA},{0x77D7, 0xF5B8},{0x77DB, 0xD9C3},{0x77DC, 0xD0E8},{0x77E2, 0xE3C5},{0x77E3, 0xEBF8},{0x77E5, 0xF2B1},{0x77E9, 0xCFBB},
- {0x77ED, 0xD3AD},{0x77EE, 0xE8E1},{0x77EF, 0xCEEC},{0x77F3, 0xE0B4},{0x7802, 0xDEE3},{0x7812, 0xDDF7},{0x7825, 0xF2B2},{0x7826, 0xF3F6},
- {0x7827, 0xF6DB},{0x782C, 0xD7FE},{0x7832, 0xF8DF},{0x7834, 0xF7F2},{0x7845, 0xD0A9},{0x784F, 0xE6DA},{0x785D, 0xF5A6},{0x786B, 0xD7BC},
- {0x786C, 0xCCE3},{0x786F, 0xE6DB},{0x787C, 0xDDDD},{0x7881, 0xD1B3},{0x7887, 0xEFED},{0x788C, 0xD6DE},{0x788D, 0xE4F4},{0x788E, 0xE1EF},
- {0x7891, 0xDDF8},{0x7897, 0xE8CF},{0x78A3, 0xCAE5},{0x78A7, 0xDCA1},{0x78A9, 0xE0B5},{0x78BA, 0xFCAC},{0x78BB, 0xFCAD},{0x78BC, 0xD8A7},
- {0x78C1, 0xEDB8},{0x78C5, 0xDBB6},{0x78CA, 0xD6F0},{0x78CB, 0xF3AF},{0x78CE, 0xCDA5},{0x78D0, 0xDAF1},{0x78E8, 0xD8A8},{0x78EC, 0xCCE4},
- {0x78EF, 0xD1B4},{0x78F5, 0xCAD8},{0x78FB, 0xDAF2},{0x7901, 0xF5A7},{0x790E, 0xF5A8},{0x7916, 0xE6A6},{0x792A, 0xD5EC},{0x792B, 0xD5F8},
- {0x792C, 0xDAF3},{0x793A, 0xE3C6},{0x793E, 0xDEE4},{0x7940, 0xDEE5},{0x7941, 0xD1B5},{0x7947, 0xD1B6},{0x7948, 0xD1B7},{0x7949, 0xF2B3},
- {0x7950, 0xE9DE},{0x7956, 0xF0D3},{0x7957, 0xF2B4},{0x795A, 0xF0D4},{0x795B, 0xCBE4},{0x795C, 0xFBD4},{0x795D, 0xF5E6},{0x795E, 0xE3EA},
- {0x7960, 0xDEE6},{0x7965, 0xDFD4},{0x7968, 0xF8F9},{0x796D, 0xF0AE},{0x797A, 0xD1B8},{0x797F, 0xD6DF},{0x7981, 0xD0D7},{0x798D, 0xFCA1},
- {0x798E, 0xEFEE},{0x798F, 0xDCD8},{0x7991, 0xE9DF},{0x79A6, 0xE5DD},{0x79A7, 0xFDFB},{0x79AA, 0xE0C9},{0x79AE, 0xD6C9},{0x79B1, 0xD4AA},
- {0x79B3, 0xE5CC},{0x79B9, 0xE9E0},{0x79BD, 0xD0D8},{0x79BE, 0xFCA2},{0x79BF, 0xD4BE},{0x79C0, 0xE2B3},{0x79C1, 0xDEE7},{0x79C9, 0xDCBC},
- {0x79CA, 0xD2B6},{0x79CB, 0xF5D5},{0x79D1, 0xCEA1},{0x79D2, 0xF5A9},{0x79D5, 0xDDF9},{0x79D8, 0xDDFA},{0x79DF, 0xF0D5},{0x79E4, 0xF6DF},
- {0x79E6, 0xF2DA},{0x79E7, 0xE4EB},{0x79E9, 0xF2F1},{0x79FB, 0xECB9},{0x7A00, 0xFDFC},{0x7A05, 0xE1AA},{0x7A08, 0xCAD9},{0x7A0B, 0xEFEF},
- {0x7A0D, 0xF5AA},{0x7A14, 0xECF9},{0x7A17, 0xF8AD},{0x7A19, 0xF2C2},{0x7A1A, 0xF6C3},{0x7A1C, 0xD7D2},{0x7A1F, 0xF9A2},{0x7A20, 0xF0D6},
- {0x7A2E, 0xF0FA},{0x7A31, 0xF6E0},{0x7A36, 0xE9F3},{0x7A37, 0xF2C3},{0x7A3B, 0xD4AB},{0x7A3C, 0xCAB3},{0x7A3D, 0xCDA6},{0x7A3F, 0xCDC3},
- {0x7A40, 0xCDDA},{0x7A46, 0xD9CF},{0x7A49, 0xF6C4},{0x7A4D, 0xEEDD},{0x7A4E, 0xE7C4},{0x7A57, 0xE2B4},{0x7A61, 0xDFE2},{0x7A62, 0xE7DB},
- {0x7A69, 0xE8B1},{0x7A6B, 0xFCAE},{0x7A70, 0xE5CD},{0x7A74, 0xFAEB},{0x7A76, 0xCFBC},{0x7A79, 0xCFE2},{0x7A7A, 0xCDF6},{0x7A7D, 0xEFF0},
- {0x7A7F, 0xF4BE},{0x7A81, 0xD4CD},{0x7A84, 0xF3B8},{0x7A88, 0xE9A1},{0x7A92, 0xF2F2},{0x7A93, 0xF3EB},{0x7A95, 0xF0D7},{0x7A98, 0xCFD7},
- {0x7A9F, 0xCFDF},{0x7AA9, 0xE8C0},{0x7AAA, 0xE8C1},{0x7AAE, 0xCFE3},{0x7AAF, 0xE9A2},{0x7ABA, 0xD0AA},{0x7AC4, 0xF3C1},{0x7AC5, 0xD0AB},
- {0x7AC7, 0xD4E4},{0x7ACA, 0xEFBC},{0x7ACB, 0xD8A1},{0x7AD7, 0xD9DF},{0x7AD9, 0xF3D7},{0x7ADD, 0xDCBD},{0x7ADF, 0xCCE5},{0x7AE0, 0xEDF1},
- {0x7AE3, 0xF1E2},{0x7AE5, 0xD4DB},{0x7AEA, 0xE2B5},{0x7AED, 0xCAE6},{0x7AEF, 0xD3AE},{0x7AF6, 0xCCE6},{0x7AF9, 0xF1D3},{0x7AFA, 0xF5E7},
- {0x7AFF, 0xCADA},{0x7B0F, 0xFBEE},{0x7B11, 0xE1C5},{0x7B19, 0xDFE9},{0x7B1B, 0xEEDE},{0x7B1E, 0xF7C2},{0x7B20, 0xD8A2},{0x7B26, 0xDDAC},
- {0x7B2C, 0xF0AF},{0x7B2D, 0xD6BD},{0x7B39, 0xE1AB},{0x7B46, 0xF9B6},{0x7B49, 0xD4F5},{0x7B4B, 0xD0C9},{0x7B4C, 0xEFA7},{0x7B4D, 0xE2EC},
- {0x7B4F, 0xDBEA},{0x7B50, 0xCECC},{0x7B51, 0xF5E8},{0x7B52, 0xF7D5},{0x7B54, 0xD3CD},{0x7B56, 0xF3FE},{0x7B60, 0xD0B5},{0x7B6C, 0xE0FE},
- {0x7B6E, 0xDFFB},{0x7B75, 0xE6DD},{0x7B7D, 0xE8A4},{0x7B87, 0xCBCD},{0x7B8B, 0xEFA8},{0x7B8F, 0xEEB4},{0x7B94, 0xDAD8},{0x7B95, 0xD1B9},
- {0x7B97, 0xDFA9},{0x7B9A, 0xF3B0},{0x7B9D, 0xCCC4},{0x7BA1, 0xCEB7},{0x7BAD, 0xEFA9},{0x7BB1, 0xDFD5},{0x7BB4, 0xEDD7},{0x7BB8, 0xEEC6},
- {0x7BC0, 0xEFBD},{0x7BC1, 0xFCD6},{0x7BC4, 0xDBF4},{0x7BC6, 0xEFAA},{0x7BC7, 0xF8B9},{0x7BC9, 0xF5E9},{0x7BD2, 0xE3D9},{0x7BE0, 0xE1C6},
- {0x7BE4, 0xD4BF},{0x7BE9, 0xDEE8},{0x7C07, 0xF0EA},{0x7C12, 0xF3C2},{0x7C1E, 0xD3AF},{0x7C21, 0xCADB},{0x7C27, 0xFCD7},{0x7C2A, 0xEDD8},
- {0x7C2B, 0xE1C7},{0x7C3D, 0xF4D8},{0x7C3E, 0xD6B3},{0x7C3F, 0xDDAD},{0x7C43, 0xD5BE},{0x7C4C, 0xF1C3},{0x7C4D, 0xEEDF},{0x7C60, 0xD6EB},
- {0x7C64, 0xF4D9},{0x7C6C, 0xD7E6},{0x7C73, 0xDAB7},{0x7C83, 0xDDFB},{0x7C89, 0xDDCF},{0x7C92, 0xD8A3},{0x7C95, 0xDAD9},{0x7C97, 0xF0D8},
- {0x7C98, 0xEFC4},{0x7C9F, 0xE1D8},{0x7CA5, 0xF1D4},{0x7CA7, 0xEDF2},{0x7CAE, 0xD5DB},{0x7CB1, 0xD5DC},{0x7CB2, 0xF3C4},{0x7CB3, 0xCBD7},
- {0x7CB9, 0xE2B6},{0x7CBE, 0xEFF1},{0x7CCA, 0xFBD5},{0x7CD6, 0xD3D8},{0x7CDE, 0xDDD0},{0x7CDF, 0xF0D9},{0x7CE0, 0xCBB3},{0x7CE7, 0xD5DD},
- {0x7CFB, 0xCDA7},{0x7CFE, 0xD0AC},{0x7D00, 0xD1BA},{0x7D02, 0xF1C4},{0x7D04, 0xE5B3},{0x7D05, 0xFBF5},{0x7D06, 0xE9E1},{0x7D07, 0xFDE0},
- {0x7D08, 0xFCBC},{0x7D0A, 0xDAA2},{0x7D0B, 0xDAA3},{0x7D0D, 0xD2A1},{0x7D10, 0xD2EF},{0x7D14, 0xE2ED},{0x7D17, 0xDEE9},{0x7D18, 0xCEDC},
- {0x7D19, 0xF2B5},{0x7D1A, 0xD0E4},{0x7D1B, 0xDDD1},{0x7D20, 0xE1C8},{0x7D21, 0xDBB7},{0x7D22, 0xDFE3},{0x7D2B, 0xEDB9},{0x7D2C, 0xF1C5},
- {0x7D2E, 0xF3CF},{0x7D2F, 0xD7AB},{0x7D30, 0xE1AC},{0x7D33, 0xE3EB},{0x7D35, 0xEEC7},{0x7D39, 0xE1C9},{0x7D3A, 0xCAFA},{0x7D42, 0xF0FB},
- {0x7D43, 0xFAE1},{0x7D44, 0xF0DA},{0x7D45, 0xCCE7},{0x7D46, 0xDAF4},{0x7D50, 0xCCBF},{0x7D5E, 0xCEED},{0x7D61, 0xD5A9},{0x7D62, 0xFAE2},
- {0x7D66, 0xD0E5},{0x7D68, 0xEBD6},{0x7D6A, 0xECDF},{0x7D6E, 0xDFFC},{0x7D71, 0xF7D6},{0x7D72, 0xDEEA},{0x7D73, 0xCBB4},{0x7D76, 0xEFBE},
- {0x7D79, 0xCCB5},{0x7D7F, 0xCFBD},{0x7D8E, 0xEFF2},{0x7D8F, 0xE2B7},{0x7D93, 0xCCE8},{0x7D9C, 0xF0FC},{0x7DA0, 0xD6E0},{0x7DA2, 0xF1C6},
- {0x7DAC, 0xE2B8},{0x7DAD, 0xEBAB},{0x7DB1, 0xCBB5},{0x7DB2, 0xD8D1},{0x7DB4, 0xF4CE},{0x7DB5, 0xF3F7},{0x7DB8, 0xD7C6},{0x7DBA, 0xD1BB},
- {0x7DBB, 0xF7AA},{0x7DBD, 0xEDCA},{0x7DBE, 0xD7D3},{0x7DBF, 0xD8FA},{0x7DC7, 0xF6C5},{0x7DCA, 0xD1CC},{0x7DCB, 0xDDFC},{0x7DD6, 0xDFFD},
- {0x7DD8, 0xF9E5},{0x7DDA, 0xE0CA},{0x7DDD, 0xF2FD},{0x7DDE, 0xD3B0},{0x7DE0, 0xF4F3},{0x7DE1, 0xDAC9},{0x7DE3, 0xE6DE},{0x7DE8, 0xF8BA},
- {0x7DE9, 0xE8D0},{0x7DEC, 0xD8FB},{0x7DEF, 0xEAD5},{0x7DF4, 0xD6A3},{0x7DFB, 0xF6C6},{0x7E09, 0xF2DB},{0x7E0A, 0xE4FC},{0x7E15, 0xE8B2},
- {0x7E1B, 0xDADA},{0x7E1D, 0xF2DC},{0x7E1E, 0xFBD6},{0x7E1F, 0xE9B2},{0x7E21, 0xEEAD},{0x7E23, 0xFAE3},{0x7E2B, 0xDCEE},{0x7E2E, 0xF5EA},
- {0x7E2F, 0xE6E0},{0x7E31, 0xF0FD},{0x7E37, 0xD7AC},{0x7E3D, 0xF5C5},{0x7E3E, 0xEEE0},{0x7E41, 0xDBE5},{0x7E43, 0xDDDE},{0x7E46, 0xD9F0},
- {0x7E47, 0xE9A3},{0x7E52, 0xF1F9},{0x7E54, 0xF2C4},{0x7E55, 0xE0CB},{0x7E5E, 0xE9A4},{0x7E61, 0xE2B9},{0x7E69, 0xE3B1},{0x7E6A, 0xFCEB},
- {0x7E6B, 0xCDA8},{0x7E6D, 0xCCB6},{0x7E70, 0xF0DB},{0x7E79, 0xE6BA},{0x7E7C, 0xCDA9},{0x7E82, 0xF3C3},{0x7E8C, 0xE1D9},{0x7E8F, 0xEFAB},
- {0x7E93, 0xE7C5},{0x7E96, 0xE0E9},{0x7E98, 0xF3C5},{0x7E9B, 0xD4C0},{0x7E9C, 0xD5BF},{0x7F36, 0xDDAE},{0x7F38, 0xF9FC},{0x7F3A, 0xCCC0},
- {0x7F4C, 0xE5A2},{0x7F50, 0xCEB8},{0x7F54, 0xD8D2},{0x7F55, 0xF9D6},{0x7F6A, 0xF1AA},{0x7F6B, 0xCED1},{0x7F6E, 0xF6C7},{0x7F70, 0xDBEB},
- {0x7F72, 0xDFFE},{0x7F75, 0xD8E1},{0x7F77, 0xF7F3},{0x7F79, 0xD7E7},{0x7F85, 0xD4FE},{0x7F88, 0xD1BC},{0x7F8A, 0xE5CF},{0x7F8C, 0xCBB6},
- {0x7F8E, 0xDAB8},{0x7F94, 0xCDC4},{0x7F9A, 0xD6BE},{0x7F9E, 0xE2BA},{0x7FA4, 0xCFD8},{0x7FA8, 0xE0CC},{0x7FA9, 0xEBF9},{0x7FB2, 0xFDFD},
- {0x7FB8, 0xD7E8},{0x7FB9, 0xCBD8},{0x7FBD, 0xE9E2},{0x7FC1, 0xE8BA},{0x7FC5, 0xE3C7},{0x7FCA, 0xECCD},{0x7FCC, 0xECCE},{0x7FCE, 0xD6BF},
- {0x7FD2, 0xE3A7},{0x7FD4, 0xDFD6},{0x7FD5, 0xFDE8},{0x7FDF, 0xEEE1},{0x7FE0, 0xF6A8},{0x7FE1, 0xDDFD},{0x7FE9, 0xF8BB},{0x7FEB, 0xE8D1},
- {0x7FF0, 0xF9D7},{0x7FF9, 0xCEEE},{0x7FFC, 0xECCF},{0x8000, 0xE9A5},{0x8001, 0xD6D5},{0x8003, 0xCDC5},{0x8005, 0xEDBA},{0x8006, 0xD1BD},
- {0x8009, 0xCFBE},{0x800C, 0xECBB},{0x8010, 0xD2B1},{0x8015, 0xCCE9},{0x8017, 0xD9C4},{0x8018, 0xE9FC},{0x802D, 0xD1BE},{0x8033, 0xECBC},
- {0x8036, 0xE5AD},{0x803D, 0xF7B0},{0x803F, 0xCCEA},{0x8043, 0xD3C4},{0x8046, 0xD6C0},{0x804A, 0xD6FD},{0x8056, 0xE1A1},{0x8058, 0xDEBD},
- {0x805A, 0xF6A9},{0x805E, 0xDAA4},{0x806F, 0xD6A4},{0x8070, 0xF5C6},{0x8072, 0xE1A2},{0x8073, 0xE9C6},{0x8077, 0xF2C5},{0x807D, 0xF4E9},
- {0x807E, 0xD6EC},{0x807F, 0xEBD3},{0x8084, 0xECBD},{0x8085, 0xE2DC},{0x8086, 0xDEEB},{0x8087, 0xF0DC},{0x8089, 0xEBBF},{0x808B, 0xD7CE},
- {0x808C, 0xD1BF},{0x8096, 0xF5AB},{0x809B, 0xF9FD},{0x809D, 0xCADC},{0x80A1, 0xCDC6},{0x80A2, 0xF2B6},{0x80A5, 0xDDFE},{0x80A9, 0xCCB7},
- {0x80AA, 0xDBB8},{0x80AF, 0xD0E9},{0x80B1, 0xCEDD},{0x80B2, 0xEBC0},{0x80B4, 0xFDA2},{0x80BA, 0xF8CB},{0x80C3, 0xEAD6},{0x80C4, 0xF1B0},
- {0x80CC, 0xDBCE},{0x80CE, 0xF7C3},{0x80DA, 0xDBCF},{0x80DB, 0xCBA4},{0x80DE, 0xF8E0},{0x80E1, 0xFBD7},{0x80E4, 0xEBCA},{0x80E5, 0xE0A1},
- {0x80F1, 0xCECD},{0x80F4, 0xD4DC},{0x80F8, 0xFDD8},{0x80FD, 0xD2F6},{0x8102, 0xF2B7},{0x8105, 0xFAF6},{0x8106, 0xF6AA},{0x8107, 0xFAF7},
- {0x8108, 0xD8E6},{0x810A, 0xF4B1},{0x8118, 0xE8D2},{0x811A, 0xCAC5},{0x811B, 0xCCEB},{0x8123, 0xE2EE},{0x8129, 0xE2BB},{0x812B, 0xF7AD},
- {0x812F, 0xF8E1},{0x8139, 0xF3EC},{0x813E, 0xDEA1},{0x814B, 0xE4FD},{0x814E, 0xE3EC},{0x8150, 0xDDAF},{0x8151, 0xDDB0},{0x8154, 0xCBB7},
- {0x8155, 0xE8D3},{0x8165, 0xE1A3},{0x8166, 0xD2E0},{0x816B, 0xF0FE},{0x8170, 0xE9A6},{0x8171, 0xCBF2},{0x8178, 0xEDF3},{0x8179, 0xDCD9},
- {0x817A, 0xE0CD},{0x817F, 0xF7DA},{0x8180, 0xDBB9},{0x8188, 0xCCAE},{0x818A, 0xDADB},{0x818F, 0xCDC7},{0x819A, 0xDDB1},{0x819C, 0xD8AF},
- {0x819D, 0xE3A3},{0x81A0, 0xCEEF},{0x81A3, 0xF2F3},{0x81A8, 0xF8B3},{0x81B3, 0xE0CE},{0x81B5, 0xF5FD},{0x81BA, 0xEBEC},{0x81BD, 0xD3C5},
- {0x81BE, 0xFCEC},{0x81BF, 0xD2DB},{0x81C0, 0xD4EB},{0x81C2, 0xDEA2},{0x81C6, 0xE5E6},{0x81CD, 0xF0B0},{0x81D8, 0xD5C4},{0x81DF, 0xEDF4},
- {0x81E3, 0xE3ED},{0x81E5, 0xE8C2},{0x81E7, 0xEDF5},{0x81E8, 0xD7FC},{0x81EA, 0xEDBB},{0x81ED, 0xF6AB},{0x81F3, 0xF2B8},{0x81F4, 0xF6C8},
- {0x81FA, 0xD3E6},{0x81FB, 0xF2DD},{0x81FC, 0xCFBF},{0x81FE, 0xEBAC},{0x8205, 0xCFC0},{0x8207, 0xE6A8},{0x8208, 0xFDE9},{0x820A, 0xCFC1},
- {0x820C, 0xE0DF},{0x820D, 0xDEEC},{0x8212, 0xE0A2},{0x821B, 0xF4BF},{0x821C, 0xE2EF},{0x821E, 0xD9F1},{0x821F, 0xF1C7},{0x8221, 0xCBB8},
- {0x822A, 0xF9FE},{0x822B, 0xDBBA},{0x822C, 0xDAF5},{0x8235, 0xF6EC},{0x8236, 0xDADC},{0x8237, 0xFAE4},{0x8239, 0xE0CF},{0x8240, 0xDDB2},
- {0x8245, 0xE6A9},{0x8247, 0xEFF3},{0x8259, 0xF3ED},{0x8264, 0xEBFA},{0x8266, 0xF9E6},{0x826E, 0xCADD},{0x826F, 0xD5DE},{0x8271, 0xCADE},
- {0x8272, 0xDFE4},{0x8276, 0xE6FD},{0x8278, 0xF5AC},{0x827E, 0xE4F5},{0x828B, 0xE9E3},{0x828D, 0xEDCB},{0x828E, 0xCFE4},{0x8292, 0xD8D3},
- {0x8299, 0xDDB3},{0x829A, 0xD4EC},{0x829D, 0xF2B9},{0x829F, 0xDFB7},{0x82A5, 0xCBCE},{0x82A6, 0xFBD8},{0x82A9, 0xD0D9},{0x82AC, 0xDDD2},
- {0x82AD, 0xF7F4},{0x82AE, 0xE7DC},{0x82AF, 0xE4A5},{0x82B1, 0xFCA3},{0x82B3, 0xDBBB},{0x82B7, 0xF2BA},{0x82B8, 0xE9FD},{0x82B9, 0xD0CA},
- {0x82BB, 0xF5D6},{0x82BC, 0xD9C5},{0x82BD, 0xE4B4},{0x82BF, 0xEDA7},{0x82D1, 0xEABD},{0x82D2, 0xE6FE},{0x82D4, 0xF7C4},{0x82D5, 0xF5AD},
- {0x82D7, 0xD9E0},{0x82DB, 0xCAB4},{0x82DE, 0xF8E2},{0x82DF, 0xCFC2},{0x82E1, 0xECBE},{0x82E5, 0xE5B4},{0x82E6, 0xCDC8},{0x82E7, 0xEEC8},
- {0x82F1, 0xE7C8},{0x82FD, 0xCDC9},{0x82FE, 0xF9B7},{0x8301, 0xF1E8},{0x8302, 0xD9F2},{0x8303, 0xDBF5},{0x8304, 0xCAB5},{0x8305, 0xD9C6},
- {0x8309, 0xD8C9},{0x8317, 0xD9AB},{0x8328, 0xEDBC},{0x832B, 0xD8D4},{0x832F, 0xDCDA},{0x8331, 0xE2BC},{0x8334, 0xFCED},{0x8335, 0xECE0},
- {0x8336, 0xD2FE},{0x8338, 0xE9C7},{0x8339, 0xE6AA},{0x8340, 0xE2F0},{0x8347, 0xFABB},{0x8349, 0xF5AE},{0x834A, 0xFBAA},{0x834F, 0xECFB},
- {0x8351, 0xECBF},{0x8352, 0xFCD8},{0x8373, 0xD4E5},{0x8377, 0xF9C3},{0x837B, 0xEEE2},{0x8389, 0xD7E9},{0x838A, 0xEDF6},{0x838E, 0xDEED},
- {0x8396, 0xCCEC},{0x8398, 0xE3EE},{0x839E, 0xE8D4},{0x83A2, 0xFAF8},{0x83A9, 0xDDB4},{0x83AA, 0xE4B5},{0x83AB, 0xD8B0},{0x83BD, 0xD8D5},
- {0x83C1, 0xF4EA},{0x83C5, 0xCEB9},{0x83C9, 0xD6E1},{0x83CA, 0xCFD2},{0x83CC, 0xD0B6},{0x83D3, 0xCEA2},{0x83D6, 0xF3EE},{0x83DC, 0xF3F8},
- {0x83E9, 0xDCCC},{0x83EB, 0xD0CB},{0x83EF, 0xFCA4},{0x83F0, 0xCDCA},{0x83F1, 0xD7D4},{0x83F2, 0xDEA3},{0x83F4, 0xE4E0},{0x83F9, 0xEEC9},
- {0x83FD, 0xE2DD},{0x8403, 0xF5FE},{0x8404, 0xD4AC},{0x840A, 0xD5D1},{0x840C, 0xD8F0},{0x840D, 0xF8C3},{0x840E, 0xEAD7},{0x8429, 0xF5D7},
- {0x842C, 0xD8BF},{0x8431, 0xFDC0},{0x8438, 0xEBAD},{0x843D, 0xD5AA},{0x8449, 0xE7A8},{0x8457, 0xEECA},{0x845B, 0xCAE7},{0x8461, 0xF8E3},
- {0x8463, 0xD4DD},{0x8466, 0xEAD8},{0x846B, 0xFBD9},{0x846C, 0xEDF7},{0x846F, 0xE5B5},{0x8475, 0xD0AD},{0x847A, 0xF1F1},{0x8490, 0xE2BD},
- {0x8494, 0xE3C8},{0x8499, 0xD9D5},{0x849C, 0xDFAA},{0x84A1, 0xDBBC},{0x84B2, 0xF8E4},{0x84B8, 0xF1FA},{0x84BB, 0xE5B6},{0x84BC, 0xF3EF},
- {0x84BF, 0xFBDA},{0x84C0, 0xE1E0},{0x84C2, 0xD9AC},{0x84C4, 0xF5EB},{0x84C6, 0xE0B6},{0x84C9, 0xE9C8},{0x84CB, 0xCBCF},{0x84CD, 0xE3C9},
- {0x84D1, 0xDEEE},{0x84DA, 0xE2BE},{0x84EC, 0xDCEF},{0x84EE, 0xD6A5},{0x84F4, 0xE2F1},{0x84FC, 0xD6FE},{0x8511, 0xD9A1},{0x8513, 0xD8C0},
- {0x8514, 0xDCDB},{0x8517, 0xEDBD},{0x8518, 0xDFB8},{0x851A, 0xEAA5},{0x851E, 0xD7AD},{0x8521, 0xF3F9},{0x8523, 0xEDF8},{0x8525, 0xF5C7},
- {0x852C, 0xE1CA},{0x852D, 0xEBE3},{0x852F, 0xF2DE},{0x853D, 0xF8CC},{0x853F, 0xEAD9},{0x8541, 0xD3C6},{0x8543, 0xDBE6},{0x8549, 0xF5AF},
- {0x854E, 0xCEF0},{0x8553, 0xE9FE},{0x8559, 0xFBB6},{0x8563, 0xE2F2},{0x8568, 0xCFF2},{0x8569, 0xF7B9},{0x856A, 0xD9F3},{0x856D, 0xE1CB},
- {0x8584, 0xDADD},{0x8587, 0xDAB9},{0x858F, 0xEBFB},{0x8591, 0xCBB9},{0x8594, 0xEDF9},{0x859B, 0xE0E0},{0x85A6, 0xF4C0},{0x85A8, 0xFDBC},
- {0x85A9, 0xDFB1},{0x85AA, 0xE3EF},{0x85AF, 0xE0A3},{0x85B0, 0xFDB9},{0x85BA, 0xF0B1},{0x85C1, 0xCDCB},{0x85C9, 0xEDBE},{0x85CD, 0xD5C0},
- {0x85CE, 0xE3F0},{0x85CF, 0xEDFA},{0x85D5, 0xE9E4},{0x85DC, 0xD5ED},{0x85DD, 0xE7DD},{0x85E4, 0xD4F6},{0x85E5, 0xE5B7},{0x85E9, 0xDBE7},
- {0x85EA, 0xE2BF},{0x85F7, 0xEECB},{0x85FA, 0xD7F4},{0x85FB, 0xF0DD},{0x85FF, 0xCEAB},{0x8602, 0xE7DE},{0x8606, 0xD6D6},{0x8607, 0xE1CC},
- {0x860A, 0xE8B3},{0x8616, 0xE5EE},{0x8617, 0xDCA2},{0x861A, 0xE0D0},{0x862D, 0xD5B5},{0x863F, 0xD5A1},{0x864E, 0xFBDB},{0x8650, 0xF9CB},
- {0x8654, 0xCBF3},{0x8655, 0xF4A5},{0x865B, 0xFAC8},{0x865C, 0xD6D7},{0x865E, 0xE9E5},{0x865F, 0xFBDC},{0x8667, 0xFDD0},{0x8679, 0xFBF6},
- {0x868A, 0xDAA5},{0x868C, 0xDBBD},{0x8693, 0xECE2},{0x86A3, 0xCDF7},{0x86A4, 0xF0DE},{0x86A9, 0xF6C9},{0x86C7, 0xDEEF},{0x86CB, 0xD3B1},
- {0x86D4, 0xFCEE},{0x86D9, 0xE8C3},{0x86DB, 0xF1C8},{0x86DF, 0xCEF1},{0x86E4, 0xF9ED},{0x86ED, 0xF2F4},{0x86FE, 0xE4B6},{0x8700, 0xF5B9},
- {0x8702, 0xDCF0},{0x8703, 0xE3F1},{0x8708, 0xE8A5},{0x8718, 0xF2BB},{0x871A, 0xDEA4},{0x871C, 0xDACC},{0x874E, 0xCAE9},{0x8755, 0xE3DA},
- {0x8757, 0xFCD9},{0x875F, 0xEADA},{0x8766, 0xF9C4},{0x8768, 0xE3A4},{0x8774, 0xFBDD},{0x8776, 0xEFCA},{0x8778, 0xE8C4},{0x8782, 0xD5CC},
- {0x878D, 0xEBD7},{0x879F, 0xD9AD},{0x87A2, 0xFBAB},{0x87B3, 0xD3D9},{0x87BA, 0xD5A2},{0x87C4, 0xF6DE},{0x87E0, 0xDAF6},{0x87EC, 0xE0D1},
- {0x87EF, 0xE9A8},{0x87F2, 0xF5F9},{0x87F9, 0xFAAF},{0x87FB, 0xEBFC},{0x87FE, 0xE0EA},{0x8805, 0xE3B2},{0x881F, 0xD5C5},{0x8822, 0xF1E3},
- {0x8823, 0xD5EE},{0x8831, 0xCDCC},{0x8836, 0xEDD9},{0x883B, 0xD8C1},{0x8840, 0xFAEC},{0x8846, 0xF1EB},{0x884C, 0xFABC},{0x884D, 0xE6E2},
- {0x8852, 0xFAE5},{0x8853, 0xE2FA},{0x8857, 0xCAB6},{0x8859, 0xE4B7},{0x885B, 0xEADB},{0x885D, 0xF5FA},{0x8861, 0xFBAC},{0x8862, 0xCFC3},
- {0x8863, 0xEBFD},{0x8868, 0xF8FA},{0x886B, 0xDFB9},{0x8870, 0xE1F1},{0x8872, 0xD2A4},{0x8877, 0xF5FB},{0x887E, 0xD0DA},{0x887F, 0xD0DB},
- {0x8881, 0xEABE},{0x8882, 0xD9B1},{0x8888, 0xCAB7},{0x888B, 0xD3E7},{0x888D, 0xF8E5},{0x8892, 0xD3B2},{0x8896, 0xE2C0},{0x8897, 0xF2DF},
- {0x889E, 0xCDE5},{0x88AB, 0xF9AC},{0x88B4, 0xCDCD},{0x88C1, 0xEEAE},{0x88C2, 0xD6AE},{0x88CF, 0xD7EA},{0x88D4, 0xE7E0},{0x88D5, 0xEBAE},
- {0x88D9, 0xCFD9},{0x88DC, 0xDCCD},{0x88DD, 0xEDFB},{0x88DF, 0xDEF0},{0x88E1, 0xD7EB},{0x88E8, 0xDEA5},{0x88F3, 0xDFD7},{0x88F4, 0xDBD0},
- {0x88F5, 0xDBD1},{0x88F8, 0xD5A3},{0x88FD, 0xF0B2},{0x8907, 0xDCDC},{0x8910, 0xCAE8},{0x8912, 0xF8E6},{0x8913, 0xDCCE},{0x8918, 0xEADC},
- {0x8919, 0xDBD2},{0x8925, 0xE9B3},{0x892A, 0xF7DB},{0x8936, 0xE3A8},{0x8938, 0xD7AE},{0x893B, 0xE0E1},{0x8941, 0xCBBA},{0x8944, 0xE5D1},
- {0x895F, 0xD0DC},{0x8964, 0xD5C1},{0x896A, 0xD8CA},{0x8972, 0xE3A9},{0x897F, 0xE0A4},{0x8981, 0xE9A9},{0x8983, 0xD3C7},{0x8986, 0xDCDD},
- {0x8987, 0xF8AE},{0x898B, 0xCCB8},{0x898F, 0xD0AE},{0x8993, 0xD8F2},{0x8996, 0xE3CA},{0x89A1, 0xCCAF},{0x89A9, 0xD4AD},{0x89AA, 0xF6D1},
- {0x89B2, 0xD0CC},{0x89BA, 0xCAC6},{0x89BD, 0xD5C2},{0x89C0, 0xCEBA},{0x89D2, 0xCAC7},{0x89E3, 0xFAB0},{0x89F4, 0xDFD8},{0x89F8, 0xF5BA},
- {0x8A00, 0xE5EB},{0x8A02, 0xEFF4},{0x8A03, 0xDDB5},{0x8A08, 0xCDAA},{0x8A0A, 0xE3F2},{0x8A0C, 0xFBF7},{0x8A0E, 0xF7D0},{0x8A13, 0xFDBA},
- {0x8A16, 0xFDE1},{0x8A17, 0xF6FE},{0x8A18, 0xD1C0},{0x8A1B, 0xE8C5},{0x8A1D, 0xE4B8},{0x8A1F, 0xE1E8},{0x8A23, 0xCCC1},{0x8A25, 0xD2ED},
- {0x8A2A, 0xDBBE},{0x8A2D, 0xE0E2},{0x8A31, 0xFAC9},{0x8A34, 0xE1CD},{0x8A36, 0xCAB8},{0x8A3A, 0xF2E0},{0x8A3B, 0xF1C9},{0x8A50, 0xDEF1},
- {0x8A54, 0xF0DF},{0x8A55, 0xF8C4},{0x8A5B, 0xEECC},{0x8A5E, 0xDEF2},{0x8A60, 0xE7C9},{0x8A62, 0xE2F3},{0x8A63, 0xE7E1},{0x8A66, 0xE3CB},
- {0x8A69, 0xE3CC},{0x8A6D, 0xCFF8},{0x8A6E, 0xEFAC},{0x8A70, 0xFDFE},{0x8A71, 0xFCA5},{0x8A72, 0xFAB1},{0x8A73, 0xDFD9},{0x8A75, 0xE0D2},
- {0x8A79, 0xF4DA},{0x8A85, 0xF1CA},{0x8A87, 0xCEA3},{0x8A8C, 0xF2BC},{0x8A8D, 0xECE3},{0x8A93, 0xE0A5},{0x8A95, 0xF7AB},{0x8A98, 0xEBAF},
- {0x8A9E, 0xE5DE},{0x8AA0, 0xE1A4},{0x8AA1, 0xCDAB},{0x8AA3, 0xD9F4},{0x8AA4, 0xE8A6},{0x8AA5, 0xCDCE},{0x8AA6, 0xE1E9},{0x8AA8, 0xFCEF},
- {0x8AAA, 0xE0E3},{0x8AB0, 0xE2C1},{0x8AB2, 0xCEA4},{0x8AB9, 0xDEA6},{0x8ABC, 0xEBFE},{0x8ABE, 0xEBDD},{0x8ABF, 0xF0E0},{0x8AC2, 0xF4DB},
- {0x8AC4, 0xE2F4},{0x8AC7, 0xD3C8},{0x8ACB, 0xF4EB},{0x8ACD, 0xEEB5},{0x8ACF, 0xF5D8},{0x8AD2, 0xD5DF},{0x8AD6, 0xD6E5},{0x8ADB, 0xEBB0},
- {0x8ADC, 0xF4E3},{0x8AE1, 0xE3CD},{0x8AE6, 0xF4F4},{0x8AE7, 0xFAB2},{0x8AEA, 0xEFF5},{0x8AEB, 0xCADF},{0x8AED, 0xEBB1},{0x8AEE, 0xEDBF},
- {0x8AF1, 0xFDC9},{0x8AF6, 0xE4A6},{0x8AF7, 0xF9A4},{0x8AF8, 0xF0B3},{0x8AFA, 0xE5EC},{0x8AFE, 0xD1E7},{0x8B00, 0xD9C7},{0x8B01, 0xE4D7},
- {0x8B02, 0xEADD},{0x8B04, 0xD4F7},{0x8B0E, 0xDABA},{0x8B10, 0xDACD},{0x8B14, 0xF9CC},{0x8B16, 0xE1DA},{0x8B17, 0xDBBF},{0x8B19, 0xCCC5},
- {0x8B1A, 0xECD0},{0x8B1B, 0xCBBB},{0x8B1D, 0xDEF3},{0x8B20, 0xE9AA},{0x8B28, 0xD9C8},{0x8B2B, 0xEEE3},{0x8B2C, 0xD7BD},{0x8B33, 0xCFC4},
- {0x8B39, 0xD0CD},{0x8B41, 0xFCA6},{0x8B49, 0xF1FB},{0x8B4E, 0xFDD2},{0x8B4F, 0xD1C1},{0x8B58, 0xE3DB},{0x8B5A, 0xD3C9},{0x8B5C, 0xDCCF},
- {0x8B66, 0xCCED},{0x8B6C, 0xDEA7},{0x8B6F, 0xE6BB},{0x8B70, 0xECA1},{0x8B74, 0xCCB9},{0x8B77, 0xFBDE},{0x8B7D, 0xE7E2},{0x8B80, 0xD4C1},
- {0x8B8A, 0xDCA8},{0x8B90, 0xE2C2},{0x8B92, 0xF3D8},{0x8B93, 0xE5D3},{0x8B96, 0xF3D9},{0x8B9A, 0xF3C6},{0x8C37, 0xCDDB},{0x8C3F, 0xCDAC},
- {0x8C41, 0xFCC3},{0x8C46, 0xD4E7},{0x8C48, 0xD1C2},{0x8C4A, 0xF9A5},{0x8C4C, 0xE8D5},{0x8C55, 0xE3CE},{0x8C5A, 0xD4CA},{0x8C61, 0xDFDA},
- {0x8C6A, 0xFBDF},{0x8C6B, 0xE7E3},{0x8C79, 0xF8FB},{0x8C7A, 0xE3CF},{0x8C82, 0xF5B0},{0x8C8A, 0xD8E7},{0x8C8C, 0xD9C9},{0x8C9D, 0xF8AF},
- {0x8C9E, 0xEFF6},{0x8CA0, 0xDDB6},{0x8CA1, 0xEEAF},{0x8CA2, 0xCDF8},{0x8CA7, 0xDEB8},{0x8CA8, 0xFCA7},{0x8CA9, 0xF7FC},{0x8CAA, 0xF7B1},
- {0x8CAB, 0xCEBB},{0x8CAC, 0xF4A1},{0x8CAF, 0xEECD},{0x8CB0, 0xE1AE},{0x8CB3, 0xECC3},{0x8CB4, 0xCFFE},{0x8CB6, 0xF8BF},{0x8CB7, 0xD8E2},
- {0x8CB8, 0xD3E8},{0x8CBB, 0xDEA8},{0x8CBC, 0xF4E4},{0x8CBD, 0xECC2},{0x8CBF, 0xD9F5},{0x8CC0, 0xF9C5},{0x8CC1, 0xDDD3},{0x8CC2, 0xD6F1},
- {0x8CC3, 0xECFC},{0x8CC4, 0xFCF0},{0x8CC7, 0xEDC0},{0x8CC8, 0xCAB9},{0x8CCA, 0xEEE4},{0x8CD1, 0xF2E1},{0x8CD3, 0xDEB9},{0x8CDA, 0xD6F2},
- {0x8CDC, 0xDEF4},{0x8CDE, 0xDFDB},{0x8CE0, 0xDBD3},{0x8CE2, 0xFAE7},{0x8CE3, 0xD8E3},{0x8CE4, 0xF4C1},{0x8CE6, 0xDDB7},{0x8CEA, 0xF2F5},
- {0x8CED, 0xD4AE},{0x8CF4, 0xD6F3},{0x8CFB, 0xDDB8},{0x8CFC, 0xCFC5},{0x8CFD, 0xDFDF},{0x8D04, 0xF2BE},{0x8D05, 0xF6A1},{0x8D07, 0xEBCB},
- {0x8D08, 0xF1FC},{0x8D0A, 0xF3C7},{0x8D0D, 0xE0EB},{0x8D13, 0xEDFC},{0x8D16, 0xE1DB},{0x8D64, 0xEEE5},{0x8D66, 0xDEF5},{0x8D6B, 0xFAD3},
- {0x8D70, 0xF1CB},{0x8D73, 0xD0AF},{0x8D74, 0xDDB9},{0x8D77, 0xD1C3},{0x8D85, 0xF5B1},{0x8D8A, 0xEAC6},{0x8D99, 0xF0E1},{0x8DA3, 0xF6AC},
- {0x8DA8, 0xF5D9},{0x8DB3, 0xF0EB},{0x8DBA, 0xDDBA},{0x8DBE, 0xF2BF},{0x8DC6, 0xF7C5},{0x8DCB, 0xDBA2},{0x8DCC, 0xF2F6},{0x8DCF, 0xCABA},
- {0x8DDB, 0xF7F5},{0x8DDD, 0xCBE5},{0x8DE1, 0xEEE6},{0x8DE3, 0xE0D3},{0x8DE8, 0xCEA5},{0x8DEF, 0xD6D8},{0x8DF3, 0xD4AF},{0x8E0A, 0xE9C9},
- {0x8E0F, 0xD3CE},{0x8E10, 0xF4C2},{0x8E1E, 0xCBE6},{0x8E2A, 0xF1A1},{0x8E30, 0xEBB2},{0x8E35, 0xF1A2},{0x8E42, 0xEBB3},{0x8E44, 0xF0B4},
- {0x8E47, 0xCBF4},{0x8E48, 0xD4B0},{0x8E49, 0xF3B2},{0x8E4A, 0xFBB7},{0x8E59, 0xF5EC},{0x8E5F, 0xEEE7},{0x8E60, 0xF4B2},{0x8E74, 0xF5ED},
- {0x8E76, 0xCFF3},{0x8E81, 0xF0E2},{0x8E87, 0xEECE},{0x8E8A, 0xF1CC},{0x8E8D, 0xE5B8},{0x8EAA, 0xD7F5},{0x8EAB, 0xE3F3},{0x8EAC, 0xCFE5},
- {0x8EC0, 0xCFC6},{0x8ECA, 0xF3B3},{0x8ECB, 0xE4D8},{0x8ECC, 0xCFF9},{0x8ECD, 0xCFDA},{0x8ED2, 0xFACD},{0x8EDF, 0xE6E3},{0x8EEB, 0xF2E2},
- {0x8EF8, 0xF5EE},{0x8EFB, 0xCABB},{0x8EFE, 0xE3DC},{0x8F03, 0xCEF2},{0x8F05, 0xD6D9},{0x8F09, 0xEEB0},{0x8F12, 0xF4E5},{0x8F13, 0xD8C2},
- {0x8F14, 0xDCD0},{0x8F15, 0xCCEE},{0x8F1B, 0xD5E0},{0x8F1C, 0xF6CA},{0x8F1D, 0xFDCA},{0x8F1E, 0xD8D6},{0x8F1F, 0xF4CF},{0x8F26, 0xD6A6},
- {0x8F27, 0xDCBE},{0x8F29, 0xDBD4},{0x8F2A, 0xD7C7},{0x8F2F, 0xF2FE},{0x8F33, 0xF1CD},{0x8F38, 0xE2C3},{0x8F39, 0xDCDE},{0x8F3B, 0xDCDF},
- {0x8F3E, 0xEFAD},{0x8F3F, 0xE6AB},{0x8F44, 0xF9DD},{0x8F45, 0xEABF},{0x8F49, 0xEFAE},{0x8F4D, 0xF4D0},{0x8F4E, 0xCEF3},{0x8F5D, 0xE6AC},
- {0x8F5F, 0xCEDE},{0x8F62, 0xD5F9},{0x8F9B, 0xE3F4},{0x8F9C, 0xCDD0},{0x8FA3, 0xD5B8},{0x8FA6, 0xF7FD},{0x8FA8, 0xDCA9},{0x8FAD, 0xDEF6},
- {0x8FAF, 0xDCAA},{0x8FB0, 0xF2E3},{0x8FB1, 0xE9B4},{0x8FB2, 0xD2DC},{0x8FC2, 0xE9E6},{0x8FC5, 0xE3F6},{0x8FCE, 0xE7CA},{0x8FD1, 0xD0CE},
- {0x8FD4, 0xDAF7},{0x8FE6, 0xCABC},{0x8FEA, 0xEEE8},{0x8FEB, 0xDADE},{0x8FED, 0xF2F7},{0x8FF0, 0xE2FB},{0x8FF2, 0xCCA6},{0x8FF7, 0xDABB},
- {0x8FF9, 0xEEE9},{0x8FFD, 0xF5DA},{0x9000, 0xF7DC},{0x9001, 0xE1EA},{0x9002, 0xCEC1},{0x9003, 0xD4B1},{0x9005, 0xFDB1},{0x9006, 0xE6BD},
- {0x9008, 0xFBAD},{0x900B, 0xF8E7},{0x900D, 0xE1CE},{0x900F, 0xF7E2},{0x9010, 0xF5EF},{0x9011, 0xCFC7},{0x9014, 0xD4B2},{0x9015, 0xCCEF},
- {0x9017, 0xD4E8},{0x9019, 0xEECF},{0x901A, 0xF7D7},{0x901D, 0xE0A6},{0x901E, 0xD6C1},{0x901F, 0xE1DC},{0x9020, 0xF0E3},{0x9021, 0xF1E4},
- {0x9022, 0xDCF1},{0x9023, 0xD6A7},{0x902E, 0xF4F5},{0x9031, 0xF1CE},{0x9032, 0xF2E4},{0x9035, 0xD0B0},{0x9038, 0xECEF},{0x903C, 0xF9BA},
- {0x903E, 0xEBB5},{0x9041, 0xD4ED},{0x9042, 0xE2C4},{0x9047, 0xE9E7},{0x904A, 0xEBB4},{0x904B, 0xEAA1},{0x904D, 0xF8BC},{0x904E, 0xCEA6},
- {0x9050, 0xF9C6},{0x9051, 0xFCDA},{0x9053, 0xD4B3},{0x9054, 0xD3B9},{0x9055, 0xEADE},{0x9059, 0xE9AB},{0x905C, 0xE1E1},{0x905D, 0xD3CF},
- {0x905E, 0xF4F6},{0x9060, 0xEAC0},{0x9061, 0xE1CF},{0x9063, 0xCCBA},{0x9069, 0xEEEA},{0x906D, 0xF0E4},{0x906E, 0xF3B4},{0x906F, 0xD4EE},
- {0x9072, 0xF2C0},{0x9075, 0xF1E5},{0x9077, 0xF4C3},{0x9078, 0xE0D4},{0x907A, 0xEBB6},{0x907C, 0xD7A1},{0x907D, 0xCBE8},{0x907F, 0xF9AD},
- {0x9080, 0xE9AD},{0x9081, 0xD8E4},{0x9082, 0xFAB3},{0x9083, 0xE2C5},{0x9084, 0xFCBD},{0x9087, 0xECC4},{0x9088, 0xD8B1},{0x908A, 0xDCAB},
- {0x908F, 0xD5A4},{0x9091, 0xEBE9},{0x9095, 0xE8BB},{0x9099, 0xD8D7},{0x90A2, 0xFBAE},{0x90A3, 0xD1E1},{0x90A6, 0xDBC0},{0x90A8, 0xF5BE},
- {0x90AA, 0xDEF7},{0x90AF, 0xCAFB},{0x90B0, 0xF7C6},{0x90B1, 0xCFC8},{0x90B5, 0xE1D0},{0x90B8, 0xEED0},{0x90C1, 0xE9F4},{0x90CA, 0xCEF4},
- {0x90DE, 0xD5CD},{0x90E1, 0xCFDB},{0x90E8, 0xDDBB},{0x90ED, 0xCEAC},{0x90F5, 0xE9E8},{0x90FD, 0xD4B4},{0x9102, 0xE4C7},{0x9112, 0xF5DB},
- {0x9115, 0xFAC1},{0x9119, 0xDEA9},{0x9127, 0xD4F8},{0x912D, 0xEFF7},{0x9132, 0xD3B3},{0x9149, 0xEBB7},{0x914A, 0xEFF8},{0x914B, 0xF5DC},
- {0x914C, 0xEDCC},{0x914D, 0xDBD5},{0x914E, 0xF1CF},{0x9152, 0xF1D0},{0x9162, 0xF5B2},{0x9169, 0xD9AE},{0x916A, 0xD5AC},{0x916C, 0xE2C6},
- {0x9175, 0xFDA3},{0x9177, 0xFBE5},{0x9178, 0xDFAB},{0x9187, 0xE2F5},{0x9189, 0xF6AD},{0x918B, 0xF5B3},{0x918D, 0xF0B5},{0x9192, 0xE1A5},
- {0x919C, 0xF5DD},{0x91AB, 0xECA2},{0x91AC, 0xEDFD},{0x91AE, 0xF5B4},{0x91AF, 0xFBB8},{0x91B1, 0xDBA3},{0x91B4, 0xD6CA},{0x91B5, 0xCBD9},
- {0x91C0, 0xE5D4},{0x91C7, 0xF3FA},{0x91C9, 0xEBB8},{0x91CB, 0xE0B7},{0x91CC, 0xD7EC},{0x91CD, 0xF1EC},{0x91CE, 0xE5AF},{0x91CF, 0xD5E1},
- {0x91D0, 0xD7ED},{0x91D1, 0xD1D1},{0x91D7, 0xE1F2},{0x91D8, 0xEFF9},{0x91DC, 0xDDBC},{0x91DD, 0xF6DC},{0x91E3, 0xF0E5},{0x91E7, 0xF4C4},
- {0x91EA, 0xE9E9},{0x91F5, 0xF3FB},{0x920D, 0xD4EF},{0x9210, 0xCCA2},{0x9211, 0xF7FE},{0x9212, 0xDFBC},{0x9217, 0xEBCD},{0x921E, 0xD0B7},
- {0x9234, 0xD6C2},{0x923A, 0xE8AD},{0x923F, 0xEFAF},{0x9240, 0xCBA5},{0x9245, 0xCBE9},{0x9249, 0xFAE8},{0x9257, 0xCCC6},{0x925B, 0xE6E7},
- {0x925E, 0xEAC7},{0x9262, 0xDBA4},{0x9264, 0xCFC9},{0x9265, 0xE2FC},{0x9266, 0xEFFA},{0x9280, 0xEBDE},{0x9283, 0xF5C8},{0x9285, 0xD4DE},
- {0x9291, 0xE0D5},{0x9293, 0xEFB0},{0x9296, 0xE2C7},{0x9298, 0xD9AF},{0x929C, 0xF9E7},{0x92B3, 0xE7E5},{0x92B6, 0xCFCA},{0x92B7, 0xE1D1},
- {0x92B9, 0xE2C8},{0x92CC, 0xEFFB},{0x92CF, 0xFAF9},{0x92D2, 0xDCF2},{0x92E4, 0xE0A7},{0x92EA, 0xF8E8},{0x92F8, 0xCBEA},{0x92FC, 0xCBBC},
- {0x9304, 0xD6E2},{0x9310, 0xF5DE},{0x9318, 0xF5DF},{0x931A, 0xEEB6},{0x931E, 0xE2F6},{0x931F, 0xD3CA},{0x9320, 0xEFFC},{0x9321, 0xD1C4},
- {0x9322, 0xEFB1},{0x9324, 0xD1C5},{0x9326, 0xD0DE},{0x9328, 0xD9E1},{0x932B, 0xE0B8},{0x932E, 0xCDD1},{0x932F, 0xF3B9},{0x9348, 0xE7CC},
- {0x934A, 0xD6A8},{0x934B, 0xCEA7},{0x934D, 0xD4B5},{0x9354, 0xE4C8},{0x935B, 0xD3B4},{0x936E, 0xEBB9},{0x9375, 0xCBF5},{0x937C, 0xF6DD},
- {0x937E, 0xF1A3},{0x938C, 0xCCC7},{0x9394, 0xE9CA},{0x9396, 0xE1F0},{0x939A, 0xF5E0},{0x93A3, 0xFBAF},{0x93A7, 0xCBD1},{0x93AC, 0xFBE0},
- {0x93AD, 0xF2E5},{0x93B0, 0xECF0},{0x93C3, 0xF0EC},{0x93D1, 0xEEEB},{0x93DE, 0xE9CB},{0x93E1, 0xCCF0},{0x93E4, 0xD7AF},{0x93F6, 0xF3A1},
- {0x9404, 0xFCF5},{0x9418, 0xF1A4},{0x9425, 0xE0D6},{0x942B, 0xEFB2},{0x9435, 0xF4D1},{0x9438, 0xF7A1},{0x9444, 0xF1D1},{0x9451, 0xCAFC},
- {0x9452, 0xCAFD},{0x945B, 0xCECE},{0x947D, 0xF3C8},{0x947F, 0xF3BA},{0x9577, 0xEDFE},{0x9580, 0xDAA6},{0x9583, 0xE0EC},{0x9589, 0xF8CD},
- {0x958B, 0xCBD2},{0x958F, 0xEBCE},{0x9591, 0xF9D8},{0x9592, 0xF9D9},{0x9593, 0xCAE0},{0x9594, 0xDACA},{0x9598, 0xCBA6},{0x95A3, 0xCAC8},
- {0x95A4, 0xF9EE},{0x95A5, 0xDBEC},{0x95A8, 0xD0B1},{0x95AD, 0xD5EF},{0x95B1, 0xE6F3},{0x95BB, 0xE7A2},{0x95BC, 0xE4D9},{0x95C7, 0xE4E1},
- {0x95CA, 0xFCC4},{0x95D4, 0xF9EF},{0x95D5, 0xCFF4},{0x95D6, 0xF7E6},{0x95DC, 0xCEBC},{0x95E1, 0xF4C5},{0x95E2, 0xDCA3},{0x961C, 0xDDBD},
- {0x9621, 0xF4C6},{0x962A, 0xF8A1},{0x962E, 0xE8D6},{0x9632, 0xDBC1},{0x963B, 0xF0E6},{0x963F, 0xE4B9},{0x9640, 0xF6ED},{0x9642, 0xF9AE},
- {0x9644, 0xDDBE},{0x964B, 0xD7B0},{0x964C, 0xD8E8},{0x964D, 0xCBBD},{0x9650, 0xF9DA},{0x965B, 0xF8CE},{0x965C, 0xF9F0},{0x965D, 0xE0ED},
- {0x965E, 0xE3B3},{0x965F, 0xF4B3},{0x9662, 0xEAC2},{0x9663, 0xF2E6},{0x9664, 0xF0B6},{0x966A, 0xDBD6},{0x9670, 0xEBE4},{0x9673, 0xF2E7},
- {0x9675, 0xD7D5},{0x9676, 0xD4B6},{0x9677, 0xF9E8},{0x9678, 0xD7C1},{0x967D, 0xE5D5},{0x9685, 0xE9EA},{0x9686, 0xD7CC},{0x968A, 0xD3E9},
- {0x968B, 0xE2C9},{0x968D, 0xFCDB},{0x968E, 0xCDAD},{0x9694, 0xCCB0},{0x9695, 0xEAA2},{0x9698, 0xE4F6},{0x9699, 0xD0C0},{0x969B, 0xF0B7},
- {0x969C, 0xEEA1},{0x96A3, 0xD7F6},{0x96A7, 0xE2CA},{0x96A8, 0xE2CB},{0x96AA, 0xFACF},{0x96B1, 0xEBDF},{0x96B7, 0xD6CB},{0x96BB, 0xF4B4},
- {0x96C0, 0xEDCD},{0x96C1, 0xE4D2},{0x96C4, 0xEAA9},{0x96C5, 0xE4BA},{0x96C6, 0xF3A2},{0x96C7, 0xCDD2},{0x96C9, 0xF6CB},{0x96CB, 0xF1E6},
- {0x96CC, 0xEDC1},{0x96CD, 0xE8BC},{0x96CE, 0xEED1},{0x96D5, 0xF0E7},{0x96D6, 0xE2CC},{0x96D9, 0xE4AA},{0x96DB, 0xF5E1},{0x96DC, 0xEDDA},
- {0x96E2, 0xD7EE},{0x96E3, 0xD1F1},{0x96E8, 0xE9EB},{0x96E9, 0xE9EC},{0x96EA, 0xE0E4},{0x96EF, 0xDAA7},{0x96F0, 0xDDD4},{0x96F2, 0xEAA3},
- {0x96F6, 0xD6C3},{0x96F7, 0xD6F4},{0x96F9, 0xDADF},{0x96FB, 0xEFB3},{0x9700, 0xE2CD},{0x9706, 0xEFFD},{0x9707, 0xF2E8},{0x9711, 0xEFC5},
- {0x9713, 0xE7E7},{0x9716, 0xD7FD},{0x9719, 0xE7CE},{0x971C, 0xDFDC},{0x971E, 0xF9C7},{0x9727, 0xD9F6},{0x9730, 0xDFAC},{0x9732, 0xD6DA},
- {0x9739, 0xDCA4},{0x973D, 0xF0B8},{0x9742, 0xD5FA},{0x9744, 0xE4F7},{0x9748, 0xD6C4},{0x9751, 0xF4EC},{0x9756, 0xEFFE},{0x975C, 0xF0A1},
- {0x975E, 0xDEAA},{0x9761, 0xDABC},{0x9762, 0xD8FC},{0x9769, 0xFAD4},{0x976D, 0xECE5},{0x9774, 0xFCA8},{0x9777, 0xECE6},{0x977A, 0xD8CB},
- {0x978B, 0xFBB9},{0x978D, 0xE4D3},{0x978F, 0xCDF9},{0x97A0, 0xCFD3},{0x97A8, 0xCAEA},{0x97AB, 0xCFD4},{0x97AD, 0xF8BD},{0x97C6, 0xF4C7},
- {0x97CB, 0xEADF},{0x97D3, 0xF9DB},{0x97DC, 0xD4B7},{0x97F3, 0xEBE5},{0x97F6, 0xE1D2},{0x97FB, 0xEAA4},{0x97FF, 0xFAC2},{0x9800, 0xFBE1},
- {0x9801, 0xFAED},{0x9802, 0xF0A2},{0x9803, 0xCCF1},{0x9805, 0xFAA3},{0x9806, 0xE2F7},{0x9808, 0xE2CE},{0x980A, 0xE9F5},{0x980C, 0xE1EB},
- {0x9810, 0xE7E8},{0x9811, 0xE8D7},{0x9812, 0xDAF8},{0x9813, 0xD4CB},{0x9817, 0xF7F6},{0x9818, 0xD6C5},{0x982D, 0xD4E9},{0x9830, 0xFAFA},
- {0x9838, 0xCCF2},{0x9839, 0xF7DD},{0x983B, 0xDEBA},{0x9846, 0xCEA8},{0x984C, 0xF0B9},{0x984D, 0xE4FE},{0x984E, 0xE4C9},{0x9854, 0xE4D4},
- {0x9858, 0xEAC3},{0x985A, 0xEFB4},{0x985E, 0xD7BE},{0x9865, 0xFBE2},{0x9867, 0xCDD3},{0x986B, 0xEFB5},{0x986F, 0xFAE9},{0x98A8, 0xF9A6},
- {0x98AF, 0xDFBD},{0x98B1, 0xF7C7},{0x98C4, 0xF8FD},{0x98C7, 0xF8FC},{0x98DB, 0xDEAB},{0x98DC, 0xDBE8},{0x98DF, 0xE3DD},{0x98E1, 0xE1E2},
- {0x98E2, 0xD1C6},{0x98ED, 0xF6D0},{0x98EE, 0xEBE6},{0x98EF, 0xDAF9},{0x98F4, 0xECC7},{0x98FC, 0xDEF8},{0x98FD, 0xF8E9},{0x98FE, 0xE3DE},
- {0x9903, 0xCEF5},{0x9909, 0xFAC3},{0x990A, 0xE5D7},{0x990C, 0xECC8},{0x9910, 0xF3C9},{0x9913, 0xE4BB},{0x9918, 0xE6AE},{0x991E, 0xEFB6},
- {0x9920, 0xDCBF},{0x9928, 0xCEBD},{0x9945, 0xD8C3},{0x9949, 0xD0CF},{0x994B, 0xCFFA},{0x994C, 0xF3CA},{0x994D, 0xE0D7},{0x9951, 0xD1C7},
- {0x9952, 0xE9AE},{0x9954, 0xE8BD},{0x9957, 0xFAC4},{0x9996, 0xE2CF},{0x9999, 0xFAC5},{0x999D, 0xF9B8},{0x99A5, 0xDCE0},{0x99A8, 0xFBB0},
- {0x99AC, 0xD8A9},{0x99AD, 0xE5DF},{0x99AE, 0xF9A7},{0x99B1, 0xF6EE},{0x99B3, 0xF6CC},{0x99B4, 0xE2F8},{0x99B9, 0xECF1},{0x99C1, 0xDAE0},
- {0x99D0, 0xF1D2},{0x99D1, 0xD2CC},{0x99D2, 0xCFCB},{0x99D5, 0xCABD},{0x99D9, 0xDDBF},{0x99DD, 0xF6EF},{0x99DF, 0xDEF9},{0x99ED, 0xFAB4},
- {0x99F1, 0xD5AD},{0x99FF, 0xF1E7},{0x9A01, 0xDEBE},{0x9A08, 0xDCC0},{0x9A0E, 0xD1C8},{0x9A0F, 0xD1C9},{0x9A19, 0xF8BE},{0x9A2B, 0xCBF6},
- {0x9A30, 0xD4F9},{0x9A36, 0xF5E2},{0x9A37, 0xE1D3},{0x9A40, 0xD8E9},{0x9A43, 0xF8FE},{0x9A45, 0xCFCC},{0x9A4D, 0xFDA4},{0x9A55, 0xCEF6},
- {0x9A57, 0xFAD0},{0x9A5A, 0xCCF3},{0x9A5B, 0xE6BE},{0x9A5F, 0xF6AE},{0x9A62, 0xD5F0},{0x9A65, 0xD1CA},{0x9A69, 0xFCBE},{0x9A6A, 0xD5F1},
- {0x9AA8, 0xCDE9},{0x9AB8, 0xFAB5},{0x9AD3, 0xE2D0},{0x9AD4, 0xF4F7},{0x9AD8, 0xCDD4},{0x9AE5, 0xE7A3},{0x9AEE, 0xDBA5},{0x9B1A, 0xE2D1},
- {0x9B27, 0xD7A2},{0x9B2A, 0xF7E3},{0x9B31, 0xEAA6},{0x9B3C, 0xD0A1},{0x9B41, 0xCEDA},{0x9B42, 0xFBEB},{0x9B43, 0xDBA6},{0x9B44, 0xDBDE},
- {0x9B45, 0xD8E5},{0x9B4F, 0xEAE0},{0x9B54, 0xD8AA},{0x9B5A, 0xE5E0},{0x9B6F, 0xD6DB},{0x9B8E, 0xEFC6},{0x9B91, 0xF8EA},{0x9B9F, 0xE4D5},
- {0x9BAB, 0xCEF7},{0x9BAE, 0xE0D8},{0x9BC9, 0xD7EF},{0x9BD6, 0xF4ED},{0x9BE4, 0xCDE6},{0x9BE8, 0xCCF4},{0x9C0D, 0xF5E3},{0x9C10, 0xE4CA},
- {0x9C12, 0xDCE1},{0x9C15, 0xF9C8},{0x9C25, 0xFCBF},{0x9C32, 0xE8A7},{0x9C3B, 0xD8C4},{0x9C47, 0xCBBE},{0x9C49, 0xDCAE},{0x9C57, 0xD7F7},
- {0x9CE5, 0xF0E8},{0x9CE7, 0xDDC0},{0x9CE9, 0xCFCD},{0x9CF3, 0xDCF3},{0x9CF4, 0xD9B0},{0x9CF6, 0xE6E9},{0x9D09, 0xE4BC},{0x9D1B, 0xEAC4},
- {0x9D26, 0xE4EC},{0x9D28, 0xE4E5},{0x9D3B, 0xFBF8},{0x9D51, 0xCCBB},{0x9D5D, 0xE4BD},{0x9D60, 0xCDDC},{0x9D61, 0xD9F7},{0x9D6C, 0xDDDF},
- {0x9D72, 0xEDCE},{0x9DA9, 0xD9D0},{0x9DAF, 0xE5A3},{0x9DB4, 0xF9CD},{0x9DC4, 0xCDAE},{0x9DD7, 0xCFCE},{0x9DF2, 0xF6AF},{0x9DF8, 0xFDD3},
- {0x9DF9, 0xEBED},{0x9DFA, 0xD6DC},{0x9E1A, 0xE5A4},{0x9E1E, 0xD5B6},{0x9E75, 0xD6DD},{0x9E79, 0xF9E9},{0x9E7D, 0xE7A4},{0x9E7F, 0xD6E3},
- {0x9E92, 0xD1CB},{0x9E93, 0xD6E4},{0x9E97, 0xD5F2},{0x9E9D, 0xDEFA},{0x9E9F, 0xD7F8},{0x9EA5, 0xD8EA},{0x9EB4, 0xCFD5},{0x9EB5, 0xD8FD},
- {0x9EBB, 0xD8AB},{0x9EBE, 0xFDCB},{0x9EC3, 0xFCDC},{0x9ECD, 0xE0A8},{0x9ECE, 0xD5F3},{0x9ED1, 0xFDD9},{0x9ED4, 0xCCA3},{0x9ED8, 0xD9F9},
- {0x9EDB, 0xD3EA},{0x9EDC, 0xF5F5},{0x9EDE, 0xEFC7},{0x9EE8, 0xD3DA},{0x9EF4, 0xDABD},{0x9F07, 0xE8A8},{0x9F08, 0xDCAF},{0x9F0E, 0xF0A3},
- {0x9F13, 0xCDD5},{0x9F20, 0xE0A9},{0x9F3B, 0xDEAC},{0x9F4A, 0xF0BA},{0x9F4B, 0xEEB1},{0x9F4E, 0xEEB2},{0x9F52, 0xF6CD},{0x9F5F, 0xEED2},
- {0x9F61, 0xD6C6},{0x9F67, 0xE0E5},{0x9F6A, 0xF3BB},{0x9F6C, 0xE5E1},{0x9F77, 0xE4CB},{0x9F8D, 0xD7A3},{0x9F90, 0xDBC2},{0x9F95, 0xCAFE},
- {0x9F9C, 0xCFCF},{0xAC00, 0xB0A1},{0xAC01, 0xB0A2},{0xAC04, 0xB0A3},{0xAC07, 0xB0A4},{0xAC08, 0xB0A5},{0xAC09, 0xB0A6},{0xAC0A, 0xB0A7},
- {0xAC10, 0xB0A8},{0xAC11, 0xB0A9},{0xAC12, 0xB0AA},{0xAC13, 0xB0AB},{0xAC14, 0xB0AC},{0xAC15, 0xB0AD},{0xAC16, 0xB0AE},{0xAC17, 0xB0AF},
- {0xAC19, 0xB0B0},{0xAC1A, 0xB0B1},{0xAC1B, 0xB0B2},{0xAC1C, 0xB0B3},{0xAC1D, 0xB0B4},{0xAC20, 0xB0B5},{0xAC24, 0xB0B6},{0xAC2C, 0xB0B7},
- {0xAC2D, 0xB0B8},{0xAC2F, 0xB0B9},{0xAC30, 0xB0BA},{0xAC31, 0xB0BB},{0xAC38, 0xB0BC},{0xAC39, 0xB0BD},{0xAC3C, 0xB0BE},{0xAC40, 0xB0BF},
- {0xAC4B, 0xB0C0},{0xAC4D, 0xB0C1},{0xAC54, 0xB0C2},{0xAC58, 0xB0C3},{0xAC5C, 0xB0C4},{0xAC70, 0xB0C5},{0xAC71, 0xB0C6},{0xAC74, 0xB0C7},
- {0xAC77, 0xB0C8},{0xAC78, 0xB0C9},{0xAC7A, 0xB0CA},{0xAC80, 0xB0CB},{0xAC81, 0xB0CC},{0xAC83, 0xB0CD},{0xAC84, 0xB0CE},{0xAC85, 0xB0CF},
- {0xAC86, 0xB0D0},{0xAC89, 0xB0D1},{0xAC8A, 0xB0D2},{0xAC8B, 0xB0D3},{0xAC8C, 0xB0D4},{0xAC90, 0xB0D5},{0xAC94, 0xB0D6},{0xAC9C, 0xB0D7},
- {0xAC9D, 0xB0D8},{0xAC9F, 0xB0D9},{0xACA0, 0xB0DA},{0xACA1, 0xB0DB},{0xACA8, 0xB0DC},{0xACA9, 0xB0DD},{0xACAA, 0xB0DE},{0xACAC, 0xB0DF},
- {0xACAF, 0xB0E0},{0xACB0, 0xB0E1},{0xACB8, 0xB0E2},{0xACB9, 0xB0E3},{0xACBB, 0xB0E4},{0xACBC, 0xB0E5},{0xACBD, 0xB0E6},{0xACC1, 0xB0E7},
- {0xACC4, 0xB0E8},{0xACC8, 0xB0E9},{0xACCC, 0xB0EA},{0xACD5, 0xB0EB},{0xACD7, 0xB0EC},{0xACE0, 0xB0ED},{0xACE1, 0xB0EE},{0xACE4, 0xB0EF},
- {0xACE7, 0xB0F0},{0xACE8, 0xB0F1},{0xACEA, 0xB0F2},{0xACEC, 0xB0F3},{0xACEF, 0xB0F4},{0xACF0, 0xB0F5},{0xACF1, 0xB0F6},{0xACF3, 0xB0F7},
- {0xACF5, 0xB0F8},{0xACF6, 0xB0F9},{0xACFC, 0xB0FA},{0xACFD, 0xB0FB},{0xAD00, 0xB0FC},{0xAD04, 0xB0FD},{0xAD06, 0xB0FE},{0xAD0C, 0xB1A1},
- {0xAD0D, 0xB1A2},{0xAD0F, 0xB1A3},{0xAD11, 0xB1A4},{0xAD18, 0xB1A5},{0xAD1C, 0xB1A6},{0xAD20, 0xB1A7},{0xAD29, 0xB1A8},{0xAD2C, 0xB1A9},
- {0xAD2D, 0xB1AA},{0xAD34, 0xB1AB},{0xAD35, 0xB1AC},{0xAD38, 0xB1AD},{0xAD3C, 0xB1AE},{0xAD44, 0xB1AF},{0xAD45, 0xB1B0},{0xAD47, 0xB1B1},
- {0xAD49, 0xB1B2},{0xAD50, 0xB1B3},{0xAD54, 0xB1B4},{0xAD58, 0xB1B5},{0xAD61, 0xB1B6},{0xAD63, 0xB1B7},{0xAD6C, 0xB1B8},{0xAD6D, 0xB1B9},
- {0xAD70, 0xB1BA},{0xAD73, 0xB1BB},{0xAD74, 0xB1BC},{0xAD75, 0xB1BD},{0xAD76, 0xB1BE},{0xAD7B, 0xB1BF},{0xAD7C, 0xB1C0},{0xAD7D, 0xB1C1},
- {0xAD7F, 0xB1C2},{0xAD81, 0xB1C3},{0xAD82, 0xB1C4},{0xAD88, 0xB1C5},{0xAD89, 0xB1C6},{0xAD8C, 0xB1C7},{0xAD90, 0xB1C8},{0xAD9C, 0xB1C9},
- {0xAD9D, 0xB1CA},{0xADA4, 0xB1CB},{0xADB7, 0xB1CC},{0xADC0, 0xB1CD},{0xADC1, 0xB1CE},{0xADC4, 0xB1CF},{0xADC8, 0xB1D0},{0xADD0, 0xB1D1},
- {0xADD1, 0xB1D2},{0xADD3, 0xB1D3},{0xADDC, 0xB1D4},{0xADE0, 0xB1D5},{0xADE4, 0xB1D6},{0xADF8, 0xB1D7},{0xADF9, 0xB1D8},{0xADFC, 0xB1D9},
- {0xADFF, 0xB1DA},{0xAE00, 0xB1DB},{0xAE01, 0xB1DC},{0xAE08, 0xB1DD},{0xAE09, 0xB1DE},{0xAE0B, 0xB1DF},{0xAE0D, 0xB1E0},{0xAE14, 0xB1E1},
- {0xAE30, 0xB1E2},{0xAE31, 0xB1E3},{0xAE34, 0xB1E4},{0xAE37, 0xB1E5},{0xAE38, 0xB1E6},{0xAE3A, 0xB1E7},{0xAE40, 0xB1E8},{0xAE41, 0xB1E9},
- {0xAE43, 0xB1EA},{0xAE45, 0xB1EB},{0xAE46, 0xB1EC},{0xAE4A, 0xB1ED},{0xAE4C, 0xB1EE},{0xAE4D, 0xB1EF},{0xAE4E, 0xB1F0},{0xAE50, 0xB1F1},
- {0xAE54, 0xB1F2},{0xAE56, 0xB1F3},{0xAE5C, 0xB1F4},{0xAE5D, 0xB1F5},{0xAE5F, 0xB1F6},{0xAE60, 0xB1F7},{0xAE61, 0xB1F8},{0xAE65, 0xB1F9},
- {0xAE68, 0xB1FA},{0xAE69, 0xB1FB},{0xAE6C, 0xB1FC},{0xAE70, 0xB1FD},{0xAE78, 0xB1FE},{0xAE79, 0xB2A1},{0xAE7B, 0xB2A2},{0xAE7C, 0xB2A3},
- {0xAE7D, 0xB2A4},{0xAE84, 0xB2A5},{0xAE85, 0xB2A6},{0xAE8C, 0xB2A7},{0xAEBC, 0xB2A8},{0xAEBD, 0xB2A9},{0xAEBE, 0xB2AA},{0xAEC0, 0xB2AB},
- {0xAEC4, 0xB2AC},{0xAECC, 0xB2AD},{0xAECD, 0xB2AE},{0xAECF, 0xB2AF},{0xAED0, 0xB2B0},{0xAED1, 0xB2B1},{0xAED8, 0xB2B2},{0xAED9, 0xB2B3},
- {0xAEDC, 0xB2B4},{0xAEE8, 0xB2B5},{0xAEEB, 0xB2B6},{0xAEED, 0xB2B7},{0xAEF4, 0xB2B8},{0xAEF8, 0xB2B9},{0xAEFC, 0xB2BA},{0xAF07, 0xB2BB},
- {0xAF08, 0xB2BC},{0xAF0D, 0xB2BD},{0xAF10, 0xB2BE},{0xAF2C, 0xB2BF},{0xAF2D, 0xB2C0},{0xAF30, 0xB2C1},{0xAF32, 0xB2C2},{0xAF34, 0xB2C3},
- {0xAF3C, 0xB2C4},{0xAF3D, 0xB2C5},{0xAF3F, 0xB2C6},{0xAF41, 0xB2C7},{0xAF42, 0xB2C8},{0xAF43, 0xB2C9},{0xAF48, 0xB2CA},{0xAF49, 0xB2CB},
- {0xAF50, 0xB2CC},{0xAF5C, 0xB2CD},{0xAF5D, 0xB2CE},{0xAF64, 0xB2CF},{0xAF65, 0xB2D0},{0xAF79, 0xB2D1},{0xAF80, 0xB2D2},{0xAF84, 0xB2D3},
- {0xAF88, 0xB2D4},{0xAF90, 0xB2D5},{0xAF91, 0xB2D6},{0xAF95, 0xB2D7},{0xAF9C, 0xB2D8},{0xAFB8, 0xB2D9},{0xAFB9, 0xB2DA},{0xAFBC, 0xB2DB},
- {0xAFC0, 0xB2DC},{0xAFC7, 0xB2DD},{0xAFC8, 0xB2DE},{0xAFC9, 0xB2DF},{0xAFCB, 0xB2E0},{0xAFCD, 0xB2E1},{0xAFCE, 0xB2E2},{0xAFD4, 0xB2E3},
- {0xAFDC, 0xB2E4},{0xAFE8, 0xB2E5},{0xAFE9, 0xB2E6},{0xAFF0, 0xB2E7},{0xAFF1, 0xB2E8},{0xAFF4, 0xB2E9},{0xAFF8, 0xB2EA},{0xB000, 0xB2EB},
- {0xB001, 0xB2EC},{0xB004, 0xB2ED},{0xB00C, 0xB2EE},{0xB010, 0xB2EF},{0xB014, 0xB2F0},{0xB01C, 0xB2F1},{0xB01D, 0xB2F2},{0xB028, 0xB2F3},
- {0xB044, 0xB2F4},{0xB045, 0xB2F5},{0xB048, 0xB2F6},{0xB04A, 0xB2F7},{0xB04C, 0xB2F8},{0xB04E, 0xB2F9},{0xB053, 0xB2FA},{0xB054, 0xB2FB},
- {0xB055, 0xB2FC},{0xB057, 0xB2FD},{0xB059, 0xB2FE},{0xB05D, 0xB3A1},{0xB07C, 0xB3A2},{0xB07D, 0xB3A3},{0xB080, 0xB3A4},{0xB084, 0xB3A5},
- {0xB08C, 0xB3A6},{0xB08D, 0xB3A7},{0xB08F, 0xB3A8},{0xB091, 0xB3A9},{0xB098, 0xB3AA},{0xB099, 0xB3AB},{0xB09A, 0xB3AC},{0xB09C, 0xB3AD},
- {0xB09F, 0xB3AE},{0xB0A0, 0xB3AF},{0xB0A1, 0xB3B0},{0xB0A2, 0xB3B1},{0xB0A8, 0xB3B2},{0xB0A9, 0xB3B3},{0xB0AB, 0xB3B4},{0xB0AC, 0xB3B5},
- {0xB0AD, 0xB3B6},{0xB0AE, 0xB3B7},{0xB0AF, 0xB3B8},{0xB0B1, 0xB3B9},{0xB0B3, 0xB3BA},{0xB0B4, 0xB3BB},{0xB0B5, 0xB3BC},{0xB0B8, 0xB3BD},
- {0xB0BC, 0xB3BE},{0xB0C4, 0xB3BF},{0xB0C5, 0xB3C0},{0xB0C7, 0xB3C1},{0xB0C8, 0xB3C2},{0xB0C9, 0xB3C3},{0xB0D0, 0xB3C4},{0xB0D1, 0xB3C5},
- {0xB0D4, 0xB3C6},{0xB0D8, 0xB3C7},{0xB0E0, 0xB3C8},{0xB0E5, 0xB3C9},{0xB108, 0xB3CA},{0xB109, 0xB3CB},{0xB10B, 0xB3CC},{0xB10C, 0xB3CD},
- {0xB110, 0xB3CE},{0xB112, 0xB3CF},{0xB113, 0xB3D0},{0xB118, 0xB3D1},{0xB119, 0xB3D2},{0xB11B, 0xB3D3},{0xB11C, 0xB3D4},{0xB11D, 0xB3D5},
- {0xB123, 0xB3D6},{0xB124, 0xB3D7},{0xB125, 0xB3D8},{0xB128, 0xB3D9},{0xB12C, 0xB3DA},{0xB134, 0xB3DB},{0xB135, 0xB3DC},{0xB137, 0xB3DD},
- {0xB138, 0xB3DE},{0xB139, 0xB3DF},{0xB140, 0xB3E0},{0xB141, 0xB3E1},{0xB144, 0xB3E2},{0xB148, 0xB3E3},{0xB150, 0xB3E4},{0xB151, 0xB3E5},
- {0xB154, 0xB3E6},{0xB155, 0xB3E7},{0xB158, 0xB3E8},{0xB15C, 0xB3E9},{0xB160, 0xB3EA},{0xB178, 0xB3EB},{0xB179, 0xB3EC},{0xB17C, 0xB3ED},
- {0xB180, 0xB3EE},{0xB182, 0xB3EF},{0xB188, 0xB3F0},{0xB189, 0xB3F1},{0xB18B, 0xB3F2},{0xB18D, 0xB3F3},{0xB192, 0xB3F4},{0xB193, 0xB3F5},
- {0xB194, 0xB3F6},{0xB198, 0xB3F7},{0xB19C, 0xB3F8},{0xB1A8, 0xB3F9},{0xB1CC, 0xB3FA},{0xB1D0, 0xB3FB},{0xB1D4, 0xB3FC},{0xB1DC, 0xB3FD},
- {0xB1DD, 0xB3FE},{0xB1DF, 0xB4A1},{0xB1E8, 0xB4A2},{0xB1E9, 0xB4A3},{0xB1EC, 0xB4A4},{0xB1F0, 0xB4A5},{0xB1F9, 0xB4A6},{0xB1FB, 0xB4A7},
- {0xB1FD, 0xB4A8},{0xB204, 0xB4A9},{0xB205, 0xB4AA},{0xB208, 0xB4AB},{0xB20B, 0xB4AC},{0xB20C, 0xB4AD},{0xB214, 0xB4AE},{0xB215, 0xB4AF},
- {0xB217, 0xB4B0},{0xB219, 0xB4B1},{0xB220, 0xB4B2},{0xB234, 0xB4B3},{0xB23C, 0xB4B4},{0xB258, 0xB4B5},{0xB25C, 0xB4B6},{0xB260, 0xB4B7},
- {0xB268, 0xB4B8},{0xB269, 0xB4B9},{0xB274, 0xB4BA},{0xB275, 0xB4BB},{0xB27C, 0xB4BC},{0xB284, 0xB4BD},{0xB285, 0xB4BE},{0xB289, 0xB4BF},
- {0xB290, 0xB4C0},{0xB291, 0xB4C1},{0xB294, 0xB4C2},{0xB298, 0xB4C3},{0xB299, 0xB4C4},{0xB29A, 0xB4C5},{0xB2A0, 0xB4C6},{0xB2A1, 0xB4C7},
- {0xB2A3, 0xB4C8},{0xB2A5, 0xB4C9},{0xB2A6, 0xB4CA},{0xB2AA, 0xB4CB},{0xB2AC, 0xB4CC},{0xB2B0, 0xB4CD},{0xB2B4, 0xB4CE},{0xB2C8, 0xB4CF},
- {0xB2C9, 0xB4D0},{0xB2CC, 0xB4D1},{0xB2D0, 0xB4D2},{0xB2D2, 0xB4D3},{0xB2D8, 0xB4D4},{0xB2D9, 0xB4D5},{0xB2DB, 0xB4D6},{0xB2DD, 0xB4D7},
- {0xB2E2, 0xB4D8},{0xB2E4, 0xB4D9},{0xB2E5, 0xB4DA},{0xB2E6, 0xB4DB},{0xB2E8, 0xB4DC},{0xB2EB, 0xB4DD},{0xB2EC, 0xB4DE},{0xB2ED, 0xB4DF},
- {0xB2EE, 0xB4E0},{0xB2EF, 0xB4E1},{0xB2F3, 0xB4E2},{0xB2F4, 0xB4E3},{0xB2F5, 0xB4E4},{0xB2F7, 0xB4E5},{0xB2F8, 0xB4E6},{0xB2F9, 0xB4E7},
- {0xB2FA, 0xB4E8},{0xB2FB, 0xB4E9},{0xB2FF, 0xB4EA},{0xB300, 0xB4EB},{0xB301, 0xB4EC},{0xB304, 0xB4ED},{0xB308, 0xB4EE},{0xB310, 0xB4EF},
- {0xB311, 0xB4F0},{0xB313, 0xB4F1},{0xB314, 0xB4F2},{0xB315, 0xB4F3},{0xB31C, 0xB4F4},{0xB354, 0xB4F5},{0xB355, 0xB4F6},{0xB356, 0xB4F7},
- {0xB358, 0xB4F8},{0xB35B, 0xB4F9},{0xB35C, 0xB4FA},{0xB35E, 0xB4FB},{0xB35F, 0xB4FC},{0xB364, 0xB4FD},{0xB365, 0xB4FE},{0xB367, 0xB5A1},
- {0xB369, 0xB5A2},{0xB36B, 0xB5A3},{0xB36E, 0xB5A4},{0xB370, 0xB5A5},{0xB371, 0xB5A6},{0xB374, 0xB5A7},{0xB378, 0xB5A8},{0xB380, 0xB5A9},
- {0xB381, 0xB5AA},{0xB383, 0xB5AB},{0xB384, 0xB5AC},{0xB385, 0xB5AD},{0xB38C, 0xB5AE},{0xB390, 0xB5AF},{0xB394, 0xB5B0},{0xB3A0, 0xB5B1},
- {0xB3A1, 0xB5B2},{0xB3A8, 0xB5B3},{0xB3AC, 0xB5B4},{0xB3C4, 0xB5B5},{0xB3C5, 0xB5B6},{0xB3C8, 0xB5B7},{0xB3CB, 0xB5B8},{0xB3CC, 0xB5B9},
- {0xB3CE, 0xB5BA},{0xB3D0, 0xB5BB},{0xB3D4, 0xB5BC},{0xB3D5, 0xB5BD},{0xB3D7, 0xB5BE},{0xB3D9, 0xB5BF},{0xB3DB, 0xB5C0},{0xB3DD, 0xB5C1},
- {0xB3E0, 0xB5C2},{0xB3E4, 0xB5C3},{0xB3E8, 0xB5C4},{0xB3FC, 0xB5C5},{0xB410, 0xB5C6},{0xB418, 0xB5C7},{0xB41C, 0xB5C8},{0xB420, 0xB5C9},
- {0xB428, 0xB5CA},{0xB429, 0xB5CB},{0xB42B, 0xB5CC},{0xB434, 0xB5CD},{0xB450, 0xB5CE},{0xB451, 0xB5CF},{0xB454, 0xB5D0},{0xB458, 0xB5D1},
- {0xB460, 0xB5D2},{0xB461, 0xB5D3},{0xB463, 0xB5D4},{0xB465, 0xB5D5},{0xB46C, 0xB5D6},{0xB480, 0xB5D7},{0xB488, 0xB5D8},{0xB49D, 0xB5D9},
- {0xB4A4, 0xB5DA},{0xB4A8, 0xB5DB},{0xB4AC, 0xB5DC},{0xB4B5, 0xB5DD},{0xB4B7, 0xB5DE},{0xB4B9, 0xB5DF},{0xB4C0, 0xB5E0},{0xB4C4, 0xB5E1},
- {0xB4C8, 0xB5E2},{0xB4D0, 0xB5E3},{0xB4D5, 0xB5E4},{0xB4DC, 0xB5E5},{0xB4DD, 0xB5E6},{0xB4E0, 0xB5E7},{0xB4E3, 0xB5E8},{0xB4E4, 0xB5E9},
- {0xB4E6, 0xB5EA},{0xB4EC, 0xB5EB},{0xB4ED, 0xB5EC},{0xB4EF, 0xB5ED},{0xB4F1, 0xB5EE},{0xB4F8, 0xB5EF},{0xB514, 0xB5F0},{0xB515, 0xB5F1},
- {0xB518, 0xB5F2},{0xB51B, 0xB5F3},{0xB51C, 0xB5F4},{0xB524, 0xB5F5},{0xB525, 0xB5F6},{0xB527, 0xB5F7},{0xB528, 0xB5F8},{0xB529, 0xB5F9},
- {0xB52A, 0xB5FA},{0xB530, 0xB5FB},{0xB531, 0xB5FC},{0xB534, 0xB5FD},{0xB538, 0xB5FE},{0xB540, 0xB6A1},{0xB541, 0xB6A2},{0xB543, 0xB6A3},
- {0xB544, 0xB6A4},{0xB545, 0xB6A5},{0xB54B, 0xB6A6},{0xB54C, 0xB6A7},{0xB54D, 0xB6A8},{0xB550, 0xB6A9},{0xB554, 0xB6AA},{0xB55C, 0xB6AB},
- {0xB55D, 0xB6AC},{0xB55F, 0xB6AD},{0xB560, 0xB6AE},{0xB561, 0xB6AF},{0xB5A0, 0xB6B0},{0xB5A1, 0xB6B1},{0xB5A4, 0xB6B2},{0xB5A8, 0xB6B3},
- {0xB5AA, 0xB6B4},{0xB5AB, 0xB6B5},{0xB5B0, 0xB6B6},{0xB5B1, 0xB6B7},{0xB5B3, 0xB6B8},{0xB5B4, 0xB6B9},{0xB5B5, 0xB6BA},{0xB5BB, 0xB6BB},
- {0xB5BC, 0xB6BC},{0xB5BD, 0xB6BD},{0xB5C0, 0xB6BE},{0xB5C4, 0xB6BF},{0xB5CC, 0xB6C0},{0xB5CD, 0xB6C1},{0xB5CF, 0xB6C2},{0xB5D0, 0xB6C3},
- {0xB5D1, 0xB6C4},{0xB5D8, 0xB6C5},{0xB5EC, 0xB6C6},{0xB610, 0xB6C7},{0xB611, 0xB6C8},{0xB614, 0xB6C9},{0xB618, 0xB6CA},{0xB625, 0xB6CB},
- {0xB62C, 0xB6CC},{0xB634, 0xB6CD},{0xB648, 0xB6CE},{0xB664, 0xB6CF},{0xB668, 0xB6D0},{0xB69C, 0xB6D1},{0xB69D, 0xB6D2},{0xB6A0, 0xB6D3},
- {0xB6A4, 0xB6D4},{0xB6AB, 0xB6D5},{0xB6AC, 0xB6D6},{0xB6B1, 0xB6D7},{0xB6D4, 0xB6D8},{0xB6F0, 0xB6D9},{0xB6F4, 0xB6DA},{0xB6F8, 0xB6DB},
- {0xB700, 0xB6DC},{0xB701, 0xB6DD},{0xB705, 0xB6DE},{0xB728, 0xB6DF},{0xB729, 0xB6E0},{0xB72C, 0xB6E1},{0xB72F, 0xB6E2},{0xB730, 0xB6E3},
- {0xB738, 0xB6E4},{0xB739, 0xB6E5},{0xB73B, 0xB6E6},{0xB744, 0xB6E7},{0xB748, 0xB6E8},{0xB74C, 0xB6E9},{0xB754, 0xB6EA},{0xB755, 0xB6EB},
- {0xB760, 0xB6EC},{0xB764, 0xB6ED},{0xB768, 0xB6EE},{0xB770, 0xB6EF},{0xB771, 0xB6F0},{0xB773, 0xB6F1},{0xB775, 0xB6F2},{0xB77C, 0xB6F3},
- {0xB77D, 0xB6F4},{0xB780, 0xB6F5},{0xB784, 0xB6F6},{0xB78C, 0xB6F7},{0xB78D, 0xB6F8},{0xB78F, 0xB6F9},{0xB790, 0xB6FA},{0xB791, 0xB6FB},
- {0xB792, 0xB6FC},{0xB796, 0xB6FD},{0xB797, 0xB6FE},{0xB798, 0xB7A1},{0xB799, 0xB7A2},{0xB79C, 0xB7A3},{0xB7A0, 0xB7A4},{0xB7A8, 0xB7A5},
- {0xB7A9, 0xB7A6},{0xB7AB, 0xB7A7},{0xB7AC, 0xB7A8},{0xB7AD, 0xB7A9},{0xB7B4, 0xB7AA},{0xB7B5, 0xB7AB},{0xB7B8, 0xB7AC},{0xB7C7, 0xB7AD},
- {0xB7C9, 0xB7AE},{0xB7EC, 0xB7AF},{0xB7ED, 0xB7B0},{0xB7F0, 0xB7B1},{0xB7F4, 0xB7B2},{0xB7FC, 0xB7B3},{0xB7FD, 0xB7B4},{0xB7FF, 0xB7B5},
- {0xB800, 0xB7B6},{0xB801, 0xB7B7},{0xB807, 0xB7B8},{0xB808, 0xB7B9},{0xB809, 0xB7BA},{0xB80C, 0xB7BB},{0xB810, 0xB7BC},{0xB818, 0xB7BD},
- {0xB819, 0xB7BE},{0xB81B, 0xB7BF},{0xB81D, 0xB7C0},{0xB824, 0xB7C1},{0xB825, 0xB7C2},{0xB828, 0xB7C3},{0xB82C, 0xB7C4},{0xB834, 0xB7C5},
- {0xB835, 0xB7C6},{0xB837, 0xB7C7},{0xB838, 0xB7C8},{0xB839, 0xB7C9},{0xB840, 0xB7CA},{0xB844, 0xB7CB},{0xB851, 0xB7CC},{0xB853, 0xB7CD},
- {0xB85C, 0xB7CE},{0xB85D, 0xB7CF},{0xB860, 0xB7D0},{0xB864, 0xB7D1},{0xB86C, 0xB7D2},{0xB86D, 0xB7D3},{0xB86F, 0xB7D4},{0xB871, 0xB7D5},
- {0xB878, 0xB7D6},{0xB87C, 0xB7D7},{0xB88D, 0xB7D8},{0xB8A8, 0xB7D9},{0xB8B0, 0xB7DA},{0xB8B4, 0xB7DB},{0xB8B8, 0xB7DC},{0xB8C0, 0xB7DD},
- {0xB8C1, 0xB7DE},{0xB8C3, 0xB7DF},{0xB8C5, 0xB7E0},{0xB8CC, 0xB7E1},{0xB8D0, 0xB7E2},{0xB8D4, 0xB7E3},{0xB8DD, 0xB7E4},{0xB8DF, 0xB7E5},
- {0xB8E1, 0xB7E6},{0xB8E8, 0xB7E7},{0xB8E9, 0xB7E8},{0xB8EC, 0xB7E9},{0xB8F0, 0xB7EA},{0xB8F8, 0xB7EB},{0xB8F9, 0xB7EC},{0xB8FB, 0xB7ED},
- {0xB8FD, 0xB7EE},{0xB904, 0xB7EF},{0xB918, 0xB7F0},{0xB920, 0xB7F1},{0xB93C, 0xB7F2},{0xB93D, 0xB7F3},{0xB940, 0xB7F4},{0xB944, 0xB7F5},
- {0xB94C, 0xB7F6},{0xB94F, 0xB7F7},{0xB951, 0xB7F8},{0xB958, 0xB7F9},{0xB959, 0xB7FA},{0xB95C, 0xB7FB},{0xB960, 0xB7FC},{0xB968, 0xB7FD},
- {0xB969, 0xB7FE},{0xB96B, 0xB8A1},{0xB96D, 0xB8A2},{0xB974, 0xB8A3},{0xB975, 0xB8A4},{0xB978, 0xB8A5},{0xB97C, 0xB8A6},{0xB984, 0xB8A7},
- {0xB985, 0xB8A8},{0xB987, 0xB8A9},{0xB989, 0xB8AA},{0xB98A, 0xB8AB},{0xB98D, 0xB8AC},{0xB98E, 0xB8AD},{0xB9AC, 0xB8AE},{0xB9AD, 0xB8AF},
- {0xB9B0, 0xB8B0},{0xB9B4, 0xB8B1},{0xB9BC, 0xB8B2},{0xB9BD, 0xB8B3},{0xB9BF, 0xB8B4},{0xB9C1, 0xB8B5},{0xB9C8, 0xB8B6},{0xB9C9, 0xB8B7},
- {0xB9CC, 0xB8B8},{0xB9CE, 0xB8B9},{0xB9CF, 0xB8BA},{0xB9D0, 0xB8BB},{0xB9D1, 0xB8BC},{0xB9D2, 0xB8BD},{0xB9D8, 0xB8BE},{0xB9D9, 0xB8BF},
- {0xB9DB, 0xB8C0},{0xB9DD, 0xB8C1},{0xB9DE, 0xB8C2},{0xB9E1, 0xB8C3},{0xB9E3, 0xB8C4},{0xB9E4, 0xB8C5},{0xB9E5, 0xB8C6},{0xB9E8, 0xB8C7},
- {0xB9EC, 0xB8C8},{0xB9F4, 0xB8C9},{0xB9F5, 0xB8CA},{0xB9F7, 0xB8CB},{0xB9F8, 0xB8CC},{0xB9F9, 0xB8CD},{0xB9FA, 0xB8CE},{0xBA00, 0xB8CF},
- {0xBA01, 0xB8D0},{0xBA08, 0xB8D1},{0xBA15, 0xB8D2},{0xBA38, 0xB8D3},{0xBA39, 0xB8D4},{0xBA3C, 0xB8D5},{0xBA40, 0xB8D6},{0xBA42, 0xB8D7},
- {0xBA48, 0xB8D8},{0xBA49, 0xB8D9},{0xBA4B, 0xB8DA},{0xBA4D, 0xB8DB},{0xBA4E, 0xB8DC},{0xBA53, 0xB8DD},{0xBA54, 0xB8DE},{0xBA55, 0xB8DF},
- {0xBA58, 0xB8E0},{0xBA5C, 0xB8E1},{0xBA64, 0xB8E2},{0xBA65, 0xB8E3},{0xBA67, 0xB8E4},{0xBA68, 0xB8E5},{0xBA69, 0xB8E6},{0xBA70, 0xB8E7},
- {0xBA71, 0xB8E8},{0xBA74, 0xB8E9},{0xBA78, 0xB8EA},{0xBA83, 0xB8EB},{0xBA84, 0xB8EC},{0xBA85, 0xB8ED},{0xBA87, 0xB8EE},{0xBA8C, 0xB8EF},
- {0xBAA8, 0xB8F0},{0xBAA9, 0xB8F1},{0xBAAB, 0xB8F2},{0xBAAC, 0xB8F3},{0xBAB0, 0xB8F4},{0xBAB2, 0xB8F5},{0xBAB8, 0xB8F6},{0xBAB9, 0xB8F7},
- {0xBABB, 0xB8F8},{0xBABD, 0xB8F9},{0xBAC4, 0xB8FA},{0xBAC8, 0xB8FB},{0xBAD8, 0xB8FC},{0xBAD9, 0xB8FD},{0xBAFC, 0xB8FE},{0xBB00, 0xB9A1},
- {0xBB04, 0xB9A2},{0xBB0D, 0xB9A3},{0xBB0F, 0xB9A4},{0xBB11, 0xB9A5},{0xBB18, 0xB9A6},{0xBB1C, 0xB9A7},{0xBB20, 0xB9A8},{0xBB29, 0xB9A9},
- {0xBB2B, 0xB9AA},{0xBB34, 0xB9AB},{0xBB35, 0xB9AC},{0xBB36, 0xB9AD},{0xBB38, 0xB9AE},{0xBB3B, 0xB9AF},{0xBB3C, 0xB9B0},{0xBB3D, 0xB9B1},
- {0xBB3E, 0xB9B2},{0xBB44, 0xB9B3},{0xBB45, 0xB9B4},{0xBB47, 0xB9B5},{0xBB49, 0xB9B6},{0xBB4D, 0xB9B7},{0xBB4F, 0xB9B8},{0xBB50, 0xB9B9},
- {0xBB54, 0xB9BA},{0xBB58, 0xB9BB},{0xBB61, 0xB9BC},{0xBB63, 0xB9BD},{0xBB6C, 0xB9BE},{0xBB88, 0xB9BF},{0xBB8C, 0xB9C0},{0xBB90, 0xB9C1},
- {0xBBA4, 0xB9C2},{0xBBA8, 0xB9C3},{0xBBAC, 0xB9C4},{0xBBB4, 0xB9C5},{0xBBB7, 0xB9C6},{0xBBC0, 0xB9C7},{0xBBC4, 0xB9C8},{0xBBC8, 0xB9C9},
- {0xBBD0, 0xB9CA},{0xBBD3, 0xB9CB},{0xBBF8, 0xB9CC},{0xBBF9, 0xB9CD},{0xBBFC, 0xB9CE},{0xBBFF, 0xB9CF},{0xBC00, 0xB9D0},{0xBC02, 0xB9D1},
- {0xBC08, 0xB9D2},{0xBC09, 0xB9D3},{0xBC0B, 0xB9D4},{0xBC0C, 0xB9D5},{0xBC0D, 0xB9D6},{0xBC0F, 0xB9D7},{0xBC11, 0xB9D8},{0xBC14, 0xB9D9},
- {0xBC15, 0xB9DA},{0xBC16, 0xB9DB},{0xBC17, 0xB9DC},{0xBC18, 0xB9DD},{0xBC1B, 0xB9DE},{0xBC1C, 0xB9DF},{0xBC1D, 0xB9E0},{0xBC1E, 0xB9E1},
- {0xBC1F, 0xB9E2},{0xBC24, 0xB9E3},{0xBC25, 0xB9E4},{0xBC27, 0xB9E5},{0xBC29, 0xB9E6},{0xBC2D, 0xB9E7},{0xBC30, 0xB9E8},{0xBC31, 0xB9E9},
- {0xBC34, 0xB9EA},{0xBC38, 0xB9EB},{0xBC40, 0xB9EC},{0xBC41, 0xB9ED},{0xBC43, 0xB9EE},{0xBC44, 0xB9EF},{0xBC45, 0xB9F0},{0xBC49, 0xB9F1},
- {0xBC4C, 0xB9F2},{0xBC4D, 0xB9F3},{0xBC50, 0xB9F4},{0xBC5D, 0xB9F5},{0xBC84, 0xB9F6},{0xBC85, 0xB9F7},{0xBC88, 0xB9F8},{0xBC8B, 0xB9F9},
- {0xBC8C, 0xB9FA},{0xBC8E, 0xB9FB},{0xBC94, 0xB9FC},{0xBC95, 0xB9FD},{0xBC97, 0xB9FE},{0xBC99, 0xBAA1},{0xBC9A, 0xBAA2},{0xBCA0, 0xBAA3},
- {0xBCA1, 0xBAA4},{0xBCA4, 0xBAA5},{0xBCA7, 0xBAA6},{0xBCA8, 0xBAA7},{0xBCB0, 0xBAA8},{0xBCB1, 0xBAA9},{0xBCB3, 0xBAAA},{0xBCB4, 0xBAAB},
- {0xBCB5, 0xBAAC},{0xBCBC, 0xBAAD},{0xBCBD, 0xBAAE},{0xBCC0, 0xBAAF},{0xBCC4, 0xBAB0},{0xBCCD, 0xBAB1},{0xBCCF, 0xBAB2},{0xBCD0, 0xBAB3},
- {0xBCD1, 0xBAB4},{0xBCD5, 0xBAB5},{0xBCD8, 0xBAB6},{0xBCDC, 0xBAB7},{0xBCF4, 0xBAB8},{0xBCF5, 0xBAB9},{0xBCF6, 0xBABA},{0xBCF8, 0xBABB},
- {0xBCFC, 0xBABC},{0xBD04, 0xBABD},{0xBD05, 0xBABE},{0xBD07, 0xBABF},{0xBD09, 0xBAC0},{0xBD10, 0xBAC1},{0xBD14, 0xBAC2},{0xBD24, 0xBAC3},
- {0xBD2C, 0xBAC4},{0xBD40, 0xBAC5},{0xBD48, 0xBAC6},{0xBD49, 0xBAC7},{0xBD4C, 0xBAC8},{0xBD50, 0xBAC9},{0xBD58, 0xBACA},{0xBD59, 0xBACB},
- {0xBD64, 0xBACC},{0xBD68, 0xBACD},{0xBD80, 0xBACE},{0xBD81, 0xBACF},{0xBD84, 0xBAD0},{0xBD87, 0xBAD1},{0xBD88, 0xBAD2},{0xBD89, 0xBAD3},
- {0xBD8A, 0xBAD4},{0xBD90, 0xBAD5},{0xBD91, 0xBAD6},{0xBD93, 0xBAD7},{0xBD95, 0xBAD8},{0xBD99, 0xBAD9},{0xBD9A, 0xBADA},{0xBD9C, 0xBADB},
- {0xBDA4, 0xBADC},{0xBDB0, 0xBADD},{0xBDB8, 0xBADE},{0xBDD4, 0xBADF},{0xBDD5, 0xBAE0},{0xBDD8, 0xBAE1},{0xBDDC, 0xBAE2},{0xBDE9, 0xBAE3},
- {0xBDF0, 0xBAE4},{0xBDF4, 0xBAE5},{0xBDF8, 0xBAE6},{0xBE00, 0xBAE7},{0xBE03, 0xBAE8},{0xBE05, 0xBAE9},{0xBE0C, 0xBAEA},{0xBE0D, 0xBAEB},
- {0xBE10, 0xBAEC},{0xBE14, 0xBAED},{0xBE1C, 0xBAEE},{0xBE1D, 0xBAEF},{0xBE1F, 0xBAF0},{0xBE44, 0xBAF1},{0xBE45, 0xBAF2},{0xBE48, 0xBAF3},
- {0xBE4C, 0xBAF4},{0xBE4E, 0xBAF5},{0xBE54, 0xBAF6},{0xBE55, 0xBAF7},{0xBE57, 0xBAF8},{0xBE59, 0xBAF9},{0xBE5A, 0xBAFA},{0xBE5B, 0xBAFB},
- {0xBE60, 0xBAFC},{0xBE61, 0xBAFD},{0xBE64, 0xBAFE},{0xBE68, 0xBBA1},{0xBE6A, 0xBBA2},{0xBE70, 0xBBA3},{0xBE71, 0xBBA4},{0xBE73, 0xBBA5},
- {0xBE74, 0xBBA6},{0xBE75, 0xBBA7},{0xBE7B, 0xBBA8},{0xBE7C, 0xBBA9},{0xBE7D, 0xBBAA},{0xBE80, 0xBBAB},{0xBE84, 0xBBAC},{0xBE8C, 0xBBAD},
- {0xBE8D, 0xBBAE},{0xBE8F, 0xBBAF},{0xBE90, 0xBBB0},{0xBE91, 0xBBB1},{0xBE98, 0xBBB2},{0xBE99, 0xBBB3},{0xBEA8, 0xBBB4},{0xBED0, 0xBBB5},
- {0xBED1, 0xBBB6},{0xBED4, 0xBBB7},{0xBED7, 0xBBB8},{0xBED8, 0xBBB9},{0xBEE0, 0xBBBA},{0xBEE3, 0xBBBB},{0xBEE4, 0xBBBC},{0xBEE5, 0xBBBD},
- {0xBEEC, 0xBBBE},{0xBF01, 0xBBBF},{0xBF08, 0xBBC0},{0xBF09, 0xBBC1},{0xBF18, 0xBBC2},{0xBF19, 0xBBC3},{0xBF1B, 0xBBC4},{0xBF1C, 0xBBC5},
- {0xBF1D, 0xBBC6},{0xBF40, 0xBBC7},{0xBF41, 0xBBC8},{0xBF44, 0xBBC9},{0xBF48, 0xBBCA},{0xBF50, 0xBBCB},{0xBF51, 0xBBCC},{0xBF55, 0xBBCD},
- {0xBF94, 0xBBCE},{0xBFB0, 0xBBCF},{0xBFC5, 0xBBD0},{0xBFCC, 0xBBD1},{0xBFCD, 0xBBD2},{0xBFD0, 0xBBD3},{0xBFD4, 0xBBD4},{0xBFDC, 0xBBD5},
- {0xBFDF, 0xBBD6},{0xBFE1, 0xBBD7},{0xC03C, 0xBBD8},{0xC051, 0xBBD9},{0xC058, 0xBBDA},{0xC05C, 0xBBDB},{0xC060, 0xBBDC},{0xC068, 0xBBDD},
- {0xC069, 0xBBDE},{0xC090, 0xBBDF},{0xC091, 0xBBE0},{0xC094, 0xBBE1},{0xC098, 0xBBE2},{0xC0A0, 0xBBE3},{0xC0A1, 0xBBE4},{0xC0A3, 0xBBE5},
- {0xC0A5, 0xBBE6},{0xC0AC, 0xBBE7},{0xC0AD, 0xBBE8},{0xC0AF, 0xBBE9},{0xC0B0, 0xBBEA},{0xC0B3, 0xBBEB},{0xC0B4, 0xBBEC},{0xC0B5, 0xBBED},
- {0xC0B6, 0xBBEE},{0xC0BC, 0xBBEF},{0xC0BD, 0xBBF0},{0xC0BF, 0xBBF1},{0xC0C0, 0xBBF2},{0xC0C1, 0xBBF3},{0xC0C5, 0xBBF4},{0xC0C8, 0xBBF5},
- {0xC0C9, 0xBBF6},{0xC0CC, 0xBBF7},{0xC0D0, 0xBBF8},{0xC0D8, 0xBBF9},{0xC0D9, 0xBBFA},{0xC0DB, 0xBBFB},{0xC0DC, 0xBBFC},{0xC0DD, 0xBBFD},
- {0xC0E4, 0xBBFE},{0xC0E5, 0xBCA1},{0xC0E8, 0xBCA2},{0xC0EC, 0xBCA3},{0xC0F4, 0xBCA4},{0xC0F5, 0xBCA5},{0xC0F7, 0xBCA6},{0xC0F9, 0xBCA7},
- {0xC100, 0xBCA8},{0xC104, 0xBCA9},{0xC108, 0xBCAA},{0xC110, 0xBCAB},{0xC115, 0xBCAC},{0xC11C, 0xBCAD},{0xC11D, 0xBCAE},{0xC11E, 0xBCAF},
- {0xC11F, 0xBCB0},{0xC120, 0xBCB1},{0xC123, 0xBCB2},{0xC124, 0xBCB3},{0xC126, 0xBCB4},{0xC127, 0xBCB5},{0xC12C, 0xBCB6},{0xC12D, 0xBCB7},
- {0xC12F, 0xBCB8},{0xC130, 0xBCB9},{0xC131, 0xBCBA},{0xC136, 0xBCBB},{0xC138, 0xBCBC},{0xC139, 0xBCBD},{0xC13C, 0xBCBE},{0xC140, 0xBCBF},
- {0xC148, 0xBCC0},{0xC149, 0xBCC1},{0xC14B, 0xBCC2},{0xC14C, 0xBCC3},{0xC14D, 0xBCC4},{0xC154, 0xBCC5},{0xC155, 0xBCC6},{0xC158, 0xBCC7},
- {0xC15C, 0xBCC8},{0xC164, 0xBCC9},{0xC165, 0xBCCA},{0xC167, 0xBCCB},{0xC168, 0xBCCC},{0xC169, 0xBCCD},{0xC170, 0xBCCE},{0xC174, 0xBCCF},
- {0xC178, 0xBCD0},{0xC185, 0xBCD1},{0xC18C, 0xBCD2},{0xC18D, 0xBCD3},{0xC18E, 0xBCD4},{0xC190, 0xBCD5},{0xC194, 0xBCD6},{0xC196, 0xBCD7},
- {0xC19C, 0xBCD8},{0xC19D, 0xBCD9},{0xC19F, 0xBCDA},{0xC1A1, 0xBCDB},{0xC1A5, 0xBCDC},{0xC1A8, 0xBCDD},{0xC1A9, 0xBCDE},{0xC1AC, 0xBCDF},
- {0xC1B0, 0xBCE0},{0xC1BD, 0xBCE1},{0xC1C4, 0xBCE2},{0xC1C8, 0xBCE3},{0xC1CC, 0xBCE4},{0xC1D4, 0xBCE5},{0xC1D7, 0xBCE6},{0xC1D8, 0xBCE7},
- {0xC1E0, 0xBCE8},{0xC1E4, 0xBCE9},{0xC1E8, 0xBCEA},{0xC1F0, 0xBCEB},{0xC1F1, 0xBCEC},{0xC1F3, 0xBCED},{0xC1FC, 0xBCEE},{0xC1FD, 0xBCEF},
- {0xC200, 0xBCF0},{0xC204, 0xBCF1},{0xC20C, 0xBCF2},{0xC20D, 0xBCF3},{0xC20F, 0xBCF4},{0xC211, 0xBCF5},{0xC218, 0xBCF6},{0xC219, 0xBCF7},
- {0xC21C, 0xBCF8},{0xC21F, 0xBCF9},{0xC220, 0xBCFA},{0xC228, 0xBCFB},{0xC229, 0xBCFC},{0xC22B, 0xBCFD},{0xC22D, 0xBCFE},{0xC22F, 0xBDA1},
- {0xC231, 0xBDA2},{0xC232, 0xBDA3},{0xC234, 0xBDA4},{0xC248, 0xBDA5},{0xC250, 0xBDA6},{0xC251, 0xBDA7},{0xC254, 0xBDA8},{0xC258, 0xBDA9},
- {0xC260, 0xBDAA},{0xC265, 0xBDAB},{0xC26C, 0xBDAC},{0xC26D, 0xBDAD},{0xC270, 0xBDAE},{0xC274, 0xBDAF},{0xC27C, 0xBDB0},{0xC27D, 0xBDB1},
- {0xC27F, 0xBDB2},{0xC281, 0xBDB3},{0xC288, 0xBDB4},{0xC289, 0xBDB5},{0xC290, 0xBDB6},{0xC298, 0xBDB7},{0xC29B, 0xBDB8},{0xC29D, 0xBDB9},
- {0xC2A4, 0xBDBA},{0xC2A5, 0xBDBB},{0xC2A8, 0xBDBC},{0xC2AC, 0xBDBD},{0xC2AD, 0xBDBE},{0xC2B4, 0xBDBF},{0xC2B5, 0xBDC0},{0xC2B7, 0xBDC1},
- {0xC2B9, 0xBDC2},{0xC2DC, 0xBDC3},{0xC2DD, 0xBDC4},{0xC2E0, 0xBDC5},{0xC2E3, 0xBDC6},{0xC2E4, 0xBDC7},{0xC2EB, 0xBDC8},{0xC2EC, 0xBDC9},
- {0xC2ED, 0xBDCA},{0xC2EF, 0xBDCB},{0xC2F1, 0xBDCC},{0xC2F6, 0xBDCD},{0xC2F8, 0xBDCE},{0xC2F9, 0xBDCF},{0xC2FB, 0xBDD0},{0xC2FC, 0xBDD1},
- {0xC300, 0xBDD2},{0xC308, 0xBDD3},{0xC309, 0xBDD4},{0xC30C, 0xBDD5},{0xC30D, 0xBDD6},{0xC313, 0xBDD7},{0xC314, 0xBDD8},{0xC315, 0xBDD9},
- {0xC318, 0xBDDA},{0xC31C, 0xBDDB},{0xC324, 0xBDDC},{0xC325, 0xBDDD},{0xC328, 0xBDDE},{0xC329, 0xBDDF},{0xC345, 0xBDE0},{0xC368, 0xBDE1},
- {0xC369, 0xBDE2},{0xC36C, 0xBDE3},{0xC370, 0xBDE4},{0xC372, 0xBDE5},{0xC378, 0xBDE6},{0xC379, 0xBDE7},{0xC37C, 0xBDE8},{0xC37D, 0xBDE9},
- {0xC384, 0xBDEA},{0xC388, 0xBDEB},{0xC38C, 0xBDEC},{0xC3C0, 0xBDED},{0xC3D8, 0xBDEE},{0xC3D9, 0xBDEF},{0xC3DC, 0xBDF0},{0xC3DF, 0xBDF1},
- {0xC3E0, 0xBDF2},{0xC3E2, 0xBDF3},{0xC3E8, 0xBDF4},{0xC3E9, 0xBDF5},{0xC3ED, 0xBDF6},{0xC3F4, 0xBDF7},{0xC3F5, 0xBDF8},{0xC3F8, 0xBDF9},
- {0xC408, 0xBDFA},{0xC410, 0xBDFB},{0xC424, 0xBDFC},{0xC42C, 0xBDFD},{0xC430, 0xBDFE},{0xC434, 0xBEA1},{0xC43C, 0xBEA2},{0xC43D, 0xBEA3},
- {0xC448, 0xBEA4},{0xC464, 0xBEA5},{0xC465, 0xBEA6},{0xC468, 0xBEA7},{0xC46C, 0xBEA8},{0xC474, 0xBEA9},{0xC475, 0xBEAA},{0xC479, 0xBEAB},
- {0xC480, 0xBEAC},{0xC494, 0xBEAD},{0xC49C, 0xBEAE},{0xC4B8, 0xBEAF},{0xC4BC, 0xBEB0},{0xC4E9, 0xBEB1},{0xC4F0, 0xBEB2},{0xC4F1, 0xBEB3},
- {0xC4F4, 0xBEB4},{0xC4F8, 0xBEB5},{0xC4FA, 0xBEB6},{0xC4FF, 0xBEB7},{0xC500, 0xBEB8},{0xC501, 0xBEB9},{0xC50C, 0xBEBA},{0xC510, 0xBEBB},
- {0xC514, 0xBEBC},{0xC51C, 0xBEBD},{0xC528, 0xBEBE},{0xC529, 0xBEBF},{0xC52C, 0xBEC0},{0xC530, 0xBEC1},{0xC538, 0xBEC2},{0xC539, 0xBEC3},
- {0xC53B, 0xBEC4},{0xC53D, 0xBEC5},{0xC544, 0xBEC6},{0xC545, 0xBEC7},{0xC548, 0xBEC8},{0xC549, 0xBEC9},{0xC54A, 0xBECA},{0xC54C, 0xBECB},
- {0xC54D, 0xBECC},{0xC54E, 0xBECD},{0xC553, 0xBECE},{0xC554, 0xBECF},{0xC555, 0xBED0},{0xC557, 0xBED1},{0xC558, 0xBED2},{0xC559, 0xBED3},
- {0xC55D, 0xBED4},{0xC55E, 0xBED5},{0xC560, 0xBED6},{0xC561, 0xBED7},{0xC564, 0xBED8},{0xC568, 0xBED9},{0xC570, 0xBEDA},{0xC571, 0xBEDB},
- {0xC573, 0xBEDC},{0xC574, 0xBEDD},{0xC575, 0xBEDE},{0xC57C, 0xBEDF},{0xC57D, 0xBEE0},{0xC580, 0xBEE1},{0xC584, 0xBEE2},{0xC587, 0xBEE3},
- {0xC58C, 0xBEE4},{0xC58D, 0xBEE5},{0xC58F, 0xBEE6},{0xC591, 0xBEE7},{0xC595, 0xBEE8},{0xC597, 0xBEE9},{0xC598, 0xBEEA},{0xC59C, 0xBEEB},
- {0xC5A0, 0xBEEC},{0xC5A9, 0xBEED},{0xC5B4, 0xBEEE},{0xC5B5, 0xBEEF},{0xC5B8, 0xBEF0},{0xC5B9, 0xBEF1},{0xC5BB, 0xBEF2},{0xC5BC, 0xBEF3},
- {0xC5BD, 0xBEF4},{0xC5BE, 0xBEF5},{0xC5C4, 0xBEF6},{0xC5C5, 0xBEF7},{0xC5C6, 0xBEF8},{0xC5C7, 0xBEF9},{0xC5C8, 0xBEFA},{0xC5C9, 0xBEFB},
- {0xC5CA, 0xBEFC},{0xC5CC, 0xBEFD},{0xC5CE, 0xBEFE},{0xC5D0, 0xBFA1},{0xC5D1, 0xBFA2},{0xC5D4, 0xBFA3},{0xC5D8, 0xBFA4},{0xC5E0, 0xBFA5},
- {0xC5E1, 0xBFA6},{0xC5E3, 0xBFA7},{0xC5E5, 0xBFA8},{0xC5EC, 0xBFA9},{0xC5ED, 0xBFAA},{0xC5EE, 0xBFAB},{0xC5F0, 0xBFAC},{0xC5F4, 0xBFAD},
- {0xC5F6, 0xBFAE},{0xC5F7, 0xBFAF},{0xC5FC, 0xBFB0},{0xC5FD, 0xBFB1},{0xC5FE, 0xBFB2},{0xC5FF, 0xBFB3},{0xC600, 0xBFB4},{0xC601, 0xBFB5},
- {0xC605, 0xBFB6},{0xC606, 0xBFB7},{0xC607, 0xBFB8},{0xC608, 0xBFB9},{0xC60C, 0xBFBA},{0xC610, 0xBFBB},{0xC618, 0xBFBC},{0xC619, 0xBFBD},
- {0xC61B, 0xBFBE},{0xC61C, 0xBFBF},{0xC624, 0xBFC0},{0xC625, 0xBFC1},{0xC628, 0xBFC2},{0xC62C, 0xBFC3},{0xC62D, 0xBFC4},{0xC62E, 0xBFC5},
- {0xC630, 0xBFC6},{0xC633, 0xBFC7},{0xC634, 0xBFC8},{0xC635, 0xBFC9},{0xC637, 0xBFCA},{0xC639, 0xBFCB},{0xC63B, 0xBFCC},{0xC640, 0xBFCD},
- {0xC641, 0xBFCE},{0xC644, 0xBFCF},{0xC648, 0xBFD0},{0xC650, 0xBFD1},{0xC651, 0xBFD2},{0xC653, 0xBFD3},{0xC654, 0xBFD4},{0xC655, 0xBFD5},
- {0xC65C, 0xBFD6},{0xC65D, 0xBFD7},{0xC660, 0xBFD8},{0xC66C, 0xBFD9},{0xC66F, 0xBFDA},{0xC671, 0xBFDB},{0xC678, 0xBFDC},{0xC679, 0xBFDD},
- {0xC67C, 0xBFDE},{0xC680, 0xBFDF},{0xC688, 0xBFE0},{0xC689, 0xBFE1},{0xC68B, 0xBFE2},{0xC68D, 0xBFE3},{0xC694, 0xBFE4},{0xC695, 0xBFE5},
- {0xC698, 0xBFE6},{0xC69C, 0xBFE7},{0xC6A4, 0xBFE8},{0xC6A5, 0xBFE9},{0xC6A7, 0xBFEA},{0xC6A9, 0xBFEB},{0xC6B0, 0xBFEC},{0xC6B1, 0xBFED},
- {0xC6B4, 0xBFEE},{0xC6B8, 0xBFEF},{0xC6B9, 0xBFF0},{0xC6BA, 0xBFF1},{0xC6C0, 0xBFF2},{0xC6C1, 0xBFF3},{0xC6C3, 0xBFF4},{0xC6C5, 0xBFF5},
- {0xC6CC, 0xBFF6},{0xC6CD, 0xBFF7},{0xC6D0, 0xBFF8},{0xC6D4, 0xBFF9},{0xC6DC, 0xBFFA},{0xC6DD, 0xBFFB},{0xC6E0, 0xBFFC},{0xC6E1, 0xBFFD},
- {0xC6E8, 0xBFFE},{0xC6E9, 0xC0A1},{0xC6EC, 0xC0A2},{0xC6F0, 0xC0A3},{0xC6F8, 0xC0A4},{0xC6F9, 0xC0A5},{0xC6FD, 0xC0A6},{0xC704, 0xC0A7},
- {0xC705, 0xC0A8},{0xC708, 0xC0A9},{0xC70C, 0xC0AA},{0xC714, 0xC0AB},{0xC715, 0xC0AC},{0xC717, 0xC0AD},{0xC719, 0xC0AE},{0xC720, 0xC0AF},
- {0xC721, 0xC0B0},{0xC724, 0xC0B1},{0xC728, 0xC0B2},{0xC730, 0xC0B3},{0xC731, 0xC0B4},{0xC733, 0xC0B5},{0xC735, 0xC0B6},{0xC737, 0xC0B7},
- {0xC73C, 0xC0B8},{0xC73D, 0xC0B9},{0xC740, 0xC0BA},{0xC744, 0xC0BB},{0xC74A, 0xC0BC},{0xC74C, 0xC0BD},{0xC74D, 0xC0BE},{0xC74F, 0xC0BF},
- {0xC751, 0xC0C0},{0xC752, 0xC0C1},{0xC753, 0xC0C2},{0xC754, 0xC0C3},{0xC755, 0xC0C4},{0xC756, 0xC0C5},{0xC757, 0xC0C6},{0xC758, 0xC0C7},
- {0xC75C, 0xC0C8},{0xC760, 0xC0C9},{0xC768, 0xC0CA},{0xC76B, 0xC0CB},{0xC774, 0xC0CC},{0xC775, 0xC0CD},{0xC778, 0xC0CE},{0xC77C, 0xC0CF},
- {0xC77D, 0xC0D0},{0xC77E, 0xC0D1},{0xC783, 0xC0D2},{0xC784, 0xC0D3},{0xC785, 0xC0D4},{0xC787, 0xC0D5},{0xC788, 0xC0D6},{0xC789, 0xC0D7},
- {0xC78A, 0xC0D8},{0xC78E, 0xC0D9},{0xC790, 0xC0DA},{0xC791, 0xC0DB},{0xC794, 0xC0DC},{0xC796, 0xC0DD},{0xC797, 0xC0DE},{0xC798, 0xC0DF},
- {0xC79A, 0xC0E0},{0xC7A0, 0xC0E1},{0xC7A1, 0xC0E2},{0xC7A3, 0xC0E3},{0xC7A4, 0xC0E4},{0xC7A5, 0xC0E5},{0xC7A6, 0xC0E6},{0xC7AC, 0xC0E7},
- {0xC7AD, 0xC0E8},{0xC7B0, 0xC0E9},{0xC7B4, 0xC0EA},{0xC7BC, 0xC0EB},{0xC7BD, 0xC0EC},{0xC7BF, 0xC0ED},{0xC7C0, 0xC0EE},{0xC7C1, 0xC0EF},
- {0xC7C8, 0xC0F0},{0xC7C9, 0xC0F1},{0xC7CC, 0xC0F2},{0xC7CE, 0xC0F3},{0xC7D0, 0xC0F4},{0xC7D8, 0xC0F5},{0xC7DD, 0xC0F6},{0xC7E4, 0xC0F7},
- {0xC7E8, 0xC0F8},{0xC7EC, 0xC0F9},{0xC800, 0xC0FA},{0xC801, 0xC0FB},{0xC804, 0xC0FC},{0xC808, 0xC0FD},{0xC80A, 0xC0FE},{0xC810, 0xC1A1},
- {0xC811, 0xC1A2},{0xC813, 0xC1A3},{0xC815, 0xC1A4},{0xC816, 0xC1A5},{0xC81C, 0xC1A6},{0xC81D, 0xC1A7},{0xC820, 0xC1A8},{0xC824, 0xC1A9},
- {0xC82C, 0xC1AA},{0xC82D, 0xC1AB},{0xC82F, 0xC1AC},{0xC831, 0xC1AD},{0xC838, 0xC1AE},{0xC83C, 0xC1AF},{0xC840, 0xC1B0},{0xC848, 0xC1B1},
- {0xC849, 0xC1B2},{0xC84C, 0xC1B3},{0xC84D, 0xC1B4},{0xC854, 0xC1B5},{0xC870, 0xC1B6},{0xC871, 0xC1B7},{0xC874, 0xC1B8},{0xC878, 0xC1B9},
- {0xC87A, 0xC1BA},{0xC880, 0xC1BB},{0xC881, 0xC1BC},{0xC883, 0xC1BD},{0xC885, 0xC1BE},{0xC886, 0xC1BF},{0xC887, 0xC1C0},{0xC88B, 0xC1C1},
- {0xC88C, 0xC1C2},{0xC88D, 0xC1C3},{0xC894, 0xC1C4},{0xC89D, 0xC1C5},{0xC89F, 0xC1C6},{0xC8A1, 0xC1C7},{0xC8A8, 0xC1C8},{0xC8BC, 0xC1C9},
- {0xC8BD, 0xC1CA},{0xC8C4, 0xC1CB},{0xC8C8, 0xC1CC},{0xC8CC, 0xC1CD},{0xC8D4, 0xC1CE},{0xC8D5, 0xC1CF},{0xC8D7, 0xC1D0},{0xC8D9, 0xC1D1},
- {0xC8E0, 0xC1D2},{0xC8E1, 0xC1D3},{0xC8E4, 0xC1D4},{0xC8F5, 0xC1D5},{0xC8FC, 0xC1D6},{0xC8FD, 0xC1D7},{0xC900, 0xC1D8},{0xC904, 0xC1D9},
- {0xC905, 0xC1DA},{0xC906, 0xC1DB},{0xC90C, 0xC1DC},{0xC90D, 0xC1DD},{0xC90F, 0xC1DE},{0xC911, 0xC1DF},{0xC918, 0xC1E0},{0xC92C, 0xC1E1},
- {0xC934, 0xC1E2},{0xC950, 0xC1E3},{0xC951, 0xC1E4},{0xC954, 0xC1E5},{0xC958, 0xC1E6},{0xC960, 0xC1E7},{0xC961, 0xC1E8},{0xC963, 0xC1E9},
- {0xC96C, 0xC1EA},{0xC970, 0xC1EB},{0xC974, 0xC1EC},{0xC97C, 0xC1ED},{0xC988, 0xC1EE},{0xC989, 0xC1EF},{0xC98C, 0xC1F0},{0xC990, 0xC1F1},
- {0xC998, 0xC1F2},{0xC999, 0xC1F3},{0xC99B, 0xC1F4},{0xC99D, 0xC1F5},{0xC9C0, 0xC1F6},{0xC9C1, 0xC1F7},{0xC9C4, 0xC1F8},{0xC9C7, 0xC1F9},
- {0xC9C8, 0xC1FA},{0xC9CA, 0xC1FB},{0xC9D0, 0xC1FC},{0xC9D1, 0xC1FD},{0xC9D3, 0xC1FE},{0xC9D5, 0xC2A1},{0xC9D6, 0xC2A2},{0xC9D9, 0xC2A3},
- {0xC9DA, 0xC2A4},{0xC9DC, 0xC2A5},{0xC9DD, 0xC2A6},{0xC9E0, 0xC2A7},{0xC9E2, 0xC2A8},{0xC9E4, 0xC2A9},{0xC9E7, 0xC2AA},{0xC9EC, 0xC2AB},
- {0xC9ED, 0xC2AC},{0xC9EF, 0xC2AD},{0xC9F0, 0xC2AE},{0xC9F1, 0xC2AF},{0xC9F8, 0xC2B0},{0xC9F9, 0xC2B1},{0xC9FC, 0xC2B2},{0xCA00, 0xC2B3},
- {0xCA08, 0xC2B4},{0xCA09, 0xC2B5},{0xCA0B, 0xC2B6},{0xCA0C, 0xC2B7},{0xCA0D, 0xC2B8},{0xCA14, 0xC2B9},{0xCA18, 0xC2BA},{0xCA29, 0xC2BB},
- {0xCA4C, 0xC2BC},{0xCA4D, 0xC2BD},{0xCA50, 0xC2BE},{0xCA54, 0xC2BF},{0xCA5C, 0xC2C0},{0xCA5D, 0xC2C1},{0xCA5F, 0xC2C2},{0xCA60, 0xC2C3},
- {0xCA61, 0xC2C4},{0xCA68, 0xC2C5},{0xCA7D, 0xC2C6},{0xCA84, 0xC2C7},{0xCA98, 0xC2C8},{0xCABC, 0xC2C9},{0xCABD, 0xC2CA},{0xCAC0, 0xC2CB},
- {0xCAC4, 0xC2CC},{0xCACC, 0xC2CD},{0xCACD, 0xC2CE},{0xCACF, 0xC2CF},{0xCAD1, 0xC2D0},{0xCAD3, 0xC2D1},{0xCAD8, 0xC2D2},{0xCAD9, 0xC2D3},
- {0xCAE0, 0xC2D4},{0xCAEC, 0xC2D5},{0xCAF4, 0xC2D6},{0xCB08, 0xC2D7},{0xCB10, 0xC2D8},{0xCB14, 0xC2D9},{0xCB18, 0xC2DA},{0xCB20, 0xC2DB},
- {0xCB21, 0xC2DC},{0xCB41, 0xC2DD},{0xCB48, 0xC2DE},{0xCB49, 0xC2DF},{0xCB4C, 0xC2E0},{0xCB50, 0xC2E1},{0xCB58, 0xC2E2},{0xCB59, 0xC2E3},
- {0xCB5D, 0xC2E4},{0xCB64, 0xC2E5},{0xCB78, 0xC2E6},{0xCB79, 0xC2E7},{0xCB9C, 0xC2E8},{0xCBB8, 0xC2E9},{0xCBD4, 0xC2EA},{0xCBE4, 0xC2EB},
- {0xCBE7, 0xC2EC},{0xCBE9, 0xC2ED},{0xCC0C, 0xC2EE},{0xCC0D, 0xC2EF},{0xCC10, 0xC2F0},{0xCC14, 0xC2F1},{0xCC1C, 0xC2F2},{0xCC1D, 0xC2F3},
- {0xCC21, 0xC2F4},{0xCC22, 0xC2F5},{0xCC27, 0xC2F6},{0xCC28, 0xC2F7},{0xCC29, 0xC2F8},{0xCC2C, 0xC2F9},{0xCC2E, 0xC2FA},{0xCC30, 0xC2FB},
- {0xCC38, 0xC2FC},{0xCC39, 0xC2FD},{0xCC3B, 0xC2FE},{0xCC3C, 0xC3A1},{0xCC3D, 0xC3A2},{0xCC3E, 0xC3A3},{0xCC44, 0xC3A4},{0xCC45, 0xC3A5},
- {0xCC48, 0xC3A6},{0xCC4C, 0xC3A7},{0xCC54, 0xC3A8},{0xCC55, 0xC3A9},{0xCC57, 0xC3AA},{0xCC58, 0xC3AB},{0xCC59, 0xC3AC},{0xCC60, 0xC3AD},
- {0xCC64, 0xC3AE},{0xCC66, 0xC3AF},{0xCC68, 0xC3B0},{0xCC70, 0xC3B1},{0xCC75, 0xC3B2},{0xCC98, 0xC3B3},{0xCC99, 0xC3B4},{0xCC9C, 0xC3B5},
- {0xCCA0, 0xC3B6},{0xCCA8, 0xC3B7},{0xCCA9, 0xC3B8},{0xCCAB, 0xC3B9},{0xCCAC, 0xC3BA},{0xCCAD, 0xC3BB},{0xCCB4, 0xC3BC},{0xCCB5, 0xC3BD},
- {0xCCB8, 0xC3BE},{0xCCBC, 0xC3BF},{0xCCC4, 0xC3C0},{0xCCC5, 0xC3C1},{0xCCC7, 0xC3C2},{0xCCC9, 0xC3C3},{0xCCD0, 0xC3C4},{0xCCD4, 0xC3C5},
- {0xCCE4, 0xC3C6},{0xCCEC, 0xC3C7},{0xCCF0, 0xC3C8},{0xCD01, 0xC3C9},{0xCD08, 0xC3CA},{0xCD09, 0xC3CB},{0xCD0C, 0xC3CC},{0xCD10, 0xC3CD},
- {0xCD18, 0xC3CE},{0xCD19, 0xC3CF},{0xCD1B, 0xC3D0},{0xCD1D, 0xC3D1},{0xCD24, 0xC3D2},{0xCD28, 0xC3D3},{0xCD2C, 0xC3D4},{0xCD39, 0xC3D5},
- {0xCD5C, 0xC3D6},{0xCD60, 0xC3D7},{0xCD64, 0xC3D8},{0xCD6C, 0xC3D9},{0xCD6D, 0xC3DA},{0xCD6F, 0xC3DB},{0xCD71, 0xC3DC},{0xCD78, 0xC3DD},
- {0xCD88, 0xC3DE},{0xCD94, 0xC3DF},{0xCD95, 0xC3E0},{0xCD98, 0xC3E1},{0xCD9C, 0xC3E2},{0xCDA4, 0xC3E3},{0xCDA5, 0xC3E4},{0xCDA7, 0xC3E5},
- {0xCDA9, 0xC3E6},{0xCDB0, 0xC3E7},{0xCDC4, 0xC3E8},{0xCDCC, 0xC3E9},{0xCDD0, 0xC3EA},{0xCDE8, 0xC3EB},{0xCDEC, 0xC3EC},{0xCDF0, 0xC3ED},
- {0xCDF8, 0xC3EE},{0xCDF9, 0xC3EF},{0xCDFB, 0xC3F0},{0xCDFD, 0xC3F1},{0xCE04, 0xC3F2},{0xCE08, 0xC3F3},{0xCE0C, 0xC3F4},{0xCE14, 0xC3F5},
- {0xCE19, 0xC3F6},{0xCE20, 0xC3F7},{0xCE21, 0xC3F8},{0xCE24, 0xC3F9},{0xCE28, 0xC3FA},{0xCE30, 0xC3FB},{0xCE31, 0xC3FC},{0xCE33, 0xC3FD},
- {0xCE35, 0xC3FE},{0xCE58, 0xC4A1},{0xCE59, 0xC4A2},{0xCE5C, 0xC4A3},{0xCE5F, 0xC4A4},{0xCE60, 0xC4A5},{0xCE61, 0xC4A6},{0xCE68, 0xC4A7},
- {0xCE69, 0xC4A8},{0xCE6B, 0xC4A9},{0xCE6D, 0xC4AA},{0xCE74, 0xC4AB},{0xCE75, 0xC4AC},{0xCE78, 0xC4AD},{0xCE7C, 0xC4AE},{0xCE84, 0xC4AF},
- {0xCE85, 0xC4B0},{0xCE87, 0xC4B1},{0xCE89, 0xC4B2},{0xCE90, 0xC4B3},{0xCE91, 0xC4B4},{0xCE94, 0xC4B5},{0xCE98, 0xC4B6},{0xCEA0, 0xC4B7},
- {0xCEA1, 0xC4B8},{0xCEA3, 0xC4B9},{0xCEA4, 0xC4BA},{0xCEA5, 0xC4BB},{0xCEAC, 0xC4BC},{0xCEAD, 0xC4BD},{0xCEC1, 0xC4BE},{0xCEE4, 0xC4BF},
- {0xCEE5, 0xC4C0},{0xCEE8, 0xC4C1},{0xCEEB, 0xC4C2},{0xCEEC, 0xC4C3},{0xCEF4, 0xC4C4},{0xCEF5, 0xC4C5},{0xCEF7, 0xC4C6},{0xCEF8, 0xC4C7},
- {0xCEF9, 0xC4C8},{0xCF00, 0xC4C9},{0xCF01, 0xC4CA},{0xCF04, 0xC4CB},{0xCF08, 0xC4CC},{0xCF10, 0xC4CD},{0xCF11, 0xC4CE},{0xCF13, 0xC4CF},
- {0xCF15, 0xC4D0},{0xCF1C, 0xC4D1},{0xCF20, 0xC4D2},{0xCF24, 0xC4D3},{0xCF2C, 0xC4D4},{0xCF2D, 0xC4D5},{0xCF2F, 0xC4D6},{0xCF30, 0xC4D7},
- {0xCF31, 0xC4D8},{0xCF38, 0xC4D9},{0xCF54, 0xC4DA},{0xCF55, 0xC4DB},{0xCF58, 0xC4DC},{0xCF5C, 0xC4DD},{0xCF64, 0xC4DE},{0xCF65, 0xC4DF},
- {0xCF67, 0xC4E0},{0xCF69, 0xC4E1},{0xCF70, 0xC4E2},{0xCF71, 0xC4E3},{0xCF74, 0xC4E4},{0xCF78, 0xC4E5},{0xCF80, 0xC4E6},{0xCF85, 0xC4E7},
- {0xCF8C, 0xC4E8},{0xCFA1, 0xC4E9},{0xCFA8, 0xC4EA},{0xCFB0, 0xC4EB},{0xCFC4, 0xC4EC},{0xCFE0, 0xC4ED},{0xCFE1, 0xC4EE},{0xCFE4, 0xC4EF},
- {0xCFE8, 0xC4F0},{0xCFF0, 0xC4F1},{0xCFF1, 0xC4F2},{0xCFF3, 0xC4F3},{0xCFF5, 0xC4F4},{0xCFFC, 0xC4F5},{0xD000, 0xC4F6},{0xD004, 0xC4F7},
- {0xD011, 0xC4F8},{0xD018, 0xC4F9},{0xD02D, 0xC4FA},{0xD034, 0xC4FB},{0xD035, 0xC4FC},{0xD038, 0xC4FD},{0xD03C, 0xC4FE},{0xD044, 0xC5A1},
- {0xD045, 0xC5A2},{0xD047, 0xC5A3},{0xD049, 0xC5A4},{0xD050, 0xC5A5},{0xD054, 0xC5A6},{0xD058, 0xC5A7},{0xD060, 0xC5A8},{0xD06C, 0xC5A9},
- {0xD06D, 0xC5AA},{0xD070, 0xC5AB},{0xD074, 0xC5AC},{0xD07C, 0xC5AD},{0xD07D, 0xC5AE},{0xD081, 0xC5AF},{0xD0A4, 0xC5B0},{0xD0A5, 0xC5B1},
- {0xD0A8, 0xC5B2},{0xD0AC, 0xC5B3},{0xD0B4, 0xC5B4},{0xD0B5, 0xC5B5},{0xD0B7, 0xC5B6},{0xD0B9, 0xC5B7},{0xD0C0, 0xC5B8},{0xD0C1, 0xC5B9},
- {0xD0C4, 0xC5BA},{0xD0C8, 0xC5BB},{0xD0C9, 0xC5BC},{0xD0D0, 0xC5BD},{0xD0D1, 0xC5BE},{0xD0D3, 0xC5BF},{0xD0D4, 0xC5C0},{0xD0D5, 0xC5C1},
- {0xD0DC, 0xC5C2},{0xD0DD, 0xC5C3},{0xD0E0, 0xC5C4},{0xD0E4, 0xC5C5},{0xD0EC, 0xC5C6},{0xD0ED, 0xC5C7},{0xD0EF, 0xC5C8},{0xD0F0, 0xC5C9},
- {0xD0F1, 0xC5CA},{0xD0F8, 0xC5CB},{0xD10D, 0xC5CC},{0xD130, 0xC5CD},{0xD131, 0xC5CE},{0xD134, 0xC5CF},{0xD138, 0xC5D0},{0xD13A, 0xC5D1},
- {0xD140, 0xC5D2},{0xD141, 0xC5D3},{0xD143, 0xC5D4},{0xD144, 0xC5D5},{0xD145, 0xC5D6},{0xD14C, 0xC5D7},{0xD14D, 0xC5D8},{0xD150, 0xC5D9},
- {0xD154, 0xC5DA},{0xD15C, 0xC5DB},{0xD15D, 0xC5DC},{0xD15F, 0xC5DD},{0xD161, 0xC5DE},{0xD168, 0xC5DF},{0xD16C, 0xC5E0},{0xD17C, 0xC5E1},
- {0xD184, 0xC5E2},{0xD188, 0xC5E3},{0xD1A0, 0xC5E4},{0xD1A1, 0xC5E5},{0xD1A4, 0xC5E6},{0xD1A8, 0xC5E7},{0xD1B0, 0xC5E8},{0xD1B1, 0xC5E9},
- {0xD1B3, 0xC5EA},{0xD1B5, 0xC5EB},{0xD1BA, 0xC5EC},{0xD1BC, 0xC5ED},{0xD1C0, 0xC5EE},{0xD1D8, 0xC5EF},{0xD1F4, 0xC5F0},{0xD1F8, 0xC5F1},
- {0xD207, 0xC5F2},{0xD209, 0xC5F3},{0xD210, 0xC5F4},{0xD22C, 0xC5F5},{0xD22D, 0xC5F6},{0xD230, 0xC5F7},{0xD234, 0xC5F8},{0xD23C, 0xC5F9},
- {0xD23D, 0xC5FA},{0xD23F, 0xC5FB},{0xD241, 0xC5FC},{0xD248, 0xC5FD},{0xD25C, 0xC5FE},{0xD264, 0xC6A1},{0xD280, 0xC6A2},{0xD281, 0xC6A3},
- {0xD284, 0xC6A4},{0xD288, 0xC6A5},{0xD290, 0xC6A6},{0xD291, 0xC6A7},{0xD295, 0xC6A8},{0xD29C, 0xC6A9},{0xD2A0, 0xC6AA},{0xD2A4, 0xC6AB},
- {0xD2AC, 0xC6AC},{0xD2B1, 0xC6AD},{0xD2B8, 0xC6AE},{0xD2B9, 0xC6AF},{0xD2BC, 0xC6B0},{0xD2BF, 0xC6B1},{0xD2C0, 0xC6B2},{0xD2C2, 0xC6B3},
- {0xD2C8, 0xC6B4},{0xD2C9, 0xC6B5},{0xD2CB, 0xC6B6},{0xD2D4, 0xC6B7},{0xD2D8, 0xC6B8},{0xD2DC, 0xC6B9},{0xD2E4, 0xC6BA},{0xD2E5, 0xC6BB},
- {0xD2F0, 0xC6BC},{0xD2F1, 0xC6BD},{0xD2F4, 0xC6BE},{0xD2F8, 0xC6BF},{0xD300, 0xC6C0},{0xD301, 0xC6C1},{0xD303, 0xC6C2},{0xD305, 0xC6C3},
- {0xD30C, 0xC6C4},{0xD30D, 0xC6C5},{0xD30E, 0xC6C6},{0xD310, 0xC6C7},{0xD314, 0xC6C8},{0xD316, 0xC6C9},{0xD31C, 0xC6CA},{0xD31D, 0xC6CB},
- {0xD31F, 0xC6CC},{0xD320, 0xC6CD},{0xD321, 0xC6CE},{0xD325, 0xC6CF},{0xD328, 0xC6D0},{0xD329, 0xC6D1},{0xD32C, 0xC6D2},{0xD330, 0xC6D3},
- {0xD338, 0xC6D4},{0xD339, 0xC6D5},{0xD33B, 0xC6D6},{0xD33C, 0xC6D7},{0xD33D, 0xC6D8},{0xD344, 0xC6D9},{0xD345, 0xC6DA},{0xD37C, 0xC6DB},
- {0xD37D, 0xC6DC},{0xD380, 0xC6DD},{0xD384, 0xC6DE},{0xD38C, 0xC6DF},{0xD38D, 0xC6E0},{0xD38F, 0xC6E1},{0xD390, 0xC6E2},{0xD391, 0xC6E3},
- {0xD398, 0xC6E4},{0xD399, 0xC6E5},{0xD39C, 0xC6E6},{0xD3A0, 0xC6E7},{0xD3A8, 0xC6E8},{0xD3A9, 0xC6E9},{0xD3AB, 0xC6EA},{0xD3AD, 0xC6EB},
- {0xD3B4, 0xC6EC},{0xD3B8, 0xC6ED},{0xD3BC, 0xC6EE},{0xD3C4, 0xC6EF},{0xD3C5, 0xC6F0},{0xD3C8, 0xC6F1},{0xD3C9, 0xC6F2},{0xD3D0, 0xC6F3},
- {0xD3D8, 0xC6F4},{0xD3E1, 0xC6F5},{0xD3E3, 0xC6F6},{0xD3EC, 0xC6F7},{0xD3ED, 0xC6F8},{0xD3F0, 0xC6F9},{0xD3F4, 0xC6FA},{0xD3FC, 0xC6FB},
- {0xD3FD, 0xC6FC},{0xD3FF, 0xC6FD},{0xD401, 0xC6FE},{0xD408, 0xC7A1},{0xD41D, 0xC7A2},{0xD440, 0xC7A3},{0xD444, 0xC7A4},{0xD45C, 0xC7A5},
- {0xD460, 0xC7A6},{0xD464, 0xC7A7},{0xD46D, 0xC7A8},{0xD46F, 0xC7A9},{0xD478, 0xC7AA},{0xD479, 0xC7AB},{0xD47C, 0xC7AC},{0xD47F, 0xC7AD},
- {0xD480, 0xC7AE},{0xD482, 0xC7AF},{0xD488, 0xC7B0},{0xD489, 0xC7B1},{0xD48B, 0xC7B2},{0xD48D, 0xC7B3},{0xD494, 0xC7B4},{0xD4A9, 0xC7B5},
- {0xD4CC, 0xC7B6},{0xD4D0, 0xC7B7},{0xD4D4, 0xC7B8},{0xD4DC, 0xC7B9},{0xD4DF, 0xC7BA},{0xD4E8, 0xC7BB},{0xD4EC, 0xC7BC},{0xD4F0, 0xC7BD},
- {0xD4F8, 0xC7BE},{0xD4FB, 0xC7BF},{0xD4FD, 0xC7C0},{0xD504, 0xC7C1},{0xD508, 0xC7C2},{0xD50C, 0xC7C3},{0xD514, 0xC7C4},{0xD515, 0xC7C5},
- {0xD517, 0xC7C6},{0xD53C, 0xC7C7},{0xD53D, 0xC7C8},{0xD540, 0xC7C9},{0xD544, 0xC7CA},{0xD54C, 0xC7CB},{0xD54D, 0xC7CC},{0xD54F, 0xC7CD},
- {0xD551, 0xC7CE},{0xD558, 0xC7CF},{0xD559, 0xC7D0},{0xD55C, 0xC7D1},{0xD560, 0xC7D2},{0xD565, 0xC7D3},{0xD568, 0xC7D4},{0xD569, 0xC7D5},
- {0xD56B, 0xC7D6},{0xD56D, 0xC7D7},{0xD574, 0xC7D8},{0xD575, 0xC7D9},{0xD578, 0xC7DA},{0xD57C, 0xC7DB},{0xD584, 0xC7DC},{0xD585, 0xC7DD},
- {0xD587, 0xC7DE},{0xD588, 0xC7DF},{0xD589, 0xC7E0},{0xD590, 0xC7E1},{0xD5A5, 0xC7E2},{0xD5C8, 0xC7E3},{0xD5C9, 0xC7E4},{0xD5CC, 0xC7E5},
- {0xD5D0, 0xC7E6},{0xD5D2, 0xC7E7},{0xD5D8, 0xC7E8},{0xD5D9, 0xC7E9},{0xD5DB, 0xC7EA},{0xD5DD, 0xC7EB},{0xD5E4, 0xC7EC},{0xD5E5, 0xC7ED},
- {0xD5E8, 0xC7EE},{0xD5EC, 0xC7EF},{0xD5F4, 0xC7F0},{0xD5F5, 0xC7F1},{0xD5F7, 0xC7F2},{0xD5F9, 0xC7F3},{0xD600, 0xC7F4},{0xD601, 0xC7F5},
- {0xD604, 0xC7F6},{0xD608, 0xC7F7},{0xD610, 0xC7F8},{0xD611, 0xC7F9},{0xD613, 0xC7FA},{0xD614, 0xC7FB},{0xD615, 0xC7FC},{0xD61C, 0xC7FD},
- {0xD620, 0xC7FE},{0xD624, 0xC8A1},{0xD62D, 0xC8A2},{0xD638, 0xC8A3},{0xD639, 0xC8A4},{0xD63C, 0xC8A5},{0xD640, 0xC8A6},{0xD645, 0xC8A7},
- {0xD648, 0xC8A8},{0xD649, 0xC8A9},{0xD64B, 0xC8AA},{0xD64D, 0xC8AB},{0xD651, 0xC8AC},{0xD654, 0xC8AD},{0xD655, 0xC8AE},{0xD658, 0xC8AF},
- {0xD65C, 0xC8B0},{0xD667, 0xC8B1},{0xD669, 0xC8B2},{0xD670, 0xC8B3},{0xD671, 0xC8B4},{0xD674, 0xC8B5},{0xD683, 0xC8B6},{0xD685, 0xC8B7},
- {0xD68C, 0xC8B8},{0xD68D, 0xC8B9},{0xD690, 0xC8BA},{0xD694, 0xC8BB},{0xD69D, 0xC8BC},{0xD69F, 0xC8BD},{0xD6A1, 0xC8BE},{0xD6A8, 0xC8BF},
- {0xD6AC, 0xC8C0},{0xD6B0, 0xC8C1},{0xD6B9, 0xC8C2},{0xD6BB, 0xC8C3},{0xD6C4, 0xC8C4},{0xD6C5, 0xC8C5},{0xD6C8, 0xC8C6},{0xD6CC, 0xC8C7},
- {0xD6D1, 0xC8C8},{0xD6D4, 0xC8C9},{0xD6D7, 0xC8CA},{0xD6D9, 0xC8CB},{0xD6E0, 0xC8CC},{0xD6E4, 0xC8CD},{0xD6E8, 0xC8CE},{0xD6F0, 0xC8CF},
- {0xD6F5, 0xC8D0},{0xD6FC, 0xC8D1},{0xD6FD, 0xC8D2},{0xD700, 0xC8D3},{0xD704, 0xC8D4},{0xD711, 0xC8D5},{0xD718, 0xC8D6},{0xD719, 0xC8D7},
- {0xD71C, 0xC8D8},{0xD720, 0xC8D9},{0xD728, 0xC8DA},{0xD729, 0xC8DB},{0xD72B, 0xC8DC},{0xD72D, 0xC8DD},{0xD734, 0xC8DE},{0xD735, 0xC8DF},
- {0xD738, 0xC8E0},{0xD73C, 0xC8E1},{0xD744, 0xC8E2},{0xD747, 0xC8E3},{0xD749, 0xC8E4},{0xD750, 0xC8E5},{0xD751, 0xC8E6},{0xD754, 0xC8E7},
- {0xD756, 0xC8E8},{0xD757, 0xC8E9},{0xD758, 0xC8EA},{0xD759, 0xC8EB},{0xD760, 0xC8EC},{0xD761, 0xC8ED},{0xD763, 0xC8EE},{0xD765, 0xC8EF},
- {0xD769, 0xC8F0},{0xD76C, 0xC8F1},{0xD770, 0xC8F2},{0xD774, 0xC8F3},{0xD77C, 0xC8F4},{0xD77D, 0xC8F5},{0xD781, 0xC8F6},{0xD788, 0xC8F7},
- {0xD789, 0xC8F8},{0xD78C, 0xC8F9},{0xD790, 0xC8FA},{0xD798, 0xC8FB},{0xD799, 0xC8FC},{0xD79B, 0xC8FD},{0xD79D, 0xC8FE},{0xF900, 0xCBD0},
- {0xF901, 0xCBD6},{0xF902, 0xCBE7},{0xF903, 0xCDCF},{0xF904, 0xCDE8},{0xF905, 0xCEAD},{0xF906, 0xCFFB},{0xF907, 0xD0A2},{0xF908, 0xD0B8},
- {0xF909, 0xD0D0},{0xF90A, 0xD0DD},{0xF90B, 0xD1D4},{0xF90C, 0xD1D5},{0xF90D, 0xD1D8},{0xF90E, 0xD1DB},{0xF90F, 0xD1DC},{0xF910, 0xD1DD},
- {0xF911, 0xD1DE},{0xF912, 0xD1DF},{0xF913, 0xD1E0},{0xF914, 0xD1E2},{0xF915, 0xD1E3},{0xF916, 0xD1E4},{0xF917, 0xD1E5},{0xF918, 0xD1E6},
- {0xF919, 0xD1E8},{0xF91A, 0xD1E9},{0xF91B, 0xD1EA},{0xF91C, 0xD1EB},{0xF91D, 0xD1ED},{0xF91E, 0xD1EF},{0xF91F, 0xD1F0},{0xF920, 0xD1F2},
- {0xF921, 0xD1F6},{0xF922, 0xD1FA},{0xF923, 0xD1FC},{0xF924, 0xD1FD},{0xF925, 0xD1FE},{0xF926, 0xD2A2},{0xF927, 0xD2A3},{0xF928, 0xD2A7},
- {0xF929, 0xD2A8},{0xF92A, 0xD2A9},{0xF92B, 0xD2AA},{0xF92C, 0xD2AB},{0xF92D, 0xD2AD},{0xF92E, 0xD2B2},{0xF92F, 0xD2BE},{0xF930, 0xD2C2},
- {0xF931, 0xD2C3},{0xF932, 0xD2C4},{0xF933, 0xD2C6},{0xF934, 0xD2C7},{0xF935, 0xD2C8},{0xF936, 0xD2C9},{0xF937, 0xD2CA},{0xF938, 0xD2CB},
- {0xF939, 0xD2CD},{0xF93A, 0xD2CE},{0xF93B, 0xD2CF},{0xF93C, 0xD2D0},{0xF93D, 0xD2D1},{0xF93E, 0xD2D2},{0xF93F, 0xD2D3},{0xF940, 0xD2D4},
- {0xF941, 0xD2D5},{0xF942, 0xD2D6},{0xF943, 0xD2D7},{0xF944, 0xD2D9},{0xF945, 0xD2DA},{0xF946, 0xD2DE},{0xF947, 0xD2DF},{0xF948, 0xD2E1},
- {0xF949, 0xD2E2},{0xF94A, 0xD2E4},{0xF94B, 0xD2E5},{0xF94C, 0xD2E6},{0xF94D, 0xD2E7},{0xF94E, 0xD2E8},{0xF94F, 0xD2E9},{0xF950, 0xD2EA},
- {0xF951, 0xD2EB},{0xF952, 0xD2F0},{0xF953, 0xD2F1},{0xF954, 0xD2F2},{0xF955, 0xD2F3},{0xF956, 0xD2F4},{0xF957, 0xD2F5},{0xF958, 0xD2F7},
- {0xF959, 0xD2F8},{0xF95A, 0xD4E6},{0xF95B, 0xD4FC},{0xF95C, 0xD5A5},{0xF95D, 0xD5AB},{0xF95E, 0xD5AE},{0xF95F, 0xD6B8},{0xF960, 0xD6CD},
- {0xF961, 0xD7CB},{0xF962, 0xD7E4},{0xF963, 0xDBC5},{0xF964, 0xDBE4},{0xF965, 0xDCA5},{0xF966, 0xDDA5},{0xF967, 0xDDD5},{0xF968, 0xDDF4},
- {0xF969, 0xDEFC},{0xF96A, 0xDEFE},{0xF96B, 0xDFB3},{0xF96C, 0xDFE1},{0xF96D, 0xDFE8},{0xF96E, 0xE0F1},{0xF96F, 0xE1AD},{0xF970, 0xE1ED},
- {0xF971, 0xE3F5},{0xF972, 0xE4A1},{0xF973, 0xE4A9},{0xF974, 0xE5AE},{0xF975, 0xE5B1},{0xF976, 0xE5B2},{0xF977, 0xE5B9},{0xF978, 0xE5BB},
- {0xF979, 0xE5BC},{0xF97A, 0xE5C4},{0xF97B, 0xE5CE},{0xF97C, 0xE5D0},{0xF97D, 0xE5D2},{0xF97E, 0xE5D6},{0xF97F, 0xE5FA},{0xF980, 0xE5FB},
- {0xF981, 0xE5FC},{0xF982, 0xE5FE},{0xF983, 0xE6A1},{0xF984, 0xE6A4},{0xF985, 0xE6A7},{0xF986, 0xE6AD},{0xF987, 0xE6AF},{0xF988, 0xE6B0},
- {0xF989, 0xE6B1},{0xF98A, 0xE6B3},{0xF98B, 0xE6B7},{0xF98C, 0xE6B8},{0xF98D, 0xE6BC},{0xF98E, 0xE6C4},{0xF98F, 0xE6C6},{0xF990, 0xE6C7},
- {0xF991, 0xE6CA},{0xF992, 0xE6D2},{0xF993, 0xE6D6},{0xF994, 0xE6D9},{0xF995, 0xE6DC},{0xF996, 0xE6DF},{0xF997, 0xE6E1},{0xF998, 0xE6E4},
- {0xF999, 0xE6E5},{0xF99A, 0xE6E6},{0xF99B, 0xE6E8},{0xF99C, 0xE6EA},{0xF99D, 0xE6EB},{0xF99E, 0xE6EC},{0xF99F, 0xE6EF},{0xF9A0, 0xE6F1},
- {0xF9A1, 0xE6F2},{0xF9A2, 0xE6F5},{0xF9A3, 0xE6F6},{0xF9A4, 0xE6F7},{0xF9A5, 0xE6F9},{0xF9A6, 0xE7A1},{0xF9A7, 0xE7A6},{0xF9A8, 0xE7A9},
- {0xF9A9, 0xE7AA},{0xF9AA, 0xE7AC},{0xF9AB, 0xE7AD},{0xF9AC, 0xE7B0},{0xF9AD, 0xE7BF},{0xF9AE, 0xE7C1},{0xF9AF, 0xE7C6},{0xF9B0, 0xE7C7},
- {0xF9B1, 0xE7CB},{0xF9B2, 0xE7CD},{0xF9B3, 0xE7CF},{0xF9B4, 0xE7D0},{0xF9B5, 0xE7D3},{0xF9B6, 0xE7DF},{0xF9B7, 0xE7E4},{0xF9B8, 0xE7E6},
- {0xF9B9, 0xE7F7},{0xF9BA, 0xE8E7},{0xF9BB, 0xE8E8},{0xF9BC, 0xE8F0},{0xF9BD, 0xE8F1},{0xF9BE, 0xE8F7},{0xF9BF, 0xE8F9},{0xF9C0, 0xE8FB},
- {0xF9C1, 0xE8FE},{0xF9C2, 0xE9A7},{0xF9C3, 0xE9AC},{0xF9C4, 0xE9CC},{0xF9C5, 0xE9F7},{0xF9C6, 0xEAC1},{0xF9C7, 0xEAE5},{0xF9C8, 0xEAF4},
- {0xF9C9, 0xEAF7},{0xF9CA, 0xEAFC},{0xF9CB, 0xEAFE},{0xF9CC, 0xEBA4},{0xF9CD, 0xEBA7},{0xF9CE, 0xEBA9},{0xF9CF, 0xEBAA},{0xF9D0, 0xEBBA},
- {0xF9D1, 0xEBBB},{0xF9D2, 0xEBBD},{0xF9D3, 0xEBC1},{0xF9D4, 0xEBC2},{0xF9D5, 0xEBC6},{0xF9D6, 0xEBC7},{0xF9D7, 0xEBCC},{0xF9D8, 0xEBCF},
- {0xF9D9, 0xEBD0},{0xF9DA, 0xEBD1},{0xF9DB, 0xEBD2},{0xF9DC, 0xEBD8},{0xF9DD, 0xECA6},{0xF9DE, 0xECA7},{0xF9DF, 0xECAA},{0xF9E0, 0xECAF},
- {0xF9E1, 0xECB0},{0xF9E2, 0xECB1},{0xF9E3, 0xECB2},{0xF9E4, 0xECB5},{0xF9E5, 0xECB8},{0xF9E6, 0xECBA},{0xF9E7, 0xECC0},{0xF9E8, 0xECC1},
- {0xF9E9, 0xECC5},{0xF9EA, 0xECC6},{0xF9EB, 0xECC9},{0xF9EC, 0xECCA},{0xF9ED, 0xECD5},{0xF9EE, 0xECDD},{0xF9EF, 0xECDE},{0xF9F0, 0xECE1},
- {0xF9F1, 0xECE4},{0xF9F2, 0xECE7},{0xF9F3, 0xECE8},{0xF9F4, 0xECF7},{0xF9F5, 0xECF8},{0xF9F6, 0xECFA},{0xF9F7, 0xEDA1},{0xF9F8, 0xEDA2},
- {0xF9F9, 0xEDA3},{0xF9FA, 0xEDEE},{0xF9FB, 0xEEDB},{0xF9FC, 0xF2BD},{0xF9FD, 0xF2FA},{0xF9FE, 0xF3B1},{0xF9FF, 0xF4A7},{0xFA00, 0xF4EE},
- {0xFA01, 0xF6F4},{0xFA02, 0xF6F6},{0xFA03, 0xF7B8},{0xFA04, 0xF7C8},{0xFA05, 0xF7D3},{0xFA06, 0xF8DB},{0xFA07, 0xF8F0},{0xFA08, 0xFAA1},
- {0xFA09, 0xFAA2},{0xFA0A, 0xFAE6},{0xFA0B, 0xFCA9},{0xFF01, 0xA3A1},{0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA3A4},{0xFF05, 0xA3A5},
- {0xFF06, 0xA3A6},{0xFF07, 0xA3A7},{0xFF08, 0xA3A8},{0xFF09, 0xA3A9},{0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},
- {0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},{0xFF10, 0xA3B0},{0xFF11, 0xA3B1},{0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},
- {0xFF16, 0xA3B6},{0xFF17, 0xA3B7},{0xFF18, 0xA3B8},{0xFF19, 0xA3B9},{0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},
- {0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},{0xFF20, 0xA3C0},{0xFF21, 0xA3C1},{0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},
- {0xFF26, 0xA3C6},{0xFF27, 0xA3C7},{0xFF28, 0xA3C8},{0xFF29, 0xA3C9},{0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},
- {0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},{0xFF30, 0xA3D0},{0xFF31, 0xA3D1},{0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},
- {0xFF36, 0xA3D6},{0xFF37, 0xA3D7},{0xFF38, 0xA3D8},{0xFF39, 0xA3D9},{0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA1AC},{0xFF3D, 0xA3DD},
- {0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},{0xFF40, 0xA3E0},{0xFF41, 0xA3E1},{0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},
- {0xFF46, 0xA3E6},{0xFF47, 0xA3E7},{0xFF48, 0xA3E8},{0xFF49, 0xA3E9},{0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},
- {0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},{0xFF50, 0xA3F0},{0xFF51, 0xA3F1},{0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},
- {0xFF56, 0xA3F6},{0xFF57, 0xA3F7},{0xFF58, 0xA3F8},{0xFF59, 0xA3F9},{0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},
- {0xFF5E, 0xA2A6},{0xFFE0, 0xA1CB},{0xFFE1, 0xA1CC},{0xFFE2, 0xA1FE},{0xFFE3, 0xA3FE},{0xFFE5, 0xA1CD},{0xFFE6, 0xA3DC}
-};
diff --git a/vcl/source/fontsubset/xlat.cxx b/vcl/source/fontsubset/xlat.cxx
index 27b2f517f4a1..c4699ec5a81a 100644
--- a/vcl/source/fontsubset/xlat.cxx
+++ b/vcl/source/fontsubset/xlat.cxx
@@ -25,163 +25,196 @@
*
************************************************************************/
-/*
- *
- * Data translation from Unicode to MS encodings
- * If the host system provides this functionality
- * this file should be rewritten to use it and
- * the large translation arrays should be removed
- *
- * Author: Alexander Gelfenbain
- *
- */
+#include "rtl/textcvt.h"
+#include <tools/debug.hxx>
-#include "xlat.hxx"
+namespace { // anonymous namespace
-namespace vcl
-{
+// ====================================================================
-// TODO: use generic encoding converters and get rid of the include files below
-#include "u2big5.inc"
-#include "u2johab.inc"
-#include "u2prc.inc"
-#include "u2shiftjis.inc"
-#include "u2wansung.inc"
+#define MAX_CVT_SELECT 6
-#define MISSING_CODE 0
+class ConverterCache
+{
+public:
+ explicit ConverterCache( void );
+ ~ConverterCache( void );
+ sal_uInt16 convertOne( int nSelect, sal_Unicode );
+ void convertStr( int nSelect, const sal_Unicode* pSrc, sal_uInt16* pDst, int nCount );
+protected:
+ void ensureConverter( int nSelect );
+private:
+ rtl_UnicodeToTextConverter maConverterCache[ MAX_CVT_SELECT+1 ];
+ rtl_UnicodeToTextContext maContexts[ MAX_CVT_SELECT+1 ];
+};
+
+// ====================================================================
+
+ConverterCache::ConverterCache( void)
+{
+ for( int i = 0; i <= MAX_CVT_SELECT; ++i)
+ {
+ maConverterCache[i] = NULL;
+ maContexts[i] = NULL;
+ }
+}
-static sal_uInt16 xlat(sal_uInt16pair p[], sal_uInt32 n, sal_uInt16 src)
+// --------------------------------------------------------------------
+
+ConverterCache::~ConverterCache( void)
{
- int l = 0, r = n - 1, i;
- sal_uInt16 t, res = MISSING_CODE;
+ for( int i = 0; i <= MAX_CVT_SELECT; ++i)
+ {
+ if( !maContexts[i] )
+ continue;
+ rtl_destroyUnicodeToTextContext( maConverterCache[i], maContexts[i] );
+ rtl_destroyUnicodeToTextConverter( maConverterCache[i] );
+ }
+}
- do {
- i = (l + r) >> 1;
- t = p[i].s;
- if (src >= t) l = i + 1;
- if (src <= t) r = i - 1;
- } while (l <= r);
+// --------------------------------------------------------------------
- if (l - r == 2) {
- res = p[l-1].d;
+void ConverterCache::ensureConverter( int nSelect )
+{
+ // DBG_ASSERT( (2<=nSelect) && (nSelect<=MAX_CVT_SELECT)), "invalid XLAT.Converter requested" );
+ rtl_UnicodeToTextContext aContext = maContexts[ nSelect ];
+ if( !aContext )
+ {
+ rtl_TextEncoding eRecodeFrom = RTL_TEXTENCODING_UNICODE;
+ switch( nSelect )
+ {
+ default: nSelect = 1; // fall through to unicode recoding
+ case 1: eRecodeFrom = RTL_TEXTENCODING_UNICODE; break;
+ case 2: eRecodeFrom = RTL_TEXTENCODING_SHIFT_JIS; break;
+ case 3: eRecodeFrom = RTL_TEXTENCODING_GB_2312; break;
+ case 4: eRecodeFrom = RTL_TEXTENCODING_BIG5; break;
+ case 5: eRecodeFrom = RTL_TEXTENCODING_MS_949; break;
+ case 6: eRecodeFrom = RTL_TEXTENCODING_MS_1361; break;
+ }
+ rtl_UnicodeToTextConverter aRecodeConverter = rtl_createUnicodeToTextConverter( eRecodeFrom );
+ maConverterCache[ nSelect ] = aRecodeConverter;
+
+ aContext = rtl_createUnicodeToTextContext( aRecodeConverter );
+ maContexts[ nSelect ] = aContext;
}
- return res;
+ rtl_resetUnicodeToTextContext( maConverterCache[ nSelect ], aContext );
+}
+
+// --------------------------------------------------------------------
+
+sal_uInt16 ConverterCache::convertOne( int nSelect, sal_Unicode aChar )
+{
+ ensureConverter( nSelect );
+
+ sal_Unicode aUCS2Char = aChar;
+ sal_Char aTempArray[8];
+ sal_Size nTempSize;
+ sal_uInt32 nCvtInfo;
+
+ // TODO: use direct unicode->mbcs converter should there ever be one
+ int nCodeLen = rtl_convertUnicodeToText(
+ maConverterCache[ nSelect ], maContexts[ nSelect ],
+ &aUCS2Char, 1, aTempArray, sizeof(aTempArray),
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_0,
+ &nCvtInfo, &nTempSize );
+
+ sal_uInt16 aCode = aTempArray[0];
+ for( int i = 1; i < nCodeLen; ++i )
+ aCode = (aCode << 8) + (aTempArray[i] & 0xFF);
+ return aCode;
+}
+
+// --------------------------------------------------------------------
+
+void ConverterCache::convertStr( int nSelect, const sal_Unicode* pSrc, sal_uInt16* pDst, int nCount )
+{
+ ensureConverter( nSelect );
+
+ for( int n = 0; n < nCount; ++n )
+ {
+ sal_Unicode aUCS2Char = pSrc[n];
+
+ sal_Char aTempArray[8];
+ sal_Size nTempSize;
+ sal_uInt32 nCvtInfo;
+
+ // assume that non-unicode-fonts do not support codepoints >U+FFFF
+ // TODO: use direct unicode->mbcs converter should there ever be one
+ int nCodeLen = rtl_convertUnicodeToText(
+ maConverterCache[ nSelect ], maContexts[ nSelect ],
+ &aUCS2Char, 1, aTempArray, sizeof(aTempArray),
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_0,
+ &nCvtInfo, &nTempSize );
+
+ sal_uInt16 aCode = aTempArray[0];
+ for( int i = 1; i < nCodeLen; ++i )
+ aCode = (aCode << 8) + (aTempArray[i] & 0xFF);
+ pDst[n] = aCode;
+ }
}
+} // anonymous namespace
+
+// ====================================================================
+
+#include "xlat.hxx"
+
+namespace vcl
+{
+
+static ConverterCache aCC;
+
sal_uInt16 TranslateChar12(sal_uInt16 src)
{
- return xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), src);
+ return aCC.convertOne( 2, src);
}
sal_uInt16 TranslateChar13(sal_uInt16 src)
{
- return xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), src);
+ return aCC.convertOne( 3, src);
}
sal_uInt16 TranslateChar14(sal_uInt16 src)
{
- return xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), src);
+ return aCC.convertOne( 4, src);
}
sal_uInt16 TranslateChar15(sal_uInt16 src)
{
- return xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), src);
+ return aCC.convertOne( 5, src);
}
sal_uInt16 TranslateChar16(sal_uInt16 src)
{
- return xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_5[0]), src);
+ return aCC.convertOne( 6, src);
}
void TranslateString12(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 2, src, dst, n);
}
void TranslateString13(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 3, src, dst, n);
}
void TranslateString14(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 4, src, dst, n);
}
void TranslateString15(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 5, src, dst, n);
}
void TranslateString16(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_6[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_6[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 6, src, dst, n);
}
} // namespace vcl
diff --git a/vcl/source/fontsubset/xlat.hxx b/vcl/source/fontsubset/xlat.hxx
index c3bd076f6fbd..2e6d1721776b 100644
--- a/vcl/source/fontsubset/xlat.hxx
+++ b/vcl/source/fontsubset/xlat.hxx
@@ -31,7 +31,7 @@
#ifndef __XLAT_H
#define __XLAT_H
-#include "sft.hxx"
+//####include "sft.hxx"
namespace vcl
{
diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx
index 77f065912e5d..76e94e091ff7 100644
--- a/vcl/source/gdi/graph.cxx
+++ b/vcl/source/gdi/graph.cxx
@@ -775,7 +775,7 @@ void Graphic::SetLink( const GfxLink& rGfxLink )
// ------------------------------------------------------------------------
-GfxLink Graphic::GetLink()
+GfxLink Graphic::GetLink() const
{
return mpImpGraphic->ImplGetLink();
}
diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx
index 9e1378f22326..039041826124 100644
--- a/vcl/source/gdi/impimagetree.cxx
+++ b/vcl/source/gdi/impimagetree.cxx
@@ -189,6 +189,17 @@ void ImplImageTree::resetZips() {
m_zips.clear();
{
rtl::OUString url(
+ RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/program/edition/images.zip"));
+ rtl::Bootstrap::expandMacros(url);
+ INetURLObject u(url);
+ OSL_ASSERT(!u.HasError());
+ m_zips.push_back(
+ std::make_pair(
+ u.GetMainURL(INetURLObject::NO_DECODE),
+ css::uno::Reference< css::container::XNameAccess >()));
+ }
+ {
+ rtl::OUString url(
RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/share/config"));
rtl::Bootstrap::expandMacros(url);
INetURLObject u(url);
diff --git a/vcl/source/gdi/makefile.mk b/vcl/source/gdi/makefile.mk
index f9fa69d894cd..597702aa7c94 100644
--- a/vcl/source/gdi/makefile.mk
+++ b/vcl/source/gdi/makefile.mk
@@ -45,6 +45,9 @@ TARGET=gdi
.IF "$(COM)"=="ICC"
CDEFS+=-D_STD_NO_NAMESPACE -D_VOS_NO_NAMESPACE -D_UNO_NO_NAMESPACE
.ENDIF
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CDEFS+=-DENABLE_GRAPHITE
+.ENDIF
# --- Files --------------------------------------------------------
diff --git a/vcl/source/gdi/metric.cxx b/vcl/source/gdi/metric.cxx
index 49e4dc080d8f..c387bd158306 100644
--- a/vcl/source/gdi/metric.cxx
+++ b/vcl/source/gdi/metric.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: metric.cxx,v $
- * $Revision: 1.23 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -236,50 +233,80 @@ BOOL FontMetric::operator==( const FontMetric& rMetric ) const
// =======================================================================
-ImplFontCharMap::ImplFontCharMap( int nRangePairs,
- const sal_uInt32* pRangeCodes, const int* pStartGlyphs )
-: mpRangeCodes( pRangeCodes ),
- mpStartGlyphs( pStartGlyphs ),
- mnRangeCount( nRangePairs ),
- mnCharCount( 0 ),
- mnRefCount( 1 )
+CmapResult::CmapResult( bool bSymbolic,
+ const sal_uInt32* pRangeCodes, int nRangeCount,
+ const int* pStartGlyphs, const USHORT* pExtraGlyphIds )
+: mpRangeCodes( pRangeCodes)
+, mpStartGlyphs( pStartGlyphs)
+, mpGlyphIds( pExtraGlyphIds)
+, mnRangeCount( nRangeCount)
+, mbSymbolic( bSymbolic)
+, mbRecoded( false)
+{}
+
+// =======================================================================
+
+ImplFontCharMap::ImplFontCharMap( const CmapResult& rCR )
+: mpRangeCodes( rCR.mpRangeCodes )
+, mpStartGlyphs( rCR.mpStartGlyphs )
+, mpGlyphIds( rCR.mpGlyphIds )
+, mnRangeCount( rCR.mnRangeCount )
+, mnCharCount( 0 )
+, mnRefCount( 1 )
{
- while( --nRangePairs >= 0 )
+ const sal_uInt32* pRangePtr = mpRangeCodes;
+ for( int i = mnRangeCount; --i >= 0; pRangePtr += 2 )
{
- sal_uInt32 cFirst = *(pRangeCodes++);
- sal_uInt32 cLast = *(pRangeCodes++);
+ sal_uInt32 cFirst = pRangePtr[0];
+ sal_uInt32 cLast = pRangePtr[1];
mnCharCount += cLast - cFirst;
}
}
static ImplFontCharMap* pDefaultImplFontCharMap = NULL;
-static const sal_uInt32 pDefaultRangeCodes[] = {0x0020,0xD800, 0xE000,0xFFF0};
+static const sal_uInt32 aDefaultUnicodeRanges[] = {0x0020,0xD800, 0xE000,0xFFF0};
+static const sal_uInt32 aDefaultSymbolRanges[] = {0x0020,0x0100, 0xF020,0xF100};
+
+// -----------------------------------------------------------------------
+
+bool ImplFontCharMap::IsDefaultMap() const
+{
+ const bool bIsDefault = (mpRangeCodes == aDefaultUnicodeRanges) || (mpRangeCodes == aDefaultSymbolRanges);
+ return bIsDefault;
+}
// -----------------------------------------------------------------------
ImplFontCharMap::~ImplFontCharMap()
{
- if( mpRangeCodes != pDefaultRangeCodes )
- delete[] mpRangeCodes;
+ if( IsDefaultMap() )
+ return;
+ delete[] mpRangeCodes;
delete[] mpStartGlyphs;
+ delete[] mpGlyphIds;
}
// -----------------------------------------------------------------------
-ImplFontCharMap* ImplFontCharMap::GetDefaultMap()
+ImplFontCharMap* ImplFontCharMap::GetDefaultMap( bool bSymbols)
{
if( pDefaultImplFontCharMap )
pDefaultImplFontCharMap->AddReference();
else
- pDefaultImplFontCharMap = new ImplFontCharMap( 2, pDefaultRangeCodes, NULL );
- return pDefaultImplFontCharMap;
-}
+ {
+ const sal_uInt32* pRangeCodes = aDefaultUnicodeRanges;
+ int nCodesCount = sizeof(aDefaultUnicodeRanges) / sizeof(*pRangeCodes);
+ if( bSymbols )
+ {
+ pRangeCodes = aDefaultSymbolRanges;
+ nCodesCount = sizeof(aDefaultSymbolRanges) / sizeof(*pRangeCodes);
+ }
-// -----------------------------------------------------------------------
+ CmapResult aDefaultCR( bSymbols, pRangeCodes, nCodesCount/2 );
+ pDefaultImplFontCharMap = new ImplFontCharMap( aDefaultCR );
+ }
-bool ImplFontCharMap::IsDefaultMap() const
-{
- return (mpRangeCodes == pDefaultRangeCodes);
+ return pDefaultImplFontCharMap;
}
// -----------------------------------------------------------------------
@@ -328,15 +355,24 @@ int ImplFontCharMap::ImplFindRangeIndex( sal_uInt32 cChar ) const
bool ImplFontCharMap::HasChar( sal_uInt32 cChar ) const
{
- int nRange = ImplFindRangeIndex( cChar );
- if( nRange==0 && cChar<mpRangeCodes[0] )
- return false;
- return ((nRange & 1) == 0);
+ bool bHasChar = false;
+
+ if( mpStartGlyphs == NULL ) { // only the char-ranges are known
+ const int nRange = ImplFindRangeIndex( cChar );
+ if( nRange==0 && cChar<mpRangeCodes[0] )
+ return false;
+ bHasChar = ((nRange & 1) == 0); // inside a range
+ } else { // glyph mapping is available
+ const int nGlyphIndex = GetGlyphIndex( cChar );
+ bHasChar = (nGlyphIndex != 0); // not the notdef-glyph
+ }
+
+ return bHasChar;
}
// -----------------------------------------------------------------------
-int ImplFontCharMap::GetGlyphIndex( sal_uInt32 cChar )
+int ImplFontCharMap::GetGlyphIndex( sal_uInt32 cChar ) const
{
// return -1 if the object doesn't know the glyph ids
if( !mpStartGlyphs )
@@ -344,14 +380,30 @@ int ImplFontCharMap::GetGlyphIndex( sal_uInt32 cChar )
// return 0 if the unicode doesn't have a matching glyph
int nRange = ImplFindRangeIndex( cChar );
- if( nRange==0 && cChar<mpRangeCodes[0] )
- return 0;
- if( nRange & 1 )
+ // check that we are inside any range
+ if( (nRange == 0) && (cChar < mpRangeCodes[0]) ) {
+ // symbol aliasing gives symbol fonts a second chance
+ const bool bSymbolic = (mpRangeCodes[0]>=0xF000) & (mpRangeCodes[1]<=0xF0FF);
+ if( !bSymbolic )
+ return 0;
+ // check for symbol aliasing (U+F0xx -> U+00xx)
+ nRange = ImplFindRangeIndex( cChar | 0xF000 );
+ }
+ // check that we are inside a range
+ if( (nRange & 1) != 0 )
return 0;
- // calculate the glyph index with the range' start code and start glyph
- int nGlyphIndex = mpStartGlyphs[ nRange/2 ];
- nGlyphIndex += cChar - mpRangeCodes[ nRange ];
+ // get glyph index directly or indirectly
+ int nGlyphIndex = cChar - mpRangeCodes[ nRange ];
+ const int nStartIndex = mpStartGlyphs[ nRange/2 ];
+ if( nStartIndex >= 0 ) {
+ // the glyph index can be calculated
+ nGlyphIndex += nStartIndex;
+ } else {
+ // the glyphid array has the glyph index
+ nGlyphIndex = mpGlyphIds[ nGlyphIndex - nStartIndex];
+ }
+
return nGlyphIndex;
}
@@ -478,24 +530,29 @@ static int GetSShort( const unsigned char* p ){ return((static_cast<signed char>
// TODO: move CMAP parsing directly into the ImplFontCharMap class
bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
{
+ rResult.mpRangeCodes = NULL;
+ rResult.mpStartGlyphs= NULL;
+ rResult.mpGlyphIds = NULL;
+ rResult.mnRangeCount = 0;
+ rResult.mbRecoded = false;
+ rResult.mbSymbolic = false;
+
+ // parse the table header and check for validity
if( !pCmap || (nLength < 24) )
return false;
- rResult.mpPairCodes = NULL;
- rResult.mpStartGlyphs= NULL;
- rResult.mnPairCount = 0;
- rResult.mbRecoded = false;
- rResult.mbSymbolic = false;
-
if( GetUShort( pCmap ) != 0x0000 ) // simple check for CMAP corruption
return false;
+ int nSubTables = GetUShort( pCmap + 2 );
+ if( (nSubTables <= 0) || (nLength < (24 + 8*nSubTables)) )
+ return false;
+
// find the most interesting subtable in the CMAP
rtl_TextEncoding eRecodeFrom = RTL_TEXTENCODING_UNICODE;
int nOffset = 0;
int nFormat = -1;
int nBestVal = 0;
- int nSubTables = GetUShort( pCmap + 2 );
for( const unsigned char* p = pCmap + 4; --nSubTables >= 0; p += 8 )
{
int nPlatform = GetUShort( p );
@@ -548,6 +605,11 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
sal_uInt32* pCodePairs = NULL;
int* pStartGlyphs = NULL;
+ typedef std::vector<USHORT> U16Vector;
+ U16Vector aGlyphIdArray;
+ aGlyphIdArray.reserve( 0x1000 );
+ aGlyphIdArray.push_back( 0 );
+
// format 4, the most common 16bit char mapping table
if( (nFormat == 4) && ((nOffset+16) < nLength) )
{
@@ -557,20 +619,33 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
pStartGlyphs = new int[ nRangeCount ];
const unsigned char* pLimitBase = pCmap + nOffset + 14;
const unsigned char* pBeginBase = pLimitBase + nSegCountX2 + 2;
- const unsigned char* pGlyphBase = pBeginBase + nSegCountX2;
+ const unsigned char* pDeltaBase = pBeginBase + nSegCountX2;
+ const unsigned char* pOffsetBase = pDeltaBase + nSegCountX2;
sal_uInt32* pCP = pCodePairs;
for( int i = 0; i < nRangeCount; ++i )
{
- sal_uInt32 cMinChar = GetUShort( pBeginBase + 2*i );
- sal_uInt32 cMaxChar = GetUShort( pLimitBase + 2*i );
- int nStartGlyph = cMinChar + GetSShort( pGlyphBase + 2*i );
+ const sal_uInt32 cMinChar = GetUShort( pBeginBase + 2*i );
+ const sal_uInt32 cMaxChar = GetUShort( pLimitBase + 2*i );
+ const int nGlyphDelta = GetSShort( pDeltaBase + 2*i );
+ const int nRangeOffset = GetUShort( pOffsetBase + 2*i );
if( cMinChar > cMaxChar ) // no sane font should trigger this
break;
if( cMaxChar == 0xFFFF )
break;
*(pCP++) = cMinChar;
*(pCP++) = cMaxChar + 1;
- pStartGlyphs[i] = nStartGlyph;
+ if( !nRangeOffset ) {
+ // glyphid can be calculated directly
+ pStartGlyphs[i] = (cMinChar + nGlyphDelta) & 0xFFFF;
+ } else {
+ // update the glyphid-array with the glyphs in this range
+ pStartGlyphs[i] = -(int)aGlyphIdArray.size();
+ const unsigned char* pGlyphIdPtr = pOffsetBase + 2*i + nRangeOffset;
+ for( sal_uInt32 c = cMinChar; c <= cMaxChar; ++c, pGlyphIdPtr+=2 ) {
+ const int nGlyphIndex = GetUShort( pGlyphIdPtr ) + nGlyphDelta;
+ aGlyphIdArray.push_back( static_cast<USHORT>(nGlyphIndex) );
+ }
+ }
}
nRangeCount = (pCP - pCodePairs) / 2;
}
@@ -604,6 +679,7 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
nRangeCount = (pCP - pCodePairs) / 2;
}
+ // check if any subtable resulted in something usable
if( nRangeCount <= 0 )
{
delete[] pCodePairs;
@@ -617,8 +693,8 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
pCodePairs[1] = 0x0100;
pCodePairs[2] = 0xF020; // original symbols
pCodePairs[3] = 0xF100;
- rResult.mpPairCodes = pCodePairs;
- rResult.mnPairCount = 2;
+ rResult.mpRangeCodes = pCodePairs;
+ rResult.mnRangeCount = 2;
return true;
}
@@ -701,6 +777,7 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
// glyph mapping for non-unicode fonts not implemented
delete[] pStartGlyphs;
pStartGlyphs = NULL;
+ aGlyphIdArray.clear();
// make a pCodePairs array using the vector from above
delete[] pCodePairs;
@@ -713,9 +790,23 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
*(pCP++) = *itInt;
}
- rResult.mpPairCodes = pCodePairs;
+ // prepare the glyphid-array if needed
+ // TODO: merge ranges if they are close enough?
+ USHORT* pGlyphIds = NULL;
+ if( !aGlyphIdArray.empty())
+ {
+ pGlyphIds = new USHORT[ aGlyphIdArray.size() ];
+ USHORT* pOut = pGlyphIds;
+ U16Vector::const_iterator it = aGlyphIdArray.begin();
+ while( it != aGlyphIdArray.end() )
+ *(pOut++) = *(it++);
+ }
+
+ // update the result struct
+ rResult.mpRangeCodes = pCodePairs;
rResult.mpStartGlyphs = pStartGlyphs;
- rResult.mnPairCount = nRangeCount;
+ rResult.mnRangeCount = nRangeCount;
+ rResult.mpGlyphIds = pGlyphIds;
return true;
}
@@ -821,3 +912,4 @@ sal_uInt32 FontCharMap::GetCharFromIndex( int nIndex ) const
}
// =======================================================================
+
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index 710620d54ab8..0a7a8b765b6b 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -6,8 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: outdev3.cxx,v $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -66,6 +64,9 @@
#ifndef _OSL_FILE_H
#include <osl/file.h>
#endif
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_features.hxx>
+#endif
#include <vcl/unohelp.hxx>
#include <pdfwriter_impl.hxx>
@@ -2749,6 +2750,14 @@ size_t ImplFontCache::IFSD_Hash::operator()( const ImplFontSelectData& rFSD ) co
// TODO: does it pay off to improve this hash function?
static FontNameHash aFontNameHash;
size_t nHash = aFontNameHash( rFSD.maSearchName );
+#ifdef ENABLE_GRAPHITE
+ // check for features and generate a unique hash if necessary
+ if (rFSD.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND)
+ {
+ nHash = aFontNameHash( rFSD.maTargetName );
+ }
+#endif
nHash += 11 * rFSD.mnHeight;
nHash += 19 * rFSD.meWeight;
nHash += 29 * rFSD.meItalic;
@@ -2800,6 +2809,15 @@ bool ImplFontCache::IFSD_Equal::operator()(const ImplFontSelectData& rA, const I
return false;
}
+#ifdef ENABLE_GRAPHITE
+ // check for features
+ if ((rA.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND ||
+ rB.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName)
+ return false;
+#endif
+
return true;
}
@@ -2837,7 +2855,12 @@ ImplFontEntry* ImplFontCache::GetFontEntry( ImplDevFontList* pFontList,
// if it is already known get its normalized search name
FontNameList::const_iterator it_name = maFontNameList.find( aSearchName );
if( it_name != maFontNameList.end() )
- if( !(*it_name).second.EqualsAscii( "hg", 0, 2) )
+ if( !(*it_name).second.EqualsAscii( "hg", 0, 2)
+#ifdef ENABLE_GRAPHITE
+ && (aSearchName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ == STRING_NOTFOUND)
+#endif
+ )
aSearchName = (*it_name).second;
}
@@ -2942,6 +2965,22 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD,
{
rFSD.maTargetName = GetNextFontToken( rFSD.maName, nTokenPos );
aSearchName = rFSD.maTargetName;
+
+#ifdef ENABLE_GRAPHITE
+ // Until features are properly supported, they are appended to the
+ // font name, so we need to strip them off so the font is found.
+ xub_StrLen nFeat = aSearchName.Search(grutils::GrFeatureParser::FEAT_PREFIX);
+ String aOrigName = rFSD.maTargetName;
+ String aBaseFontName(aSearchName, 0, (nFeat != STRING_NOTFOUND)?nFeat:aSearchName.Len());
+ if (nFeat != STRING_NOTFOUND && STRING_NOTFOUND !=
+ aSearchName.Search(grutils::GrFeatureParser::FEAT_ID_VALUE_SEPARATOR, nFeat))
+ {
+ aSearchName = aBaseFontName;
+ rFSD.maTargetName = aBaseFontName;
+ }
+
+#endif
+
ImplGetEnglishSearchFontName( aSearchName );
ImplFontSubstitute( aSearchName, nSubstFlags, pDevSpecific );
// #114999# special emboldening for Ricoh fonts
@@ -2972,6 +3011,10 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD,
}
}
+#ifdef ENABLE_GRAPHITE
+ // restore the features to make the font selection data unique
+ rFSD.maTargetName = aOrigName;
+#endif
// check if the current font name token or its substitute is valid
ImplDevFontListData* pFoundData = ImplFindBySearchName( aSearchName );
if( pFoundData )
@@ -2980,16 +3023,21 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD,
// some systems provide special customization
// e.g. they suggest "serif" as UI-font, but this name cannot be used directly
// because the system wants to map it to another font first, e.g. "Helvetica"
+#ifdef ENABLE_GRAPHITE
+ // use the target name to search in the prematch hook
+ rFSD.maTargetName = aBaseFontName;
+#endif
if( mpPreMatchHook )
- {
if( mpPreMatchHook->FindFontSubstitute( rFSD ) )
- {
ImplGetEnglishSearchFontName( aSearchName );
- pFoundData = ImplFindBySearchName( aSearchName );
- if( pFoundData )
- return pFoundData;
- }
- }
+#ifdef ENABLE_GRAPHITE
+ // the prematch hook uses the target name to search, but we now need
+ // to restore the features to make the font selection data unique
+ rFSD.maTargetName = aOrigName;
+#endif
+ pFoundData = ImplFindBySearchName( aSearchName );
+ if( pFoundData )
+ return pFoundData;
// break after last font name token was checked unsuccessfully
if( nTokenPos == STRING_NOTFOUND)
@@ -4448,71 +4496,78 @@ void OutputDevice::ImplDrawStrikeoutChar( long nBaseX, long nBaseY,
FontStrikeout eStrikeout,
Color aColor )
{
- BOOL bOldMap = IsMapModeEnabled();
- EnableMapMode( FALSE );
-
- Color aOldColor = GetTextColor();
- SetTextColor( aColor );
- ImplInitTextColor();
+ // PDF-export does its own strikeout drawing... why again?
+ if( mpPDFWriter && mpPDFWriter->isBuiltinFont(mpFontEntry->maFontSelData.mpFontData) )
+ return;
- xub_Unicode pChars[5];
+ // prepare string for strikeout measurement
+ static char cStrikeoutChar;
if ( eStrikeout == STRIKEOUT_SLASH )
- pChars[0] = '/';
+ cStrikeoutChar = '/';
else // ( eStrikeout == STRIKEOUT_X )
- pChars[0] = 'X';
- pChars[3]=pChars[2]=pChars[1]=pChars[0];
+ cStrikeoutChar = 'X';
+ static const int nTestStrLen = 4;
+ static const int nMaxStrikeStrLen = 2048;
+ xub_Unicode aChars[ nMaxStrikeStrLen +1]; // +1 for valgrind...
+ for( int i = 0; i < nTestStrLen; ++i)
+ aChars[i] = cStrikeoutChar;
+ const String aStrikeoutTest( aChars, nTestStrLen );
// calculate approximation of strikeout atom size
long nStrikeoutWidth = nWidth;
- String aStrikeoutTest( pChars, 4 );
- SalLayout* pLayout = ImplLayout( aStrikeoutTest, 0, 4 );
- if ( pLayout )
+ SalLayout* pLayout = ImplLayout( aStrikeoutTest, 0, nTestStrLen );
+ if( pLayout )
{
- nStrikeoutWidth = (pLayout->GetTextWidth() + 2) / 4;
+ nStrikeoutWidth = (pLayout->GetTextWidth() +nTestStrLen/2) / (nTestStrLen * pLayout->GetUnitsPerPixel());
pLayout->Release();
- if ( nStrikeoutWidth <= 0 ) // sanity check
- nStrikeoutWidth = 1;
}
+ if( nStrikeoutWidth <= 0 ) // sanity check
+ return;
// calculate acceptable strikeout length
// allow the strikeout to be one pixel larger than the text it strikes out
- long nMaxWidth = nStrikeoutWidth/2;
+ long nMaxWidth = nStrikeoutWidth / 2;
if ( nMaxWidth < 2 )
nMaxWidth = 2;
nMaxWidth += nWidth + 1;
- // build strikeout string
- long nFullStrikeoutWidth = 0;
- String aStrikeoutText( pChars, 0 );
- while ( (nFullStrikeoutWidth+=nStrikeoutWidth) < nMaxWidth+1 )
- aStrikeoutText += pChars[0];
-
+ int nStrikeStrLen = (nMaxWidth + nStrikeoutWidth - 1) / nStrikeoutWidth;
// if the text width is smaller than the strikeout text, then do not
// strike out at all. This case requires user interaction, e.g. adding
// a space to the text
- if ( (aStrikeoutText.Len() > 0)
- && !(mpPDFWriter && mpPDFWriter->isBuiltinFont(mpFontEntry->maFontSelData.mpFontData) ) )
- {
- if ( mpFontEntry->mnOrientation )
- ImplRotatePos( nBaseX, nBaseY, nX, nY, mpFontEntry->mnOrientation );
+ if( nStrikeStrLen <= 0 )
+ return;
+ if( nStrikeStrLen > nMaxStrikeStrLen )
+ nStrikeStrLen = nMaxStrikeStrLen;
- // strikeout text has to be left aligned
- ULONG nOrigTLM = mnTextLayoutMode;
- mnTextLayoutMode = TEXT_LAYOUT_BIDI_STRONG | TEXT_LAYOUT_COMPLEX_DISABLED;
- SalLayout* pSalLayout = ImplLayout( aStrikeoutText, 0, STRING_LEN );
- mnTextLayoutMode = nOrigTLM;
+ // build the strikeout string
+ for( int i = nTestStrLen; i < nStrikeStrLen; ++i)
+ aChars[i] = cStrikeoutChar;
+ const String aStrikeoutText( aChars, xub_StrLen(nStrikeStrLen) );
- if ( pSalLayout )
- {
- pSalLayout->DrawBase() = Point( nX+mnTextOffX, nY+mnTextOffY );
- pSalLayout->DrawText( *mpGraphics );
- pSalLayout->Release();
- }
- }
+ if( mpFontEntry->mnOrientation )
+ ImplRotatePos( nBaseX, nBaseY, nX, nY, mpFontEntry->mnOrientation );
+
+ // strikeout text has to be left aligned
+ ULONG nOrigTLM = mnTextLayoutMode;
+ mnTextLayoutMode = TEXT_LAYOUT_BIDI_STRONG | TEXT_LAYOUT_COMPLEX_DISABLED;
+ pLayout = ImplLayout( aStrikeoutText, 0, STRING_LEN );
+ mnTextLayoutMode = nOrigTLM;
+
+ if( !pLayout )
+ return;
+
+ // draw the strikeout text
+ const Color aOldColor = GetTextColor();
+ SetTextColor( aColor );
+ ImplInitTextColor();
+
+ pLayout->DrawBase() = Point( nX+mnTextOffX, nY+mnTextOffY );
+ pLayout->DrawText( *mpGraphics );
+ pLayout->Release();
SetTextColor( aOldColor );
ImplInitTextColor();
- EnableMapMode( bOldMap );
}
// -----------------------------------------------------------------------
@@ -5440,6 +5495,7 @@ void OutputDevice::SetFont( const Font& rNewFont )
DBG_CHKOBJ( &rNewFont, Font, NULL );
Font aFont( rNewFont );
+ aFont.SetLanguage(rNewFont.GetLanguage());
if ( mnDrawMode & (DRAWMODE_BLACKTEXT | DRAWMODE_WHITETEXT | DRAWMODE_GRAYTEXT | DRAWMODE_GHOSTEDTEXT | DRAWMODE_SETTINGSTEXT |
DRAWMODE_BLACKFILL | DRAWMODE_WHITEFILL | DRAWMODE_GRAYFILL | DRAWMODE_NOFILL |
DRAWMODE_GHOSTEDFILL | DRAWMODE_SETTINGSFILL ) )
@@ -6726,17 +6782,21 @@ void OutputDevice::ImplDrawText( const Rectangle& rRect,
{
BOOL bHighContrastBlack = FALSE;
BOOL bHighContrastWhite = FALSE;
- Color aCol;
- if( IsBackground() )
- aCol = GetBackground().GetColor();
- else
- // best guess is the face color here
- // but it may be totally wrong. the background color
- // was typically already reset
- aCol = GetSettings().GetStyleSettings().GetFaceColor();
+ const StyleSettings& rStyleSettings( GetSettings().GetStyleSettings() );
+ if( rStyleSettings.GetHighContrastMode() )
+ {
+ Color aCol;
+ if( IsBackground() )
+ aCol = GetBackground().GetColor();
+ else
+ // best guess is the face color here
+ // but it may be totally wrong. the background color
+ // was typically already reset
+ aCol = rStyleSettings.GetFaceColor();
- bHighContrastBlack = aCol.IsDark();
- bHighContrastWhite = aCol.IsBright() && GetSettings().GetStyleSettings().GetHighContrastMode();
+ bHighContrastBlack = aCol.IsDark();
+ bHighContrastWhite = aCol.IsBright();
+ }
aOldTextColor = GetTextColor();
if ( IsTextFillColor() )
@@ -6744,8 +6804,6 @@ void OutputDevice::ImplDrawText( const Rectangle& rRect,
bRestoreFillColor = TRUE;
aOldTextFillColor = GetTextFillColor();
}
- else
- bRestoreFillColor = FALSE;
if( bHighContrastBlack )
SetTextColor( COL_GREEN );
else if( bHighContrastWhite )
@@ -6760,7 +6818,7 @@ void OutputDevice::ImplDrawText( const Rectangle& rRect,
aRect.Move( 1, 1 );
DrawText( aRect, rOrigStr, nStyle & ~TEXT_DRAW_DISABLE );
*/
- SetTextColor( GetSettings().GetStyleSettings().GetShadowColor() );
+ SetTextColor( GetSettings().GetStyleSettings().GetDisableColor() );
}
}
@@ -7394,13 +7452,18 @@ void OutputDevice::DrawCtrlText( const Point& rPos, const XubString& rStr,
BOOL bRestoreFillColor;
BOOL bHighContrastBlack = FALSE;
BOOL bHighContrastWhite = FALSE;
- if( IsBackground() )
+ const StyleSettings& rStyleSettings( GetSettings().GetStyleSettings() );
+ if( rStyleSettings.GetHighContrastMode() )
{
- Wallpaper aWall = GetBackground();
- Color aCol = aWall.GetColor();
- bHighContrastBlack = aCol.IsDark();
- bHighContrastWhite = aCol.IsBright() && GetSettings().GetStyleSettings().GetHighContrastMode();
+ if( IsBackground() )
+ {
+ Wallpaper aWall = GetBackground();
+ Color aCol = aWall.GetColor();
+ bHighContrastBlack = aCol.IsDark();
+ bHighContrastWhite = aCol.IsBright();
+ }
}
+
aOldTextColor = GetTextColor();
if ( IsTextFillColor() )
{
@@ -7415,7 +7478,7 @@ void OutputDevice::DrawCtrlText( const Point& rPos, const XubString& rStr,
else if( bHighContrastWhite )
SetTextColor( COL_LIGHTGREEN );
else
- SetTextColor( GetSettings().GetStyleSettings().GetShadowColor() );
+ SetTextColor( GetSettings().GetStyleSettings().GetDisableColor() );
DrawText( rPos, aStr, nIndex, nLen, pVector, pDisplayText );
if ( !(GetSettings().GetStyleSettings().GetOptions() & STYLE_OPTION_NOMNEMONICS) && !pVector )
diff --git a/vcl/source/gdi/outdev6.cxx b/vcl/source/gdi/outdev6.cxx
index a11e276982f7..79986988afd7 100644
--- a/vcl/source/gdi/outdev6.cxx
+++ b/vcl/source/gdi/outdev6.cxx
@@ -642,51 +642,105 @@ void OutputDevice::DrawTransparent( const GDIMetaFile& rMtf, const Point& rPos,
if( pVDev->SetOutputSizePixel( aDstRect.GetSize() ) )
{
- Bitmap aPaint, aMask;
- AlphaMask aAlpha;
- MapMode aMap( GetMapMode() );
- Point aOutPos( PixelToLogic( aDstRect.TopLeft() ) );
- const BOOL bOldMap = mbMap;
-
- aMap.SetOrigin( Point( -aOutPos.X(), -aOutPos.Y() ) );
- pVDev->SetMapMode( aMap );
- const BOOL bVDevOldMap = pVDev->IsMapModeEnabled();
-
- // create paint bitmap
- ( (GDIMetaFile&) rMtf ).WindStart();
- ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
- ( (GDIMetaFile&) rMtf ).WindStart();
- pVDev->EnableMapMode( FALSE );
- aPaint = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
- pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
-
- // create mask bitmap
- pVDev->SetLineColor( COL_BLACK );
- pVDev->SetFillColor( COL_BLACK );
- pVDev->DrawRect( Rectangle( pVDev->PixelToLogic( Point() ), pVDev->GetOutputSize() ) );
- pVDev->SetDrawMode( DRAWMODE_WHITELINE | DRAWMODE_WHITEFILL | DRAWMODE_WHITETEXT |
- DRAWMODE_WHITEBITMAP | DRAWMODE_WHITEGRADIENT );
- ( (GDIMetaFile&) rMtf ).WindStart();
- ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
- ( (GDIMetaFile&) rMtf ).WindStart();
- pVDev->EnableMapMode( FALSE );
- aMask = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
- pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
-
- // create alpha mask from gradient
- pVDev->SetDrawMode( DRAWMODE_GRAYGRADIENT );
- pVDev->DrawGradient( Rectangle( rPos, rSize ), rTransparenceGradient );
- pVDev->SetDrawMode( DRAWMODE_DEFAULT );
- pVDev->EnableMapMode( FALSE );
- pVDev->DrawMask( Point(), pVDev->GetOutputSizePixel(), aMask, Color( COL_WHITE ) );
-
- aAlpha = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
-
- delete pVDev;
-
- EnableMapMode( FALSE );
- DrawBitmapEx( aDstRect.TopLeft(), BitmapEx( aPaint, aAlpha ) );
- EnableMapMode( bOldMap );
+ if(GetAntialiasing())
+ {
+ // #i102109#
+ // For MetaFile replay (see task) it may now be neccessary to take
+ // into account that the content is AntiAlialised and needs to be masked
+ // like that. Instead of masking, i will use a copy-modify-paste cycle
+ // here (as i already use in the VclPrimiziveRenderer with successs)
+ pVDev->SetAntialiasing(GetAntialiasing());
+
+ // create MapMode for buffer (offset needed) and set
+ MapMode aMap(GetMapMode());
+ const Point aOutPos(PixelToLogic(aDstRect.TopLeft()));
+ aMap.SetOrigin(Point(-aOutPos.X(), -aOutPos.Y()));
+ pVDev->SetMapMode(aMap);
+
+ // copy MapMode state and disable for target
+ const bool bOrigMapModeEnabled(IsMapModeEnabled());
+ EnableMapMode(false);
+
+ // copy MapMode state and disable for buffer
+ const bool bBufferMapModeEnabled(pVDev->IsMapModeEnabled());
+ pVDev->EnableMapMode(false);
+
+ // copy content from original to buffer
+ pVDev->DrawOutDev(
+ aPoint, pVDev->GetOutputSizePixel(), // dest
+ aDstRect.TopLeft(), pVDev->GetOutputSizePixel(), // source
+ *this);
+
+ // draw MetaFile to buffer
+ pVDev->EnableMapMode(bBufferMapModeEnabled);
+ ((GDIMetaFile&)rMtf).WindStart();
+ ((GDIMetaFile&)rMtf).Play(pVDev, rPos, rSize);
+ ((GDIMetaFile&)rMtf).WindStart();
+
+ // get content bitmap from buffer
+ pVDev->EnableMapMode(false);
+ const Bitmap aPaint(pVDev->GetBitmap(aPoint, pVDev->GetOutputSizePixel()));
+
+ // create alpha mask from gradient and get as Bitmap
+ pVDev->EnableMapMode(bBufferMapModeEnabled);
+ pVDev->SetDrawMode(DRAWMODE_GRAYGRADIENT);
+ pVDev->DrawGradient(Rectangle(rPos, rSize), rTransparenceGradient);
+ pVDev->SetDrawMode(DRAWMODE_DEFAULT);
+ pVDev->EnableMapMode(false);
+ const AlphaMask aAlpha(pVDev->GetBitmap(aPoint, pVDev->GetOutputSizePixel()));
+
+ // draw masked content to target and restore MapMode
+ DrawBitmapEx(aDstRect.TopLeft(), BitmapEx(aPaint, aAlpha));
+ EnableMapMode(bOrigMapModeEnabled);
+ }
+ else
+ {
+ Bitmap aPaint, aMask;
+ AlphaMask aAlpha;
+ MapMode aMap( GetMapMode() );
+ Point aOutPos( PixelToLogic( aDstRect.TopLeft() ) );
+ const BOOL bOldMap = mbMap;
+
+ aMap.SetOrigin( Point( -aOutPos.X(), -aOutPos.Y() ) );
+ pVDev->SetMapMode( aMap );
+ const BOOL bVDevOldMap = pVDev->IsMapModeEnabled();
+
+ // create paint bitmap
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ pVDev->EnableMapMode( FALSE );
+ aPaint = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
+ pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
+
+ // create mask bitmap
+ pVDev->SetLineColor( COL_BLACK );
+ pVDev->SetFillColor( COL_BLACK );
+ pVDev->DrawRect( Rectangle( pVDev->PixelToLogic( Point() ), pVDev->GetOutputSize() ) );
+ pVDev->SetDrawMode( DRAWMODE_WHITELINE | DRAWMODE_WHITEFILL | DRAWMODE_WHITETEXT |
+ DRAWMODE_WHITEBITMAP | DRAWMODE_WHITEGRADIENT );
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ pVDev->EnableMapMode( FALSE );
+ aMask = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
+ pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
+
+ // create alpha mask from gradient
+ pVDev->SetDrawMode( DRAWMODE_GRAYGRADIENT );
+ pVDev->DrawGradient( Rectangle( rPos, rSize ), rTransparenceGradient );
+ pVDev->SetDrawMode( DRAWMODE_DEFAULT );
+ pVDev->EnableMapMode( FALSE );
+ pVDev->DrawMask( Point(), pVDev->GetOutputSizePixel(), aMask, Color( COL_WHITE ) );
+
+ aAlpha = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
+
+ delete pVDev;
+
+ EnableMapMode( FALSE );
+ DrawBitmapEx( aDstRect.TopLeft(), BitmapEx( aPaint, aAlpha ) );
+ EnableMapMode( bOldMap );
+ }
}
else
delete pVDev;
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 25f02a1b2718..e7ee18ec7705 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -50,6 +50,7 @@
#include <vcl/outdev.h>
#include <vcl/sallayout.hxx>
#include <vcl/metric.hxx>
+#include <vcl/fontsubset.hxx>
#include <svsys.h>
#include <vcl/salgdi.hxx>
#include <vcl/svapp.hxx>
@@ -804,7 +805,7 @@ class Matrix3
{
double f[6];
- void set( double *pn ) { for( int i = 0 ; i < 5; i++ ) f[i] = pn[i]; }
+ void set( double *pn ) { for( int i = 0 ; i < 6; i++ ) f[i] = pn[i]; }
public:
Matrix3();
~Matrix3() {}
@@ -2812,6 +2813,38 @@ sal_Int32 PDFWriterImpl::emitBuiltinFont( const ImplFontData* pFont, sal_Int32 n
return nFontObject;
}
+typedef int ThreeInts[3];
+static bool getPfbSegmentLengths( const unsigned char* pFontBytes, int nByteLen,
+ ThreeInts& rSegmentLengths )
+{
+ if( !pFontBytes || (nByteLen < 0) )
+ return false;
+ const unsigned char* pPtr = pFontBytes;
+ const unsigned char* pEnd = pFontBytes + nByteLen;
+
+ for( int i = 0; i < 3; ++i) {
+ // read segment1 header
+ if( pPtr+6 >= pEnd )
+ return false;
+ if( (pPtr[0] != 0x80) || (pPtr[1] >= 0x03) )
+ return false;
+ const int nLen = (pPtr[5]<<24) + (pPtr[4]<<16) + (pPtr[3]<<8) + pPtr[2];
+ if( nLen <= 0)
+ return false;
+ rSegmentLengths[i] = nLen;
+ pPtr += nLen + 6;
+ }
+
+ // read segment-end header
+ if( pPtr+2 >= pEnd )
+ return false;
+ if( (pPtr[0] != 0x80) || (pPtr[1] != 0x03) )
+ return false;
+
+ return true;
+}
+
+// TODO: always subset instead of embedding the full font => this method becomes obsolete then
std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFontData* pFont, EmbedFont& rEmbed )
{
std::map< sal_Int32, sal_Int32 > aRet;
@@ -2852,7 +2885,7 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont
sal_Int32 nLength1, nLength2;
if( (pFontData = (const unsigned char*)m_pReferenceDevice->mpGraphics->GetEmbedFontData( pFont, nEncodedCodes, pWidths, aInfo, &nFontLen )) != NULL )
{
- if( aInfo.m_nFontType != SAL_FONTSUBSETINFO_TYPE_TYPE1 )
+ if( (aInfo.m_nFontType & FontSubsetInfo::ANY_TYPE1) == 0 )
goto streamend;
// see whether it is pfb or pfa; if it is a pfb, fill ranges
// of 6 bytes that are not part of the font program
@@ -2873,6 +2906,7 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont
}
// search for eexec
+ // TODO: use getPfbSegmentLengths() if possible to skip the search thingies below
nIndex = 0;
int nEndAsciiIndex;
int nBeginBinaryIndex;
@@ -3573,10 +3607,11 @@ sal_Int32 PDFWriterImpl::emitFontDescriptor( const ImplFontData* pFont, FontSubs
"/FontFile" );
switch( rInfo.m_nFontType )
{
- case SAL_FONTSUBSETINFO_TYPE_TRUETYPE:
+ case FontSubsetInfo::SFNT_TTF:
aLine.append( '2' );
break;
- case SAL_FONTSUBSETINFO_TYPE_TYPE1:
+ case FontSubsetInfo::TYPE1_PFA:
+ case FontSubsetInfo::TYPE1_PFB:
break;
default:
DBG_ERROR( "unknown fonttype in PDF font descriptor" );
@@ -3609,7 +3644,6 @@ bool PDFWriterImpl::emitFonts()
return false;
OStringBuffer aLine( 1024 );
- char buf[8192];
std::map< sal_Int32, sal_Int32 > aFontIDToObject;
@@ -3652,14 +3686,13 @@ bool PDFWriterImpl::emitFonts()
FontSubsetInfo aSubsetInfo;
if( m_pReferenceDevice->mpGraphics->CreateFontSubset( aTmpName, it->first, pGlyphIDs, pEncoding, pWidths, nGlyphs, aSubsetInfo ) )
{
- DBG_ASSERT( aSubsetInfo.m_nFontType == SAL_FONTSUBSETINFO_TYPE_TRUETYPE, "wrong font type in font subset" );
// create font stream
oslFileHandle aFontFile;
CHECK_RETURN( (osl_File_E_None == osl_openFile( aTmpName.pData, &aFontFile, osl_File_OpenFlag_Read ) ) );
// get file size
- sal_uInt64 nLength;
+ sal_uInt64 nLength1;
CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_End, 0 ) ) );
- CHECK_RETURN( (osl_File_E_None == osl_getFilePos( aFontFile, &nLength ) ) );
+ CHECK_RETURN( (osl_File_E_None == osl_getFilePos( aFontFile, &nLength1 ) ) );
CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) );
#if OSL_DEBUG_LEVEL > 1
@@ -3681,25 +3714,74 @@ bool PDFWriterImpl::emitFonts()
"/Filter/FlateDecode"
#endif
"/Length1 " );
- aLine.append( (sal_Int32)nLength );
+
+ sal_uInt64 nStartPos = 0;
+ if( aSubsetInfo.m_nFontType == FontSubsetInfo::SFNT_TTF )
+ {
+ aLine.append( (sal_Int32)nLength1 );
+
aLine.append( ">>\n"
"stream\n" );
CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) );
-
- sal_uInt64 nStartPos = 0;
CHECK_RETURN( (osl_File_E_None == osl_getFilePos( m_aFile, &nStartPos ) ) );
// copy font file
beginCompression();
checkAndEnableStreamEncryption( nFontStream );
- sal_uInt64 nRead;
sal_Bool bEOF = sal_False;
do
{
+ char buf[8192];
+ sal_uInt64 nRead;
CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, buf, sizeof( buf ), &nRead ) ) );
CHECK_RETURN( writeBuffer( buf, nRead ) );
CHECK_RETURN( (osl_File_E_None == osl_isEndOfFile( aFontFile, &bEOF ) ) );
} while( ! bEOF );
+ }
+ else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::CFF_FONT) != 0 )
+ {
+ // TODO: implement
+ DBG_ERROR( "PDFWriterImpl does not support CFF-font subsets yet!" );
+ }
+ else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::TYPE1_PFB) != 0 ) // TODO: also support PFA?
+ {
+ unsigned char* pBuffer = new unsigned char[ (int)nLength1 ];
+
+ sal_uInt64 nBytesRead = 0;
+ CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, pBuffer, nLength1, &nBytesRead ) ) );
+ DBG_ASSERT( nBytesRead==nLength1, "PDF-FontSubset read incomplete!" );
+ CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) );
+ // get the PFB-segment lengths
+ ThreeInts aSegmentLengths = {0,0,0};
+ getPfbSegmentLengths( pBuffer, (int)nBytesRead, aSegmentLengths );
+ // the lengths below are mandatory for PDF-exported Type1 fonts
+ // because the PFB segment headers get stripped! WhyOhWhy.
+ aLine.append( (sal_Int32)aSegmentLengths[0] );
+ aLine.append( "/Length2 " );
+ aLine.append( (sal_Int32)aSegmentLengths[1] );
+ aLine.append( "/Length3 " );
+ aLine.append( (sal_Int32)aSegmentLengths[2] );
+
+ aLine.append( ">>\n"
+ "stream\n" );
+ CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) );
+ CHECK_RETURN( (osl_File_E_None == osl_getFilePos( m_aFile, &nStartPos ) ) );
+
+ // emit PFB-sections without section headers
+ beginCompression();
+ checkAndEnableStreamEncryption( nFontStream );
+ CHECK_RETURN( writeBuffer( pBuffer+ 6, aSegmentLengths[0] ) );
+ CHECK_RETURN( writeBuffer( pBuffer+12 + aSegmentLengths[0], aSegmentLengths[1] ) );
+ CHECK_RETURN( writeBuffer( pBuffer+18 + aSegmentLengths[0] + aSegmentLengths[1], aSegmentLengths[2] ) );
+
+ delete[] pBuffer;
+ }
+ else
+ {
+ fprintf( stderr, "PDF: CreateFontSubset result in not yet supported format=%d\n",aSubsetInfo.m_nFontType);
+ aLine.append( "0 >>\nstream\n" );
+ }
+
endCompression();
disableStreamEncryption();
// close the file
@@ -3731,8 +3813,11 @@ bool PDFWriterImpl::emitFonts()
CHECK_RETURN( updateObject( nFontObject ) );
aLine.setLength( 0 );
aLine.append( nFontObject );
- aLine.append( " 0 obj\n"
- "<</Type/Font/Subtype/TrueType/BaseFont/" );
+
+ aLine.append( " 0 obj\n" );
+ aLine.append( ((aSubsetInfo.m_nFontType & FontSubsetInfo::ANY_TYPE1) != 0) ?
+ "<</Type/Font/Subtype/Type1/BaseFont/" :
+ "<</Type/Font/Subtype/TrueType/BaseFont/" );
appendSubsetName( lit->m_nFontID, aSubsetInfo.m_aPSName, aLine );
aLine.append( "\n"
"/FirstChar 0\n"
@@ -6702,14 +6787,15 @@ void PDFWriterImpl::drawHorizontalGlyphs(
for( sal_uInt32 nPos = nBeginRun+1; nPos < aRunEnds[nRun]; nPos++ )
{
appendHex( rGlyphs[nPos].m_nMappedGlyphId, aUnkernedLine );
- // check if glyph advance matches with the width of the previous glyph, else adjust
+ // check if default glyph positioning is sufficient
const Point aThisPos = aMat.transform( rGlyphs[nPos].m_aPos );
const Point aPrevPos = aMat.transform( rGlyphs[nPos-1].m_aPos );
double fAdvance = aThisPos.X() - aPrevPos.X();
- fAdvance *= 1000.0 / (fXScale * nPixelFontHeight);
- const sal_Int32 nAdjustment = rGlyphs[nPos-1].m_nNativeWidth - sal_Int32(fAdvance+0.5);
+ fAdvance *= 1000.0 / nPixelFontHeight;
+ const sal_Int32 nAdjustment = (sal_Int32)(rGlyphs[nPos-1].m_nNativeWidth - fAdvance + 0.5);
if( nAdjustment != 0 )
{
+ // apply individual glyph positioning
bNeedKern = true;
aKernedLine.append( ">" );
aKernedLine.append( nAdjustment );
@@ -8558,6 +8644,8 @@ void PDFWriterImpl::drawPolyLine( const Polygon& rPoly, const PDFWriter::ExtLine
for(sal_uInt32 a(0); a < nEdgeCount; a++)
{
+ if( a > 0 )
+ aLine.append( " " );
const sal_uInt32 nNextIndex((a + 1) % nPointCount);
const basegfx::B2DPoint aNext(aPoly.getB2DPoint(nNextIndex));
@@ -11811,3 +11899,4 @@ according to the table 3.15, pdf v 1.4 */
m_aContext.Encrypt = false; //then turn the encryption off
}
/* end i12626 methods */
+
diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx
index 50c0bafc0489..7d5ec2bf4f61 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: pdfwriter_impl.hxx,v $
- * $Revision: 1.55.134.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -57,7 +54,7 @@
class ImplFontSelectData;
class ImplFontMetricData;
-struct FontSubsetInfo;
+class FontSubsetInfo;
class ZCodec;
// the maximum password length
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
index a96d4dc64b89..21ac05a498fc 100755
--- a/vcl/source/gdi/sallayout.cxx
+++ b/vcl/source/gdi/sallayout.cxx
@@ -63,6 +63,26 @@
#include <algorithm>
+#ifdef DEBUG
+//#define MULTI_SL_DEBUG
+#endif
+
+#ifdef MULTI_SL_DEBUG
+#include <string>
+FILE * mslLogFile = NULL;
+FILE * mslLog()
+{
+#ifdef MSC
+ std::string logFileName(getenv("TEMP"));
+ logFileName.append("\\msllayout.log");
+ if (mslLogFile == NULL) mslLogFile = fopen(logFileName.c_str(),"w");
+ else fflush(mslLogFile);
+ return mslLogFile;
+#else
+ return stdout;
+#endif
+}
+#endif
// =======================================================================
// TODO: ask the glyph directly, for now we need this method because of #i99367#
@@ -1157,11 +1177,17 @@ void GenericSalLayout::ApplyDXArray( ImplLayoutArgs& rArgs )
for( int nCharPos = i = -1; rArgs.GetNextPos( &nCharPos, &bRTL ); )
{
n = nCharPos - rArgs.mnMinCharPos;
- i = pLogCluster[ n ];
- long nDelta = rArgs.mpDXArray[ n ] ;
- if( n > 0 )
- nDelta -= rArgs.mpDXArray[ n-1 ];
- pNewGlyphWidths[ i ] += nDelta * mnUnitsPerPixel;
+ if( (n < 0) || (nCharCount <= n) ) continue;
+
+ if( pLogCluster[ n ] >= 0 )
+ i = pLogCluster[ n ];
+ if( i >= 0 )
+ {
+ long nDelta = rArgs.mpDXArray[ n ] ;
+ if( n > 0 )
+ nDelta -= rArgs.mpDXArray[ n-1 ];
+ pNewGlyphWidths[ i ] += nDelta * mnUnitsPerPixel;
+ }
}
// move cluster positions using the adjusted widths
@@ -1768,6 +1794,19 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
}
}
+ // Compute rtl flags, since in some scripts glyphs/char order can be
+ // reversed for a few character sequencies e.g. Myanmar
+ std::vector<bool> vRtl(rArgs.mnEndCharPos - rArgs.mnMinCharPos, false);
+ rArgs.ResetPos();
+ bool bRtl;
+ int nRunStart, nRunEnd;
+ while (rArgs.GetNextRun(&nRunStart, &nRunEnd, &bRtl))
+ {
+ if (bRtl) std::fill(vRtl.begin() + nRunStart - rArgs.mnMinCharPos,
+ vRtl.begin() + nRunEnd - rArgs.mnMinCharPos, true);
+ }
+ rArgs.ResetPos();
+
// prepare "merge sort"
int nStartOld[ MAX_FALLBACK ];
int nStartNew[ MAX_FALLBACK ];
@@ -1804,6 +1843,10 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
nStartNew[ nLevel ] = nStartOld[ nLevel ] = 0;
nValid[ nLevel ] = mpLayouts[n]->GetNextGlyphs( 1, &nDummy, aPos,
nStartNew[ nLevel ], &nGlyphAdv[ nLevel ], &nCharPos[ nLevel ] );
+#ifdef MULTI_SL_DEBUG
+ if (nValid[nLevel]) fprintf(mslLog(), "layout[%d]->GetNextGlyphs %d,%d x%d a%d c%d %x\n", n, nStartOld[nLevel], nStartNew[nLevel], aPos.X(), nGlyphAdv[nLevel], nCharPos[nLevel],
+ rArgs.mpStr[nCharPos[nLevel]]);
+#endif
if( (n > 0) && !nValid[ nLevel ] )
{
// an empty fallback layout can be released
@@ -1829,6 +1872,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
for( n = 0; n < nLevel; ++n )
maFallbackRuns[n].ResetPos();
int nActiveCharPos = nCharPos[0];
+ int nLastRunEndChar = (vRtl[nActiveCharPos - mnMinCharPos])?
+ rArgs.mnEndCharPos : rArgs.mnMinCharPos - 1;
+ int nRunVisibleEndChar = nCharPos[0];
while( nValid[0] && (nLevel > 0))
{
// find best fallback level
@@ -1864,6 +1910,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
nStartOld[0] = nStartNew[0];
nValid[0] = mpLayouts[0]->GetNextGlyphs( 1, &nDummy, aPos,
nStartNew[0], &nGlyphAdv[0], &nCharPos[0] );
+#ifdef MULTI_SL_DEBUG
+ if (nValid[0]) fprintf(mslLog(), "layout[0]->GetNextGlyphs %d,%d x%d a%d c%d %x\n", nStartOld[0], nStartNew[0], aPos.X(), nGlyphAdv[0], nCharPos[0], rArgs.mpStr[nCharPos[0]]);
+#endif
if( !nValid[0] )
break;
}
@@ -1881,7 +1930,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
int nOrigCharPos = nCharPos[n];
nValid[n] = mpLayouts[n]->GetNextGlyphs( 1, &nDummy, aPos,
nStartNew[n], &nGlyphAdv[n], &nCharPos[n] );
-
+#ifdef MULTI_SL_DEBUG
+ if (nValid[n]) fprintf(mslLog(), "layout[%d]->GetNextGlyphs %d,%d a%d c%d %x\n", n, nStartOld[n], nStartNew[n], nGlyphAdv[n], nCharPos[n], rArgs.mpStr[nCharPos[n]]);
+#endif
// break after last glyph of active layout
if( !nValid[n] )
{
@@ -1927,6 +1978,27 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
{ maFallbackRuns[0].NextRun(); break; }
bKeepNotDef = bNeedFallback;
}
+ // check for reordered glyphs
+ if (aMultiArgs.mpDXArray &&
+ nRunVisibleEndChar < mnEndCharPos &&
+ nRunVisibleEndChar >= mnMinCharPos &&
+ nCharPos[n] < mnEndCharPos &&
+ nCharPos[n] >= mnMinCharPos)
+ {
+ if (vRtl[nActiveCharPos - mnMinCharPos])
+ {
+ if (aMultiArgs.mpDXArray[nRunVisibleEndChar-mnMinCharPos]
+ >= aMultiArgs.mpDXArray[nCharPos[n] - mnMinCharPos])
+ {
+ nRunVisibleEndChar = nCharPos[n];
+ }
+ }
+ else if (aMultiArgs.mpDXArray[nRunVisibleEndChar-mnMinCharPos]
+ <= aMultiArgs.mpDXArray[nCharPos[n] - mnMinCharPos])
+ {
+ nRunVisibleEndChar = nCharPos[n];
+ }
+ }
}
// if a justification array is available
@@ -1936,16 +2008,40 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
// the run advance is the width from the first char
// in the run to the first char in the next run
nRunAdvance = 0;
- const bool bLTR = (nActiveCharPos < nCharPos[0]);
+#ifdef MULTI_SL_DEBUG
+ const bool bLTR = !(vRtl[nActiveCharPos - mnMinCharPos]);//(nActiveCharPos < nCharPos[0]);
+ int nOldRunAdv = 0;
int nDXIndex = nCharPos[0] - mnMinCharPos - bLTR;
if( nDXIndex >= 0 )
- nRunAdvance += aMultiArgs.mpDXArray[ nDXIndex ];
+ nOldRunAdv += aMultiArgs.mpDXArray[ nDXIndex ];
nDXIndex = nActiveCharPos - mnMinCharPos - bLTR;
if( nDXIndex >= 0 )
- nRunAdvance -= aMultiArgs.mpDXArray[ nDXIndex ];
+ nOldRunAdv -= aMultiArgs.mpDXArray[ nDXIndex ];
if( !bLTR )
- nRunAdvance = -nRunAdvance;
-
+ nOldRunAdv = -nOldRunAdv;
+#endif
+ if (vRtl[nActiveCharPos - mnMinCharPos])
+ {
+ if (nRunVisibleEndChar > mnMinCharPos && nRunVisibleEndChar <= mnEndCharPos)
+ nRunAdvance -= aMultiArgs.mpDXArray[nRunVisibleEndChar - 1 - mnMinCharPos];
+ if (nLastRunEndChar > mnMinCharPos && nLastRunEndChar <= mnEndCharPos)
+ nRunAdvance += aMultiArgs.mpDXArray[nLastRunEndChar - 1 - mnMinCharPos];
+#ifdef MULTI_SL_DEBUG
+ fprintf(mslLog(), "rtl visible %d-%d,%d-%d adv%d(%d)\n", nLastRunEndChar-1, nRunVisibleEndChar-1, nActiveCharPos - bLTR, nCharPos[0] - bLTR, nRunAdvance, nOldRunAdv);
+#endif
+ }
+ else
+ {
+ if (nRunVisibleEndChar >= mnMinCharPos)
+ nRunAdvance += aMultiArgs.mpDXArray[nRunVisibleEndChar - mnMinCharPos];
+ if (nLastRunEndChar >= mnMinCharPos)
+ nRunAdvance -= aMultiArgs.mpDXArray[nLastRunEndChar - mnMinCharPos];
+#ifdef MULTI_SL_DEBUG
+ fprintf(mslLog(), "visible %d-%d,%d-%d adv%d(%d)\n", nLastRunEndChar, nRunVisibleEndChar, nActiveCharPos - bLTR, nCharPos[0] - bLTR, nRunAdvance, nOldRunAdv);
+#endif
+ }
+ nLastRunEndChar = nRunVisibleEndChar;
+ nRunVisibleEndChar = nCharPos[0];
// the requested width is still in pixel units
// => convert it to base level font units
nRunAdvance *= mnUnitsPerPixel;
@@ -1963,9 +2059,27 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
// prepare for next fallback run
nActiveCharPos = nCharPos[0];
+ // it essential that the runs don't get ahead of themselves and in the
+ // if( bKeepNotDef && !bNeedFallback ) statement above, the next run may
+ // have already been reached on the base level
for( int i = nFBLevel; --i >= 0;)
- if( !maFallbackRuns[i].PosIsInRun( nActiveCharPos ) )
- maFallbackRuns[i].NextRun();
+ {
+ if (maFallbackRuns[i].GetRun(&nRunStart, &nRunEnd, &bRtl))
+ {
+ if (bRtl)
+ {
+ if (nRunStart > nActiveCharPos)
+ maFallbackRuns[i].NextRun();
+ }
+ else
+ {
+ if (nRunEnd <= nActiveCharPos)
+ maFallbackRuns[i].NextRun();
+ }
+ }
+ }
+// if( !maFallbackRuns[i].PosIsInRun( nActiveCharPos ) )
+// maFallbackRuns[i].NextRun();
}
mpLayouts[0]->Simplify( true );
diff --git a/vcl/source/gdi/wall.cxx b/vcl/source/gdi/wall.cxx
index e0c69ce582f4..587395fa783f 100644
--- a/vcl/source/gdi/wall.cxx
+++ b/vcl/source/gdi/wall.cxx
@@ -469,7 +469,7 @@ Gradient Wallpaper::ImplGetApplicationGradient() const
g.SetStyle( GRADIENT_LINEAR );
g.SetStartColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
// no 'extreme' gradient when high contrast
- if( Application::GetSettings().GetStyleSettings().GetFaceColor().IsDark() )
+ if( Application::GetSettings().GetStyleSettings().GetHighContrastMode() )
g.SetEndColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
else
g.SetEndColor( Application::GetSettings().GetStyleSettings().GetFaceGradientColor() );
diff --git a/vcl/source/glyphs/gcach_ftyp.cxx b/vcl/source/glyphs/gcach_ftyp.cxx
index 591557eaa091..712c2334b35c 100644
--- a/vcl/source/glyphs/gcach_ftyp.cxx
+++ b/vcl/source/glyphs/gcach_ftyp.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_ftyp.cxx,v $
- * $Revision: 1.151 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -353,7 +350,7 @@ FT_FaceRec_* FtFontInfo::GetFaceFT()
maFaceFT = NULL;
}
- return maFaceFT;
+ return maFaceFT;
}
// -----------------------------------------------------------------------
@@ -1425,6 +1422,20 @@ bool FreetypeServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap
FT_Glyph_Transform( pGlyphFT, &aMatrix, NULL );
}
+ // Check for zero area bounding boxes as this crashes some versions of FT.
+ // This also provides a handy short cut as much of the code following
+ // becomes an expensive nop when a glyph covers no pixels.
+ FT_BBox cbox;
+ FT_Glyph_Get_CBox(pGlyphFT, ft_glyph_bbox_unscaled, &cbox);
+
+ if( (cbox.xMax - cbox.xMin) == 0 || (cbox.yMax - cbox.yMin == 0) )
+ {
+ nAngle = 0;
+ memset(&rRawBitmap, 0, sizeof rRawBitmap);
+ FT_Done_Glyph( pGlyphFT );
+ return true;
+ }
+
if( pGlyphFT->format != FT_GLYPH_FORMAT_BITMAP )
{
if( pGlyphFT->format == FT_GLYPH_FORMAT_OUTLINE )
@@ -1698,60 +1709,55 @@ bool FreetypeServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap
// -----------------------------------------------------------------------
// TODO: replace with GetFontCharMap()
-ULONG FreetypeServerFont::GetFontCodeRanges( sal_uInt32* pCodes ) const
+bool FreetypeServerFont::GetFontCodeRanges( CmapResult& rResult ) const
{
- CmapResult aResult;
- aResult.mnPairCount = 0;
- aResult.mpPairCodes = NULL;
- aResult.mbSymbolic = mpFontInfo->IsSymbolFont();
+ rResult.mbSymbolic = mpFontInfo->IsSymbolFont();
+ // TODO: is the full CmapResult needed on platforms calling this?
if( FT_IS_SFNT( maFaceFT ) )
{
ULONG nLength = 0;
const unsigned char* pCmap = mpFontInfo->GetTable( "cmap", &nLength );
- if( pCmap && nLength && ParseCMAP( pCmap, nLength, aResult ) )
- {
- // copy the ranges into the provided array...
- if( pCodes )
- for( int i = 0; i < 2*aResult.mnPairCount; ++i )
- pCodes[ i ] = aResult.mpPairCodes[ i ];
-
- delete[] aResult.mpPairCodes;
- }
+ if( pCmap && (nLength > 0) )
+ if( ParseCMAP( pCmap, nLength, rResult ) )
+ return true;
}
- if( aResult.mnPairCount <= 0 )
+ typedef std::vector<sal_uInt32> U32Vector;
+ U32Vector aCodes;
+
+ // FT's coverage is available since FT>=2.1.0 (OOo-baseline>=2.1.4 => ok)
+ aCodes.reserve( 0x1000 );
+ FT_UInt nGlyphIndex;
+ for( sal_uInt32 cCode = FT_Get_First_Char( maFaceFT, &nGlyphIndex );; )
{
- if( aResult.mbSymbolic )
- {
- // we usually get here for Type1 symbol fonts
- if( pCodes )
- {
- pCodes[ 0 ] = 0xF020;
- pCodes[ 1 ] = 0xF100;
- }
- aResult.mnPairCount = 1;
- }
- else
- {
- // we have to use the brute force method...
- for( sal_uInt32 cCode = 0x0020;; )
- {
- for(; cCode<0xFFF0 && !GetGlyphIndex( cCode ); ++cCode ) ;
- if( cCode >= 0xFFF0 )
- break;
- ++aResult.mnPairCount;
- if( pCodes )
- *(pCodes++) = cCode;
- for(; cCode<0xFFF0 && GetGlyphIndex( cCode ); ++cCode ) ;
- if( pCodes )
- *(pCodes++) = cCode;
- }
- }
+ if( !nGlyphIndex )
+ break;
+ aCodes.push_back( cCode ); // first code inside range
+ sal_uInt32 cNext = cCode;
+ do cNext = FT_Get_Next_Char( maFaceFT, cCode, &nGlyphIndex ); while( cNext == ++cCode );
+ aCodes.push_back( cCode ); // first code outside range
+ cCode = cNext;
}
- return aResult.mnPairCount;
+ const int nCount = aCodes.size();
+ if( !nCount) {
+ if( !rResult.mbSymbolic )
+ return false;
+
+ // we usually get here for Type1 symbol fonts
+ aCodes.push_back( 0xF020 );
+ aCodes.push_back( 0xF100 );
+ }
+
+ sal_uInt32* pCodes = new sal_uInt32[ nCount ];
+ for( int i = 0; i < nCount; ++i )
+ pCodes[i] = aCodes[i];
+ rResult.mpRangeCodes = pCodes;
+ rResult.mnRangeCount = nCount / 2;
+ return true;
}
+
// -----------------------------------------------------------------------
// kerning stuff
// -----------------------------------------------------------------------
diff --git a/vcl/source/glyphs/gcach_ftyp.hxx b/vcl/source/glyphs/gcach_ftyp.hxx
index 660f772d43ed..936abdc02e59 100644
--- a/vcl/source/glyphs/gcach_ftyp.hxx
+++ b/vcl/source/glyphs/gcach_ftyp.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_ftyp.hxx,v $
- * $Revision: 1.41 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -208,7 +205,7 @@ protected:
int ApplyGlyphTransform( int nGlyphFlags, FT_GlyphRec_*, bool ) const;
virtual void InitGlyphData( int nGlyphIndex, GlyphData& ) const;
- virtual ULONG GetFontCodeRanges( sal_uInt32* pCodes ) const;
+ virtual bool GetFontCodeRanges( CmapResult& ) const;
bool ApplyGSUB( const ImplFontSelectData& );
virtual ServerFontLayoutEngine* GetLayoutEngine();
diff --git a/vcl/source/glyphs/gcach_layout.cxx b/vcl/source/glyphs/gcach_layout.cxx
index 6bbf78f819b0..364a1fcd3beb 100755..100644
--- a/vcl/source/glyphs/gcach_layout.cxx
+++ b/vcl/source/glyphs/gcach_layout.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_layout.cxx,v $
- * $Revision: 1.46 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/gcach_rbmp.cxx b/vcl/source/glyphs/gcach_rbmp.cxx
index 9cba5332f281..1419a205f9a6 100755..100644
--- a/vcl/source/glyphs/gcach_rbmp.cxx
+++ b/vcl/source/glyphs/gcach_rbmp.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_rbmp.cxx,v $
- * $Revision: 1.10.114.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/gcach_vdev.cxx b/vcl/source/glyphs/gcach_vdev.cxx
index 31e0824ea0ba..1ac9ee9bf0a6 100644
--- a/vcl/source/glyphs/gcach_vdev.cxx
+++ b/vcl/source/glyphs/gcach_vdev.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_vdev.cxx,v $
- * $Revision: 1.20 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/gcach_vdev.hxx b/vcl/source/glyphs/gcach_vdev.hxx
index ae90c23d46a4..01ebc0f704cd 100644
--- a/vcl/source/glyphs/gcach_vdev.hxx
+++ b/vcl/source/glyphs/gcach_vdev.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_vdev.hxx,v $
- * $Revision: 1.11 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/glyphcache.cxx b/vcl/source/glyphs/glyphcache.cxx
index acfc8e3ac38d..e3e840e40730 100644
--- a/vcl/source/glyphs/glyphcache.cxx
+++ b/vcl/source/glyphs/glyphcache.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: glyphcache.cxx,v $
- * $Revision: 1.44 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -41,6 +38,10 @@
#include <vcl/bitmap.hxx>
#include <vcl/outfont.hxx>
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_features.hxx>
+#endif
+
#include <rtl/ustring.hxx> // used only for string=>hashvalue
#include <osl/file.hxx>
#include <tools/debug.hxx>
@@ -85,12 +86,23 @@ size_t GlyphCache::IFSD_Hash::operator()( const ImplFontSelectData& rFontSelData
{
// TODO: is it worth to improve this hash function?
sal_IntPtr nFontId = reinterpret_cast<sal_IntPtr>( rFontSelData.mpFontData );
+#ifdef ENABLE_GRAPHITE
+ if (rFontSelData.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND)
+ {
+ rtl::OString aFeatName = rtl::OUStringToOString( rFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 );
+ nFontId ^= aFeatName.hashCode();
+ }
+#endif
size_t nHash = nFontId << 8;
nHash += rFontSelData.mnHeight;
nHash += rFontSelData.mnOrientation;
nHash += rFontSelData.mbVertical;
nHash += rFontSelData.meItalic;
nHash += rFontSelData.meWeight;
+#ifdef ENABLE_GRAPHITE
+ nHash += rFontSelData.meLanguage;
+#endif
return nHash;
}
@@ -121,7 +133,16 @@ bool GlyphCache::IFSD_Equal::operator()( const ImplFontSelectData& rA, const Imp
if( (rA.mnWidth != rB.mnWidth)
&& ((rA.mnHeight != rB.mnWidth) || (rA.mnWidth != 0)) )
return false;
-
+#ifdef ENABLE_GRAPHITE
+ if (rA.meLanguage != rB.meLanguage)
+ return false;
+ // check for features
+ if ((rA.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND ||
+ rB.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName)
+ return false;
+#endif
return true;
}
diff --git a/vcl/source/glyphs/graphite_adaptors.cxx b/vcl/source/glyphs/graphite_adaptors.cxx
new file mode 100644
index 000000000000..9b16318fdc40
--- /dev/null
+++ b/vcl/source/glyphs/graphite_adaptors.cxx
@@ -0,0 +1,327 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description: Implements the Graphite interfaces with access to the
+// platform's font and graphics systems.
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Header files
+//
+// Standard Library
+#include <string>
+#include <cassert>
+// Libraries
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <i18npool/mslangid.hxx>
+// Platform
+#ifndef WNT
+#include <saldisp.hxx>
+
+#include <vcl/salgdi.hxx>
+
+#include <freetype/ftsynth.h>
+
+// Module
+#include "gcach_ftyp.hxx"
+
+#include <vcl/graphite_features.hxx>
+#include <vcl/graphite_adaptors.hxx>
+
+// Module private type definitions and forward declarations.
+//
+using gr::GrResult;
+namespace
+{
+ inline float from_hinted(const int x) {
+ return static_cast<float>(x + 32) / 64.0;
+ }
+ typedef std::hash_map<long,bool> SilfMap;
+ SilfMap sSilfMap;
+}
+
+// class CharacterRenderProperties implentation.
+//
+FontProperties::FontProperties(const FreetypeServerFont &font) throw()
+{
+ clrFore = gr::kclrBlack;
+ clrBack = gr::kclrTransparent;
+
+ pixHeight = from_hinted(font.GetMetricsFT().height);
+
+ switch (font.GetFontSelData().meWeight)
+ {
+ case WEIGHT_SEMIBOLD: case WEIGHT_BOLD:
+ case WEIGHT_ULTRABOLD: case WEIGHT_BLACK:
+ fBold = true;
+ break;
+ default :
+ fBold = false;
+ }
+
+ switch (font.GetFontSelData().meItalic)
+ {
+ case ITALIC_NORMAL: case ITALIC_OBLIQUE:
+ fItalic = true;
+ break;
+ default :
+ fItalic = false;
+ }
+
+ // Get the font name.
+ const sal_Unicode * name = font.GetFontSelData().maName.GetBuffer();
+ const size_t name_sz = std::min(sizeof szFaceName/sizeof(wchar_t)-1,
+ size_t(font.GetFontSelData().maName.Len()));
+
+ std::copy(name, name + name_sz, szFaceName);
+ szFaceName[name_sz] = '\0';
+}
+
+// class GraphiteFontAdaptor implementaion.
+//
+GraphiteFontAdaptor::GraphiteFontAdaptor(ServerFont & sfont, const sal_Int32 dpiX, const sal_Int32 dpiY)
+ : mrFont(static_cast<FreetypeServerFont &>(sfont)),
+ maFontProperties(static_cast<FreetypeServerFont &>(sfont)),
+ mnDpiX(dpiX),
+ mnDpiY(dpiY),
+ mfAscent(from_hinted(static_cast<FreetypeServerFont &>(sfont).GetMetricsFT().ascender)),
+ mfDescent(from_hinted(static_cast<FreetypeServerFont &>(sfont).GetMetricsFT().descender)),
+ mfEmUnits(static_cast<FreetypeServerFont &>(sfont).GetMetricsFT().y_ppem),
+ mpFeatures(NULL)
+{
+ //std::wstring face_name(maFontProperties.szFaceName);
+ const rtl::OString aLang = MsLangId::convertLanguageToIsoByteString( sfont.GetFontSelData().meLanguage );
+#ifdef DEBUG
+ printf("GraphiteFontAdaptor %lx\n", (long)this);
+#endif
+ rtl::OString name = rtl::OUStringToOString(
+ sfont.GetFontSelData().maTargetName, RTL_TEXTENCODING_UTF8 );
+ sal_Int32 nFeat = name.indexOf(grutils::GrFeatureParser::FEAT_PREFIX) + 1;
+ if (nFeat > 0)
+ {
+ rtl::OString aFeat = name.copy(nFeat, name.getLength() - nFeat);
+ mpFeatures = new grutils::GrFeatureParser(*this, aFeat.getStr(), aLang.getStr());
+#ifdef DEBUG
+ printf("GraphiteFontAdaptor %s/%s/%s %x language %d features %d errors\n",
+ rtl::OUStringToOString( sfont.GetFontSelData().maName,
+ RTL_TEXTENCODING_UTF8 ).getStr(),
+ rtl::OUStringToOString( sfont.GetFontSelData().maTargetName,
+ RTL_TEXTENCODING_UTF8 ).getStr(),
+ rtl::OUStringToOString( sfont.GetFontSelData().maSearchName,
+ RTL_TEXTENCODING_UTF8 ).getStr(),
+ sfont.GetFontSelData().meLanguage,
+ (int)mpFeatures->getFontFeatures(NULL), mpFeatures->parseErrors());
+#endif
+ }
+ else
+ {
+ mpFeatures = new grutils::GrFeatureParser(*this, aLang.getStr());
+ }
+}
+
+GraphiteFontAdaptor::GraphiteFontAdaptor(const GraphiteFontAdaptor &rhs) throw()
+ : Font(rhs),
+ mrFont (rhs.mrFont), maFontProperties(rhs.maFontProperties),
+ mnDpiX(rhs.mnDpiX), mnDpiY(rhs.mnDpiY),
+ mfAscent(rhs.mfAscent), mfDescent(rhs.mfDescent), mfEmUnits(rhs.mfEmUnits),
+ mpFeatures(NULL)
+{
+ if (rhs.mpFeatures) mpFeatures = new grutils::GrFeatureParser(*(rhs.mpFeatures));
+}
+
+
+GraphiteFontAdaptor::~GraphiteFontAdaptor() throw()
+{
+ maGlyphMetricMap.clear();
+ if (mpFeatures) delete mpFeatures;
+ mpFeatures = NULL;
+}
+
+void GraphiteFontAdaptor::UniqueCacheInfo(std::wstring & face_name_out, bool & bold_out, bool & italic_out)
+{
+ face_name_out = maFontProperties.szFaceName;
+ bold_out = maFontProperties.fBold;
+ italic_out = maFontProperties.fItalic;
+}
+
+bool GraphiteFontAdaptor::IsGraphiteEnabledFont(ServerFont & font) throw()
+{
+ // NOTE: this assumes that the same FTFace pointer won't be reused,
+ // so FtFontInfo::ReleaseFaceFT must only be called at shutdown.
+ FreetypeServerFont & aFtFont = dynamic_cast<FreetypeServerFont &>(font);
+ FT_Face aFace = reinterpret_cast<FT_FaceRec_*>(aFtFont.GetFtFace());
+ SilfMap::iterator i = sSilfMap.find(reinterpret_cast<long>(aFace));
+ if (i != sSilfMap.end())
+ {
+#ifdef DEBUG
+ if (static_cast<bool>(aFtFont.GetTable("Silf", 0)) != (*i).second)
+ printf("Silf cache font mismatch\n");
+#endif
+ return (*i).second;
+ }
+ bool bHasSilf = aFtFont.GetTable("Silf", 0);
+ sSilfMap[reinterpret_cast<long>(aFace)] = bHasSilf;
+ return bHasSilf;
+}
+
+
+gr::Font * GraphiteFontAdaptor::copyThis() {
+ return new GraphiteFontAdaptor(*this);
+}
+
+
+unsigned int GraphiteFontAdaptor::getDPIx() {
+ return mnDpiX;
+}
+
+
+unsigned int GraphiteFontAdaptor::getDPIy() {
+ return mnDpiY;
+}
+
+
+float GraphiteFontAdaptor::ascent() {
+ return mfAscent;
+}
+
+
+float GraphiteFontAdaptor::descent() {
+ return mfDescent;
+}
+
+
+bool GraphiteFontAdaptor::bold() {
+ return maFontProperties.fBold;
+}
+
+
+bool GraphiteFontAdaptor::italic() {
+ return maFontProperties.fItalic;
+}
+
+
+float GraphiteFontAdaptor::height() {
+ return maFontProperties.pixHeight;
+}
+
+
+void GraphiteFontAdaptor::getFontMetrics(float * ascent_out, float * descent_out, float * em_square_out) {
+ if (ascent_out) *ascent_out = mfAscent;
+ if (descent_out) *descent_out = mfDescent;
+ if (em_square_out) *em_square_out = mfEmUnits;
+}
+
+
+const void * GraphiteFontAdaptor::getTable(gr::fontTableId32 table_id, size_t * buffer_sz)
+{
+ char tag_name[5] = {char(table_id >> 24), char(table_id >> 16), char(table_id >> 8), char(table_id), 0};
+ ULONG temp = *buffer_sz;
+
+ const void * const tbl_buf = static_cast<FreetypeServerFont &>(mrFont).GetTable(tag_name, &temp);
+ *buffer_sz = temp;
+
+ return tbl_buf;
+}
+
+#define fix26_6(x) (x >> 6) + (x & 32 ? (x > 0 ? 1 : 0) : (x < 0 ? -1 : 0))
+
+// Return the glyph's metrics in pixels.
+void GraphiteFontAdaptor::getGlyphMetrics(gr::gid16 nGlyphId, gr::Rect & aBounding, gr::Point & advances)
+{
+ // Graphite gets really confused if the glyphs have been transformed, so
+ // if orientation has been set we can't use the font's glyph cache
+ // unfortunately the font selection data, doesn't always have the orientation
+ // set, even if it was when the glyphs were cached, so we use our own cache.
+
+// const GlyphMetric & metric = mrFont.GetGlyphMetric(nGlyphId);
+//
+// aBounding.right = aBounding.left = metric.GetOffset().X();
+// aBounding.bottom = aBounding.top = -metric.GetOffset().Y();
+// aBounding.right += metric.GetSize().Width();
+// aBounding.bottom -= metric.GetSize().Height();
+//
+// advances.x = metric.GetDelta().X();
+// advances.y = -metric.GetDelta().Y();
+
+ GlyphMetricMap::const_iterator gm_itr = maGlyphMetricMap.find(nGlyphId);
+ if (gm_itr != maGlyphMetricMap.end())
+ {
+ // We've cached the results from last time.
+ aBounding = gm_itr->second.first;
+ advances = gm_itr->second.second;
+ }
+ else
+ {
+ // We need to look up the glyph.
+ FT_Int nLoadFlags = mrFont.GetLoadFlags();
+
+ FT_Face aFace = reinterpret_cast<FT_Face>(mrFont.GetFtFace());
+ if (!aFace)
+ {
+ aBounding.top = aBounding.bottom = aBounding.left = aBounding.right = 0;
+ advances.x = advances.y = 0;
+ return;
+ }
+ FT_Error aStatus = -1;
+ aStatus = FT_Load_Glyph(aFace, nGlyphId, nLoadFlags);
+ if( aStatus != FT_Err_Ok || (!aFace->glyph))
+ {
+ aBounding.top = aBounding.bottom = aBounding.left = aBounding.right = 0;
+ advances.x = advances.y = 0;
+ return;
+ }
+ // check whether we need synthetic bold/italic otherwise metric is wrong
+ if (mrFont.NeedsArtificialBold())
+ FT_GlyphSlot_Embolden(aFace->glyph);
+
+ if (mrFont.NeedsArtificialItalic())
+ FT_GlyphSlot_Oblique(aFace->glyph);
+
+ const FT_Glyph_Metrics &gm = aFace->glyph->metrics;
+
+ // Fill out the bounding box an advances.
+ aBounding.top = aBounding.bottom = fix26_6(gm.horiBearingY);
+ aBounding.bottom -= fix26_6(gm.height);
+ aBounding.left = aBounding.right = fix26_6(gm.horiBearingX);
+ aBounding.right += fix26_6(gm.width);
+ advances.x = fix26_6(gm.horiAdvance);
+ advances.y = 0;
+
+ // Now add an entry to our metrics map.
+ maGlyphMetricMap[nGlyphId] = std::make_pair(aBounding, advances);
+ }
+}
+
+#endif
diff --git a/vcl/source/glyphs/graphite_cache.cxx b/vcl/source/glyphs/graphite_cache.cxx
new file mode 100644
index 000000000000..8c514c611d2c
--- /dev/null
+++ b/vcl/source/glyphs/graphite_cache.cxx
@@ -0,0 +1,198 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#ifdef WNT
+#include <tools/svwin.h>
+#include <svsys.h>
+#endif
+
+#include <tools/debug.hxx>
+#include <vcl/sallayout.hxx>
+
+#include <graphite/GrClient.h>
+#include <graphite/Segment.h>
+
+#include <rtl/ustring.hxx>
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_cache.hxx>
+
+#include "graphite_textsrc.hxx"
+
+GrSegRecord::GrSegRecord(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl)
+ : m_rope(rope), m_text(textSrc), m_seg(seg), m_nextKey(NULL),
+ m_fontScale(0.0f), mbIsRtl(bIsRtl), m_lockCount(0)
+{
+ m_pStr = textSrc->getLayoutArgs().mpStr + seg->startCharacter();
+ m_startChar = seg->startCharacter();
+}
+
+GrSegRecord::~GrSegRecord()
+{
+ clear();
+}
+
+void GrSegRecord::reuse(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl)
+{
+ clear();
+ mnWidth = 0;
+ m_rope = rope;
+ m_text = textSrc;
+ m_seg = seg;
+ m_nextKey = NULL;
+ m_pStr = textSrc->getLayoutArgs().mpStr + seg->startCharacter();
+ m_startChar = seg->startCharacter();
+ mbIsRtl = bIsRtl;
+}
+
+void GrSegRecord::clearVectors()
+{
+ mvGlyphs.clear();
+ mvCharDxs.clear();
+ mvChar2BaseGlyph.clear();
+ mvGlyph2Char.clear();
+}
+
+void GrSegRecord::clear()
+{
+#ifdef GR_DEBUG_TEXT
+ if (m_lockCount != 0)
+ OutputDebugString("GrSegRecord locked!");
+#endif
+ clearVectors();
+ delete m_rope;
+ delete m_seg;
+ delete m_text;
+ m_rope = NULL;
+ m_seg = NULL;
+ m_text = NULL;
+ m_fontScale = 0.0f;
+ m_lockCount = 0;
+}
+
+GrSegRecord * GraphiteSegmentCache::cacheSegment(TextSourceAdaptor * adapter, gr::Segment * seg, bool bIsRtl)
+{
+ GrSegRecord * record = NULL;
+ // We keep a record of the oldest key and the last key added
+ // when the next key is added, the record for the prevKey's m_nextKey field
+ // is updated to the newest key so that m_oldestKey can be updated to the
+ // next oldest key when the record for m_oldestKey is deleted
+ if (m_segMap.size() > SEG_CACHE_SIZE)
+ {
+ GraphiteSegMap::iterator oldestPair = m_segMap.find(reinterpret_cast<long>(m_oldestKey));
+ // oldest record may no longer exist if a buffer was changed
+ if (oldestPair != m_segMap.end())
+ {
+ record = oldestPair->second;
+ m_segMap.erase(reinterpret_cast<long>(m_oldestKey));
+ GrRMEntry range = m_ropeMap.equal_range((*(record->m_rope)).hashCode());
+ while (range.first != range.second)
+ {
+ if (range.first->second == record)
+ {
+ m_ropeMap.erase(range.first);
+ break;
+ }
+ ++range.first;
+ }
+ m_oldestKey = record->m_nextKey;
+ // record will be reused, so don't delete
+ }
+ }
+
+
+// const int seg_char_limit = min(adapter->maLayoutArgs().mnLength,
+// adapter->maLayoutArgs().mnEndCharPos
+// + GraphiteLayout::EXTRA_CONTEXT_LENGTH);
+// if (seg->stopCharacter() - seg->startCharacter() <= 0)
+// OutputDebugString("Invalid seg indices\n");
+ rtl::OUString * pRope = new rtl::OUString(adapter->getLayoutArgs().mpStr + seg->startCharacter(),
+ seg->stopCharacter() - seg->startCharacter());
+ if (!pRope) return NULL;
+ bool reuse = false;
+ if (record)
+ record->reuse(pRope, adapter, seg, bIsRtl);
+ else
+ record = new GrSegRecord(pRope, adapter, seg, bIsRtl);
+ if (!record)
+ {
+ delete pRope;
+ return NULL;
+ }
+ GraphiteSegMap::iterator iMap =
+ m_segMap.find(reinterpret_cast<long>(record->m_pStr));
+ if (iMap != m_segMap.end())
+ {
+ // the buffer has changed, so the old cached Segment is useless
+ reuse = true;
+ GrSegRecord * found = iMap->second;
+ // Note: we reuse the old next key to avoid breaking our history
+ // chain. This means it will be prematurely deleted, but this is
+ // unlikely to happen very often.
+ record->m_nextKey = found->m_nextKey;
+ // overwrite the old record
+ m_segMap[reinterpret_cast<long>(record->m_pStr)] = record;
+ // erase the old rope key and save the new one
+ GrRMEntry range = m_ropeMap.equal_range((*(found->m_rope)).hashCode());
+ while (range.first != range.second)
+ {
+ if (range.first->second == found)
+ {
+ m_ropeMap.erase(range.first);
+ break;
+ }
+ ++range.first;
+ }
+ GraphiteRopeMap::value_type mapEntry(record->m_rope->hashCode(), record);
+ m_ropeMap.insert(mapEntry);
+ // remove the old record
+ delete found;
+ record->m_lockCount++;
+ return record;
+ }
+ m_segMap[reinterpret_cast<long>(record->m_pStr)] = record;
+ GraphiteRopeMap::value_type mapEntry((*(record->m_rope)).hashCode(), record);
+ m_ropeMap.insert(mapEntry);
+
+ if (m_oldestKey == NULL)
+ {
+ m_oldestKey = record->m_pStr;
+ m_prevKey = record->m_pStr;
+ }
+ else if (reuse == false)
+ {
+ DBG_ASSERT(m_segMap.count(reinterpret_cast<long>(m_prevKey)),
+ "Previous key got lost somehow!");
+ m_segMap.find(reinterpret_cast<long>(m_prevKey))
+ ->second->m_nextKey = record->m_pStr;
+ m_prevKey = record->m_pStr;
+ }
+ record->m_lockCount++;
+ return record;
+}
diff --git a/vcl/source/glyphs/graphite_features.cxx b/vcl/source/glyphs/graphite_features.cxx
new file mode 100644
index 000000000000..dae1bfc2866e
--- /dev/null
+++ b/vcl/source/glyphs/graphite_features.cxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description:
+// Parse a string of features specified as & separated pairs.
+// e.g.
+// 1001=1&2002=2&fav1=0
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <sal/types.h>
+
+#ifdef WNT
+#include <tools/svwin.h>
+#include <svsys.h>
+#endif
+
+#include <vcl/graphite_features.hxx>
+
+using namespace grutils;
+// These mustn't conflict with font name lists which use ; and ,
+const char GrFeatureParser::FEAT_PREFIX = ':';
+const char GrFeatureParser::FEAT_SEPARATOR = '&';
+const char GrFeatureParser::FEAT_ID_VALUE_SEPARATOR = '=';
+const std::string GrFeatureParser::ISO_LANG("lang");
+
+GrFeatureParser::GrFeatureParser(gr::Font & font, const std::string lang)
+ : mnNumSettings(0), mbErrors(false)
+{
+ maLang.rgch[0] = maLang.rgch[1] = maLang.rgch[2] = maLang.rgch[3] = '\0';
+ setLang(font, lang);
+}
+
+GrFeatureParser::GrFeatureParser(gr::Font & font, const std::string features, const std::string lang)
+ : mnNumSettings(0), mbErrors(false)
+{
+ size_t nEquals = 0;
+ size_t nFeatEnd = 0;
+ size_t pos = 0;
+ maLang.rgch[0] = maLang.rgch[1] = maLang.rgch[2] = maLang.rgch[3] = '\0';
+ setLang(font, lang);
+ while (pos < features.length() && mnNumSettings < MAX_FEATURES)
+ {
+ nEquals = features.find(FEAT_ID_VALUE_SEPARATOR,pos);
+ if (nEquals == std::string::npos)
+ {
+ mbErrors = true;
+ break;
+ }
+ // check for a lang=xxx specification
+ if (features.compare(pos, nEquals - pos, ISO_LANG) == 0)
+ {
+ pos = nEquals + 1;
+ nFeatEnd = features.find(FEAT_SEPARATOR, pos);
+ if (nFeatEnd == std::string::npos)
+ {
+ nFeatEnd = features.length();
+ }
+ if (nFeatEnd - pos > 3)
+ mbErrors = true;
+ else
+ {
+ gr::isocode aLang = maLang;
+ for (size_t i = pos; i < nFeatEnd; i++)
+ aLang.rgch[i-pos] = features[i];
+ std::pair<gr::LanguageIterator,gr::LanguageIterator> aSupported
+ = font.getSupportedLanguages();
+ gr::LanguageIterator iL = aSupported.first;
+ while (iL != aSupported.second)
+ {
+ gr::isocode aSupportedLang = *iL;
+ // here we only expect full 3 letter codes
+ if (aLang.rgch[0] == aSupportedLang.rgch[0] &&
+ aLang.rgch[1] == aSupportedLang.rgch[1] &&
+ aLang.rgch[2] == aSupportedLang.rgch[2] &&
+ aLang.rgch[3] == aSupportedLang.rgch[3]) break;
+ ++iL;
+ }
+ if (iL == aSupported.second) mbErrors = true;
+ else maLang = aLang;
+ }
+ }
+ else
+ {
+ if (isCharId(features, pos, nEquals - pos))
+ maSettings[mnNumSettings].id = getCharId(features, pos, nEquals - pos);
+ else maSettings[mnNumSettings].id = getIntValue(features, pos, nEquals - pos);
+ pos = nEquals + 1;
+ nFeatEnd = features.find(FEAT_SEPARATOR, pos);
+ if (nFeatEnd == std::string::npos)
+ {
+ nFeatEnd = features.length();
+ }
+ if (isCharId(features, pos, nFeatEnd - pos))
+ maSettings[mnNumSettings].value = getCharId(features, pos, nFeatEnd - pos);
+ else
+ maSettings[mnNumSettings].value= getIntValue(features, pos, nFeatEnd - pos);
+ if (isValid(font, maSettings[mnNumSettings]))
+ mnNumSettings++;
+ else
+ mbErrors = true;
+ }
+ pos = nFeatEnd + 1;
+ }
+}
+
+void GrFeatureParser::setLang(gr::Font & font, const std::string & lang)
+{
+ gr::isocode aLang = {{0,0,0,0}};
+ if (lang.length() > 2)
+ {
+ for (size_t i = 0; i < lang.length() && i < 3; i++)
+ {
+ if (lang[i] == '-') break;
+ aLang.rgch[i] = lang[i];
+ }
+ std::pair<gr::LanguageIterator,gr::LanguageIterator> aSupported
+ = font.getSupportedLanguages();
+ gr::LanguageIterator iL = aSupported.first;
+ while (iL != aSupported.second)
+ {
+ gr::isocode aSupportedLang = *iL;
+ if (aLang.rgch[0] == aSupportedLang.rgch[0] &&
+ aLang.rgch[1] == aSupportedLang.rgch[1] &&
+ aLang.rgch[2] == aSupportedLang.rgch[2] &&
+ aLang.rgch[3] == aSupportedLang.rgch[3]) break;
+ ++iL;
+ }
+ if (iL != aSupported.second)
+ maLang = aLang;
+#ifdef DEBUG
+ else
+ printf("%s has no features\n", aLang.rgch);
+#endif
+ }
+}
+
+GrFeatureParser::GrFeatureParser(const GrFeatureParser & aCopy)
+ : maLang(aCopy.maLang), mbErrors(aCopy.mbErrors)
+{
+ mnNumSettings = aCopy.getFontFeatures(maSettings);
+}
+
+GrFeatureParser::~GrFeatureParser()
+{
+}
+
+size_t GrFeatureParser::getFontFeatures(gr::FeatureSetting settings[64]) const
+{
+ if (settings)
+ {
+ std::copy(maSettings, maSettings + mnNumSettings, settings);
+ }
+ return mnNumSettings;
+}
+
+bool GrFeatureParser::isValid(gr::Font & font, gr::FeatureSetting & setting)
+{
+ gr::FeatureIterator i = font.featureWithID(setting.id);
+ if (font.getFeatures().second == i)
+ {
+ return false;
+ }
+ std::pair< gr::FeatureSettingIterator, gr::FeatureSettingIterator >
+ validValues = font.getFeatureSettings(i);
+ gr::FeatureSettingIterator j = validValues.first;
+ while (j != validValues.second)
+ {
+ if (*j == setting.value) return true;
+ ++j;
+ }
+ return false;
+}
+
+bool GrFeatureParser::isCharId(const std::string & id, size_t offset, size_t length)
+{
+ if (length > 4) return false;
+ for (size_t i = 0; i < length; i++)
+ {
+ if (i > 0 && id[offset+i] == '\0') continue;
+ if ((id[offset+i]) < 0x20 || (id[offset+i]) < 0)
+ return false;
+ if (i==0 && id[offset+i] < 0x41)
+ return false;
+ }
+ return true;
+}
+
+int GrFeatureParser::getCharId(const std::string & id, size_t offset, size_t length)
+{
+ FeatId charId;
+ charId.num = 0;
+#ifdef WORDS_BIGENDIAN
+ for (size_t i = 0; i < length; i++)
+ {
+ charId.label[i] = id[offset+i];
+ }
+#else
+ for (size_t i = 0; i < length; i++)
+ {
+ charId.label[3-i] = id[offset+i];
+ }
+#endif
+ return charId.num;
+}
+
+int GrFeatureParser::getIntValue(const std::string & id, size_t offset, size_t length)
+{
+ int value = 0;
+ int sign = 1;
+ for (size_t i = 0; i < length; i++)
+ {
+ switch (id[offset + i])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ value *= 10;
+ if (sign < 0)
+ {
+ value = -(id[offset + i] - '0');
+ sign = 1;
+ }
+ value += (id[offset + i] - '0');
+ break;
+ case '-':
+ if (i == 0)
+ sign = -1;
+ else
+ {
+ mbErrors = true;
+ break;
+ }
+ default:
+ mbErrors = true;
+ break;
+ }
+ }
+ return value;
+}
+
+
+sal_Int32 GrFeatureParser::hashCode() const
+{
+ union IsoHash { sal_Int32 mInt; gr::isocode mCode; };
+ IsoHash isoHash;
+ isoHash.mCode = maLang;
+ sal_Int32 hash = isoHash.mInt;
+ for (size_t i = 0; i < mnNumSettings; i++)
+ {
+ hash = (hash << 16) ^ ((maSettings[i].id << 8) | maSettings[i].value);
+ }
+ return hash;
+}
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
new file mode 100644
index 000000000000..86dee2749efa
--- /dev/null
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -0,0 +1,1367 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description: An implementation of the SalLayout interface that uses the
+// Graphite engine.
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Enable lots of debug info
+#ifdef DEBUG
+//#define GRLAYOUT_DEBUG 1
+//#undef NDEBUG
+#endif
+
+// Header files
+//
+// Standard Library
+#include <algorithm>
+#include <cassert>
+#include <functional>
+#include <limits>
+#include <numeric>
+#include <deque>
+
+// Platform
+#ifdef WNT
+#include <tools/svwin.h>
+#include <svsys.h>
+#endif
+
+#include <vcl/salgdi.hxx>
+
+#include <unicode/uchar.h>
+#include <unicode/ubidi.h>
+#include <unicode/uscript.h>
+
+// Graphite Libraries (must be after vcl headers on windows)
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/ITextSource.h>
+#include <graphite/Segment.h>
+#include <graphite/SegmentPainter.h>
+
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_features.hxx>
+#include "graphite_textsrc.hxx"
+
+
+// Module private type definitions and forward declarations.
+//
+// Module private names.
+//
+
+#ifdef GRLAYOUT_DEBUG
+FILE * grLogFile = NULL;
+FILE * grLog()
+{
+#ifdef WNT
+ std::string logFileName(getenv("TEMP"));
+ logFileName.append("\\graphitelayout.log");
+ if (grLogFile == NULL) grLogFile = fopen(logFileName.c_str(),"w");
+ else fflush(grLogFile);
+ return grLogFile;
+#else
+ return stdout;
+#endif
+}
+#endif
+
+#ifdef GRCACHE
+#include <vcl/graphite_cache.hxx>
+#endif
+
+
+namespace
+{
+ typedef std::pair<gr::GlyphIterator, gr::GlyphIterator> glyph_range_t;
+ typedef std::pair<gr::GlyphSetIterator, gr::GlyphSetIterator> glyph_set_range_t;
+
+ inline long round(const float n) {
+ return long(n + (n < 0 ? -0.5 : 0.5));
+ }
+
+
+ template<typename T>
+ inline bool in_range(const T i, const T b, const T e) {
+ return !(b > i) && i < e;
+ }
+
+
+ template<typename T>
+ inline bool is_subrange(const T sb, const T se, const T b, const T e) {
+ return !(b > sb || se > e);
+ }
+
+
+ template<typename T>
+ inline bool is_subrange(const std::pair<T, T> &s, const T b, const T e) {
+ return is_subrange(s.first, s.second, b, e);
+ }
+
+ int findSameDirLimit(const xub_Unicode* buffer, int charCount, bool rtl)
+ {
+ UErrorCode status = U_ZERO_ERROR;
+ UBiDi *ubidi = ubidi_openSized(charCount, 0, &status);
+ int limit = 0;
+ ubidi_setPara(ubidi, reinterpret_cast<const UChar *>(buffer), charCount,
+ (rtl)?UBIDI_DEFAULT_RTL:UBIDI_DEFAULT_LTR, NULL, &status);
+ UBiDiLevel level = 0;
+ ubidi_getLogicalRun(ubidi, 0, &limit, &level);
+ ubidi_close(ubidi);
+ if ((rtl && !(level & 1)) || (!rtl && (level & 1)))
+ {
+ limit = 0;
+ }
+ return limit;
+ }
+
+} // namespace
+
+
+
+// Impementation of the GraphiteLayout::Glyphs container class.
+// This is an extended vector class with methods added to enable
+// o Correctly filling with glyphs.
+// o Querying clustering relationships.
+// o manipulations that affect neighouring glyphs.
+
+const int GraphiteLayout::EXTRA_CONTEXT_LENGTH = 10;
+#ifdef GRCACHE
+GraphiteCacheHandler GraphiteCacheHandler::instance;
+#endif
+
+// The Graphite glyph stream is really a sequence of glyph attachment trees
+// each rooted at a non-attached base glyph. fill_from walks the glyph stream
+// find each non-attached base glyph and calls append to record them as a
+// sequence of clusters.
+void
+GraphiteLayout::Glyphs::fill_from(gr::Segment & rSegment, ImplLayoutArgs &rArgs,
+ bool bRtl, long &rWidth, float fScaling, std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char, std::vector<int> & rCharDxs)
+{
+ // Create a glyph item for each of the glyph and append it to the base class glyph list.
+ typedef std::pair< gr::GlyphSetIterator, gr::GlyphSetIterator > GrGlyphSet;
+ int nChar = rArgs.mnEndCharPos - rArgs.mnMinCharPos;
+ glyph_range_t iGlyphs = rSegment.glyphs();
+ int nGlyphs = iGlyphs.second - iGlyphs.first;
+ gr::GlyphIterator prevBase = iGlyphs.second;
+ float fMinX = rSegment.advanceWidth();
+ float fMaxX = 0.0f;
+ rGlyph2Char.assign(nGlyphs, -1);
+ long nDxOffset = 0;
+ int nGlyphIndex = (bRtl)? (nGlyphs - 1) : 0;
+ // OOo always expects the glyphs in ltr order
+ int nDelta = (bRtl)? -1 : 1;
+
+ int nLastGlyph = (bRtl)? nGlyphs - 1: 0;
+ int nNextChar = (bRtl)? (rSegment.stopCharacter() - 1) : rSegment.startCharacter();//rArgs.mnMinCharPos;
+ // current glyph number (Graphite glyphs)
+ //int currGlyph = 0;
+ int nFirstCharInCluster = nNextChar;
+ int nFirstGlyphInCluster = nLastGlyph;
+
+ // ltr first char in cluster is lowest, same is true for rtl
+ // ltr first glyph in cluster is lowest, rtl first glyph is highest
+
+ // loop over the glyphs determining which characters are linked to them
+ gr::GlyphIterator gi;
+ for (gi = iGlyphs.first + nGlyphIndex;
+ nGlyphIndex >= 0 && nGlyphIndex < nGlyphs;
+ nGlyphIndex+= nDelta, gi = iGlyphs.first + nGlyphIndex)
+ {
+ gr::GlyphInfo info = (*gi);
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Glyph %d %f,%f\n", (int)info.logicalIndex(), info.origin(), info.yOffset());
+#endif
+ // the last character associated with this glyph is after
+ // our current cluster buffer position
+ if ((bRtl && ((signed)info.firstChar() <= nNextChar)) ||
+ (!bRtl && ((signed)info.lastChar() >= nNextChar)))
+ {
+ if ((bRtl && nGlyphIndex < nLastGlyph) ||
+ (!bRtl && nGlyphIndex > nLastGlyph))
+ {
+ // this glyph is after the previous one left->right
+ // if insertion is allowed before it then we are in a
+ // new cluster
+ int nAttachedBase = (*(info.attachedClusterBase())).logicalIndex();
+ if (!info.isAttached() ||
+ !in_range(nAttachedBase, nFirstGlyphInCluster, nGlyphIndex))
+ {
+ if (in_range(nFirstCharInCluster, rArgs.mnMinCharPos, rArgs.mnEndCharPos) &&
+ nFirstGlyphInCluster != nGlyphIndex)
+ {
+ std::pair <float,float> aBounds =
+ appendCluster(rSegment, rArgs, bRtl, nFirstCharInCluster,
+ nNextChar, nFirstGlyphInCluster, nGlyphIndex, fScaling,
+ rChar2Base, rGlyph2Char, rCharDxs, nDxOffset);
+ fMinX = std::min(aBounds.first, fMinX);
+ fMaxX = std::max(aBounds.second, fMaxX);
+ }
+ nFirstCharInCluster = (bRtl)? info.lastChar() : info.firstChar();
+ nFirstGlyphInCluster = nGlyphIndex;
+ }
+ nLastGlyph = (bRtl)? std::min(nGlyphIndex, nAttachedBase) :
+ std::max(nGlyphIndex, nAttachedBase);
+ }
+ // loop over chacters associated with this glyph and characters
+ // between nextChar and the last character associated with this glyph
+ // giving them the current cluster id. This allows for character /glyph
+ // order reversal.
+ // For each character we do a reverse glyph id look up
+ // and store the glyph id with the highest logical index in nLastGlyph
+ while ((bRtl && ((signed)info.firstChar() <= nNextChar)) ||
+ (!bRtl && (signed)info.lastChar() >= nNextChar))
+ {
+ GrGlyphSet charGlyphs = rSegment.charToGlyphs(nNextChar);
+ nNextChar += nDelta;
+ gr::GlyphSetIterator gj = charGlyphs.first;
+ while (gj != charGlyphs.second)
+ {
+ nLastGlyph = (bRtl)? min(nLastGlyph, (signed)(*gj).logicalIndex()) : max(nLastGlyph, (signed)(*gj).logicalIndex());
+ ++gj;
+ }
+ }
+ // Loop over attached glyphs and make sure they are all in the cluster since you
+ // can have glyphs attached with another base glyph in between
+ glyph_set_range_t iAttached = info.attachedClusterGlyphs();
+ for (gr::GlyphSetIterator agi = iAttached.first; agi != iAttached.second; ++agi)
+ {
+ nLastGlyph = (bRtl)? min(nLastGlyph, (signed)(*agi).logicalIndex()) : max(nLastGlyph, (signed)(*agi).logicalIndex());
+ }
+
+ // if this is a rtl attached glyph, then we need to include its
+ // base in the cluster, which will have a lower graphite index
+ if (bRtl)
+ {
+ if ((signed)info.attachedClusterBase()->logicalIndex() < nLastGlyph)
+ {
+ nLastGlyph = info.attachedClusterBase()->logicalIndex();
+ }
+ }
+ }
+
+ // it is possible for the lastChar to be after nextChar and
+ // firstChar to be before the nFirstCharInCluster in rare
+ // circumstances e.g. Myanmar word for cemetery
+ if ((bRtl && ((signed)info.lastChar() > nFirstCharInCluster)) ||
+ (!bRtl && ((signed)info.firstChar() < nFirstCharInCluster)))
+ {
+ nFirstCharInCluster = info.firstChar();
+ }
+ }
+ // process last cluster
+ if (in_range(nFirstCharInCluster, rArgs.mnMinCharPos, rArgs.mnEndCharPos) &&
+ nFirstGlyphInCluster != nGlyphIndex)
+ {
+ std::pair <float,float> aBounds =
+ appendCluster(rSegment, rArgs, bRtl, nFirstCharInCluster, nNextChar,
+ nFirstGlyphInCluster, nGlyphIndex, fScaling,
+ rChar2Base, rGlyph2Char, rCharDxs, nDxOffset);
+ fMinX = std::min(aBounds.first, fMinX);
+ fMaxX = std::max(aBounds.second, fMaxX);
+ }
+ long nXOffset = round(fMinX * fScaling);
+ rWidth = round(fMaxX * fScaling) - nXOffset + nDxOffset;
+ if (rWidth < 0)
+ {
+ // This can happen when there was no base inside the range
+ rWidth = 0;
+ }
+ // fill up non-base char dx with cluster widths from previous base glyph
+ if (bRtl)
+ {
+ if (rCharDxs[nChar-1] == -1)
+ rCharDxs[nChar-1] = 0;
+ else
+ rCharDxs[nChar-1] -= nXOffset;
+ for (int i = nChar - 2; i >= 0; i--)
+ {
+ if (rCharDxs[i] == -1) rCharDxs[i] = rCharDxs[i+1];
+ else rCharDxs[i] -= nXOffset;
+ }
+ }
+ else
+ {
+ if (rCharDxs[0] == -1)
+ rCharDxs[0] = 0;
+ else
+ rCharDxs[0] -= nXOffset;
+ for (int i = 1; i < nChar; i++)
+ {
+ if (rCharDxs[i] == -1) rCharDxs[i] = rCharDxs[i-1];
+ else rCharDxs[i] -= nXOffset;
+ }
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Glyphs xOff%ld dropDx%ld w%ld\n", nXOffset, nDxOffset, rWidth);
+#endif
+ // remove offset due to context if there is one
+ if (nXOffset != 0)
+ {
+ for (size_t i = 0; i < size(); i++)
+ (*this)[i].maLinearPos.X() -= nXOffset;
+ }
+}
+
+std::pair<float,float> GraphiteLayout::Glyphs::appendCluster(gr::Segment & rSeg,
+ ImplLayoutArgs & rArgs, bool bRtl, int nFirstCharInCluster, int nNextChar,
+ int nFirstGlyphInCluster, int nNextGlyph, float fScaling,
+ std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char,
+ std::vector<int> & rCharDxs, long & rDXOffset)
+{
+ glyph_range_t iGlyphs = rSeg.glyphs();
+ int nGlyphs = iGlyphs.second - iGlyphs.first;
+ int nDelta = (bRtl)? -1 : 1;
+ gr::GlyphInfo aFirstGlyph = *(iGlyphs.first + nFirstGlyphInCluster);
+ std::pair <float, float> aBounds;
+ aBounds.first = aFirstGlyph.origin();
+ aBounds.second = aFirstGlyph.origin();
+ // before we add the glyphs to this vector, we record the
+ // glyph's index in the vector (which is not the same as
+ // the Segment's glyph index!)
+ assert(size() < rGlyph2Char.size());
+ rChar2Base[nFirstCharInCluster-rArgs.mnMinCharPos] = size();
+ rGlyph2Char[size()] = nFirstCharInCluster;
+ bool bBaseGlyph = true;
+ for (int j = nFirstGlyphInCluster;
+ j != nNextGlyph; j += nDelta)
+ {
+ long nNextOrigin;
+ float fNextOrigin;
+ gr::GlyphInfo aGlyph = *(iGlyphs.first + j);
+ if (j + nDelta >= nGlyphs || j + nDelta < 0) // at rhs ltr,rtl
+ {
+ fNextOrigin = rSeg.advanceWidth();
+ nNextOrigin = round(rSeg.advanceWidth() * fScaling + rDXOffset);
+ aBounds.second = std::max(rSeg.advanceWidth(), aBounds.second);
+ }
+ else
+ {
+ gr::GlyphInfo aNextGlyph = *(iGlyphs.first + j + nDelta);
+ fNextOrigin = std::max(aNextGlyph.attachedClusterBase()->origin(), aNextGlyph.origin());
+ aBounds.second = std::max(fNextOrigin, aBounds.second);
+ nNextOrigin = round(fNextOrigin * fScaling + rDXOffset);
+ }
+ aBounds.first = std::min(aGlyph.origin(), aBounds.first);
+ if ((signed)aGlyph.firstChar() < rArgs.mnEndCharPos &&
+ (signed)aGlyph.firstChar() >= rArgs.mnMinCharPos)
+ {
+ rCharDxs[aGlyph.firstChar()-rArgs.mnMinCharPos] = nNextOrigin;
+ }
+ if ((signed)aGlyph.attachedClusterBase()->logicalIndex() == j)
+ {
+ append(rSeg, rArgs, aGlyph, fNextOrigin, fScaling, rChar2Base, rGlyph2Char, rCharDxs, rDXOffset, bBaseGlyph);
+ bBaseGlyph = false;
+ }
+ }
+ // from the point of view of the dx array, the xpos is
+ // the origin of the first glyph of the next cluster ltr
+ // rtl it is the origin of the 1st glyph of the cluster
+ long nXPos = (bRtl)?
+ round(aFirstGlyph.attachedClusterBase()->origin() * fScaling) + rDXOffset :
+ round(aBounds.second * fScaling) + rDXOffset;
+ // force the last char in range to have the width of the cluster
+ if (bRtl)
+ {
+ for (int n = nNextChar + 1; n <= nFirstCharInCluster; n++)
+ {
+ if ((n < rArgs.mnEndCharPos) && (n >= rArgs.mnMinCharPos))
+ rCharDxs[n-rArgs.mnMinCharPos] = nXPos;
+ }
+ }
+ else
+ {
+ for (int n = nNextChar - 1; n >= nFirstCharInCluster; n--)
+ {
+ if (n < rArgs.mnEndCharPos && n >= rArgs.mnMinCharPos)
+ rCharDxs[n-rArgs.mnMinCharPos] = nXPos;
+ }
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Cluster g[%d-%d) c[%d-%d)%x x%ld y%f\n", nFirstGlyphInCluster, nNextGlyph, nFirstCharInCluster, nNextChar, rArgs.mpStr[nFirstCharInCluster], nXPos, aFirstGlyph.yOffset());
+#endif
+ return aBounds;
+}
+
+// append walks an attachment tree, flattening it, and converting it into a
+// sequence of GlyphItem objects which we can later manipulate.
+void
+GraphiteLayout::Glyphs::append(gr::Segment &segment, ImplLayoutArgs &args, gr::GlyphInfo & gi, float nextGlyphOrigin, float scaling, std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char, std::vector<int> & rCharDxs, long & rDXOffset, bool bIsBase)
+{
+ float nextOrigin = nextGlyphOrigin;
+ int firstChar = std::min(gi.firstChar(), gi.lastChar());
+ assert(size() < rGlyph2Char.size());
+ if (!bIsBase) rGlyph2Char[size()] = firstChar;
+ // is the next glyph attached or in the next cluster?
+ glyph_set_range_t iAttached = gi.attachedClusterGlyphs();
+ if (iAttached.first != iAttached.second)
+ {
+ nextOrigin = iAttached.first->origin();
+ }
+ long glyphId = gi.glyphID();
+ long deltaOffset = 0;
+ int glyphWidth = round(nextOrigin * scaling) - round(gi.origin() * scaling);
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"c%d g%d gWidth%d x%f ", firstChar, (int)gi.logicalIndex(), glyphWidth, nextOrigin);
+#endif
+ if (glyphId == 0)
+ {
+ args.NeedFallback(
+ firstChar,
+ gr::RightToLeftDir(gr::DirCode(gi.directionality())));
+ if( (SAL_LAYOUT_FOR_FALLBACK & args.mnFlags ))
+ {
+ glyphId = GF_DROPPED;
+ deltaOffset -= glyphWidth;
+ glyphWidth = 0;
+ }
+ }
+ else if(args.mnFlags & SAL_LAYOUT_FOR_FALLBACK)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"fallback c%d %x in run %d\n", firstChar, args.mpStr[firstChar],
+ args.maRuns.PosIsInAnyRun(firstChar));
+#endif
+ // glyphs that aren't requested for fallback will be taken from base
+ // layout, so mark them as dropped (should this wait until Simplify(false) is called?)
+ if (!args.maRuns.PosIsInAnyRun(firstChar) &&
+ in_range(firstChar, args.mnMinCharPos, args.mnEndCharPos))
+ {
+ glyphId = GF_DROPPED;
+ deltaOffset -= glyphWidth;
+ glyphWidth = 0;
+ }
+ }
+ // append this glyph.
+ long nGlyphFlags = bIsBase ? 0 : GlyphItem::IS_IN_CLUSTER;
+ // directionality seems to be unreliable
+ //nGlyphFlags |= gr::RightToLeftDir(gr::DirCode(gi.attachedClusterBase()->directionality())) ? GlyphItem::IS_RTL_GLYPH : 0;
+ nGlyphFlags |= (gi.directionLevel() & 0x1)? GlyphItem::IS_RTL_GLYPH : 0;
+ GlyphItem aGlyphItem(size(),//gi.logicalIndex(),
+ glyphId,
+ Point(round(gi.origin() * scaling + rDXOffset),
+ round((-gi.yOffset() * scaling) - segment.AscentOffset()* scaling)),
+ nGlyphFlags,
+ glyphWidth);
+ aGlyphItem.mnOrigWidth = round(gi.advanceWidth() * scaling);
+ push_back(aGlyphItem);
+
+ // update the offset if this glyph was dropped
+ rDXOffset += deltaOffset;
+
+ // Recursively apply append all the attached glyphs.
+ for (gr::GlyphSetIterator agi = iAttached.first; agi != iAttached.second; ++agi)
+ {
+ if (agi + 1 == iAttached.second)
+ append(segment, args, *agi, nextGlyphOrigin, scaling, rChar2Base, rGlyph2Char,rCharDxs, rDXOffset, false);
+ else
+ append(segment, args, *agi, (agi + 1)->origin(), scaling, rChar2Base, rGlyph2Char, rCharDxs, rDXOffset, false);
+ }
+}
+
+//
+// An implementation of the SalLayout interface to enable Graphite enabled fonts to be used.
+//
+GraphiteLayout::GraphiteLayout(const gr::Font & font, const grutils::GrFeatureParser * pFeatures) throw()
+ : mpTextSrc(0),
+ mrFont(font),
+ mnWidth(0),
+ mfScaling(1.0),
+ mpFeatures(pFeatures)
+{
+ // Line settings can have subtle affects on space handling
+ // since we don't really know whether it is the end of a line or just a run
+ // in the middle, it is hard to know what to set them to.
+ // If true, it can cause end of line spaces to be hidden e.g. Doulos SIL
+ maLayout.setStartOfLine(false);
+ maLayout.setEndOfLine(false);
+// maLayout.setDumbFallback(false);
+ // trailing ws doesn't seem to always take affect if end of line is true
+ maLayout.setTrailingWs(gr::ktwshAll);
+#ifdef GRLAYOUT_DEBUG
+ gr::ScriptDirCode aDirCode = font.getSupportedScriptDirections();
+ fprintf(grLog(),"GraphiteLayout scripts %x %lx\n", aDirCode, long(this));
+#endif
+}
+
+
+GraphiteLayout::~GraphiteLayout() throw()
+{
+ clear();
+ // the features are owned by the platform layers
+ mpFeatures = NULL;
+}
+
+void GraphiteLayout::clear()
+{
+ // Destroy the segment and text source from any previous invocation of
+ // LayoutText
+ mvGlyphs.clear();
+ mvCharDxs.clear();
+ mvChar2BaseGlyph.clear();
+ mvGlyph2Char.clear();
+
+#ifndef GRCACHE
+ delete mpTextSrc;
+#endif
+
+ // Reset the state to the empty state.
+ mpTextSrc=0;
+ mnWidth = 0;
+ // Don't reset the scaling, because it is set before LayoutText
+}
+
+// This method shouldn't be called on windows, since it needs the dc reset
+bool GraphiteLayout::LayoutText(ImplLayoutArgs & rArgs)
+{
+#ifdef GRCACHE
+ GrSegRecord * pSegRecord = NULL;
+ gr::Segment * pSegment = CreateSegment(rArgs, &pSegRecord);
+ if (!pSegment)
+ return false;
+
+ // layout the glyphs as required by OpenOffice
+ bool success = LayoutGlyphs(rArgs, pSegment, pSegRecord);
+
+ if (pSegRecord) pSegRecord->unlock();
+ else delete pSegment;
+#else
+ gr::Segment * pSegment = CreateSegment(rArgs);
+ bool success = LayoutGlyphs(rArgs, pSegment);
+ delete pSegment;
+#endif
+ return success;
+}
+
+#ifdef GRCACHE
+class GrFontHasher : public gr::Font
+{
+public:
+ GrFontHasher(const gr::Font & aFont) : gr::Font(aFont), mrRealFont(const_cast<gr::Font&>(aFont)) {};
+ ~GrFontHasher(){};
+ virtual bool bold() { return mrRealFont.bold(); };
+ virtual bool italic() { return mrRealFont.italic(); };
+ virtual float ascent() { return mrRealFont.ascent(); };
+ virtual float descent() { return mrRealFont.descent(); };
+ virtual float height() { return mrRealFont.height(); };
+ virtual gr::Font* copyThis() { return mrRealFont.copyThis(); };
+ virtual unsigned int getDPIx() { return mrRealFont.getDPIx(); };
+ virtual unsigned int getDPIy() { return mrRealFont.getDPIy(); };
+ virtual const void* getTable(gr::fontTableId32 nId, size_t* nSize)
+ { return mrRealFont.getTable(nId,nSize); }
+ virtual void getFontMetrics(float*pA, float*pB, float*pC) { mrRealFont.getFontMetrics(pA,pB,pC); };
+
+ sal_Int32 hashCode(const grutils::GrFeatureParser * mpFeatures)
+ {
+ // is this sufficient?
+ std::wstring aFace;
+ bool bBold;
+ bool bItalic;
+ UniqueCacheInfo(aFace, bBold, bItalic);
+ sal_Unicode uName[32]; // max length used in gr::Font
+ // Note: graphite stores font names as UTF-16 even if wchar_t is 32bit
+ // this conversion should be OK.
+ for (size_t i = 0; i < aFace.size() && i < 32; i++)
+ {
+ uName[i] = aFace[i];
+ }
+ size_t iSize = aFace.size();
+ if (0 == iSize) return 0;
+ sal_Int32 hash = rtl_ustr_hashCode_WithLength(uName, iSize);
+ hash ^= static_cast<sal_Int32>(height());
+ hash |= (bBold)? 0x1000000 : 0;
+ hash |= (bItalic)? 0x2000000 : 0;
+ if (mpFeatures)
+ hash ^= mpFeatures->hashCode();
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(), "font hash %x size %f\n", (int)hash, height());
+#endif
+ return hash;
+ };
+
+private:
+ gr::Font & mrRealFont;
+};
+#endif
+
+#ifdef GRCACHE
+gr::Segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs, GrSegRecord ** pSegRecord)
+#else
+gr::Segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs)
+#endif
+{
+ assert(rArgs.mnLength >= 0);
+
+ gr::Segment * pSegment = NULL;
+
+ // Set the SalLayouts values to be the inital ones.
+ SalLayout::AdjustLayout(rArgs);
+ // TODO check if this is needed
+ if (mnUnitsPerPixel > 1)
+ mfScaling = 1.0f / mnUnitsPerPixel;
+
+ // Clear out any previous buffers
+ clear();
+ bool bRtl = mnLayoutFlags & SAL_LAYOUT_BIDI_RTL;
+ try
+ {
+ // Don't set RTL if font doesn't support it otherwise it forces rtl on
+ // everything
+ if (bRtl && (mrFont.getSupportedScriptDirections() & gr::kfsdcHorizRtl))
+ maLayout.setRightToLeft(bRtl);
+
+#ifdef GRCACHE
+ GrFontHasher hasher(mrFont);
+ sal_Int32 aFontHash = hasher.hashCode(mpFeatures);
+ GraphiteSegmentCache * pCache =
+ (GraphiteCacheHandler::instance).getCache(aFontHash);
+ if (pCache)
+ {
+ *pSegRecord = pCache->getSegment(rArgs, bRtl);
+ if (*pSegRecord)
+ {
+ pSegment = (*pSegRecord)->getSegment();
+ mpTextSrc = (*pSegRecord)->getTextSrc();
+ maLayout.setRightToLeft((*pSegRecord)->isRtl());
+ if (rArgs.mpStr != mpTextSrc->getLayoutArgs().mpStr ||
+ rArgs.mnMinCharPos != mpTextSrc->getLayoutArgs().mnMinCharPos ||
+ rArgs.mnEndCharPos != mpTextSrc->getLayoutArgs().mnEndCharPos ||
+ (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) )
+ {
+ (*pSegRecord)->clearVectors();
+ }
+ mpTextSrc->switchLayoutArgs(rArgs);
+ return pSegment;
+ }
+ }
+#endif
+
+ // Context is often needed beyond the specified end, however, we don't
+ // want it if there has been a direction change, since it is hard
+ // to tell between reordering within one direction and multi-directional
+ // text.
+ const int segCharLimit = min(rArgs.mnLength, mnEndCharPos + EXTRA_CONTEXT_LENGTH);
+ int limit = rArgs.mnEndCharPos;
+ if (segCharLimit > limit)
+ {
+ limit += findSameDirLimit(rArgs.mpStr + rArgs.mnEndCharPos,
+ segCharLimit - rArgs.mnEndCharPos, bRtl);
+ }
+
+ // Create a new TextSource object for the engine.
+ mpTextSrc = new TextSourceAdaptor(rArgs, limit);
+ if (mpFeatures) mpTextSrc->setFeatures(mpFeatures);
+
+ pSegment = new gr::RangeSegment((gr::Font *)&mrFont, mpTextSrc, &maLayout, mnMinCharPos, limit);
+ if (pSegment != NULL)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Gr::LayoutText %d-%d, context %d,len%d rtl%d/%d scaling %f\n", rArgs.mnMinCharPos,
+ rArgs.mnEndCharPos, limit, rArgs.mnLength, maLayout.rightToLeft(), pSegment->rightToLeft(), mfScaling);
+#endif
+#ifdef GRCACHE
+ // on a new segment rightToLeft should be correct
+ *pSegRecord = pCache->cacheSegment(mpTextSrc, pSegment, pSegment->rightToLeft());
+#endif
+ }
+ else
+ {
+ clear();
+ return NULL;
+ }
+ }
+ catch (...)
+ {
+ clear(); // destroy the text source and any partially built segments.
+ return NULL;
+ }
+ return pSegment;
+}
+
+#ifdef GRCACHE
+bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment, GrSegRecord * pSegRecord)
+#else
+bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment)
+#endif
+{
+#ifdef GRCACHE
+#ifdef GRCACHE_REUSE_VECTORS
+ // if we have an exact match, then we can reuse the glyph vectors from before
+ if (pSegRecord && (pSegRecord->glyphs().size() > 0) &&
+ !(SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) )
+ {
+ mnWidth = pSegRecord->width();
+ mvGlyphs = pSegRecord->glyphs();
+ mvCharDxs = pSegRecord->charDxs();
+ mvChar2BaseGlyph = pSegRecord->char2BaseGlyph();
+ mvGlyph2Char = pSegRecord->glyph2Char();
+ return true;
+ }
+#endif
+#endif
+ // Calculate the initial character dxs.
+ mvCharDxs.assign(mnEndCharPos - mnMinCharPos, -1);
+ mvChar2BaseGlyph.assign(mnEndCharPos - mnMinCharPos, -1);
+ mnWidth = 0;
+ if (mvCharDxs.size() > 0)
+ {
+ // Discover all the clusters.
+ try
+ {
+ // Note: we use the layout rightToLeft() because in cached segments
+ // rightToLeft() may no longer be valid if the engine has been run
+ // ltr since the segment was created.
+#ifdef GRCACHE
+ bool bRtl = pSegRecord? pSegRecord->isRtl() : pSegment->rightToLeft();
+#else
+ bool bRtl = pSegment->rightToLeft();
+#endif
+ mvGlyphs.fill_from(*pSegment, rArgs, bRtl,
+ mnWidth, mfScaling, mvChar2BaseGlyph, mvGlyph2Char, mvCharDxs);
+
+ if (bRtl)
+ {
+ // not needed for adjacent differences, but for mouse clicks to char
+ std::transform(mvCharDxs.begin(), mvCharDxs.end(), mvCharDxs.begin(),
+ std::bind1st(std::minus<long>(), mnWidth));
+ // fixup last dx to ensure it always equals the width
+ mvCharDxs[mvCharDxs.size() - 1] = mnWidth;
+ }
+#ifdef GRCACHE
+#ifdef GRCACHE_REUSE_VECTORS
+ if (pSegRecord && rArgs.maReruns.IsEmpty() &&
+ !(SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags))
+ {
+ pSegRecord->setGlyphVectors(mnWidth, mvGlyphs, mvCharDxs,
+ mvChar2BaseGlyph, mvGlyph2Char);
+ }
+#endif
+#endif
+ }
+ catch (std::exception e)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"LayoutGlyphs failed %s\n", e.what());
+#endif
+ return false;
+ }
+ catch (...)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"LayoutGlyphs failed with exception");
+#endif
+ return false;
+ }
+ }
+ else
+ {
+ mnWidth = 0;
+ }
+ return true;
+}
+
+int GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) const
+{
+ // Adjust maxmnWidth so FindNextBreakPoint returns a sensible answer.
+ maxmnWidth -= (mnEndCharPos-mnMinCharPos-1)*char_extra; // extra character spacing.
+ maxmnWidth /= factor; // scaling factor.
+
+ // Ask the segment for the nearest whole letter break for the width.
+ //float width;
+ float targetWidth = maxmnWidth/mfScaling;
+ // return quickly if this segment is narrower than the target width
+ // (sometimes graphite doesn't seem to realise this!)
+ if (targetWidth > mnWidth)
+ return STRING_LEN;
+ //int nBreak = mpSegment->findNextBreakPoint(mnMinCharPos,
+ // gr::klbWordBreak, gr::klbLetterBreak, targetWidth, &width);
+
+ // LineFillSegment seems to give better results that findNextBreakPoint
+ // though it may be slower
+ gr::LayoutEnvironment aLE;
+ gr::LineFillSegment lineSeg(const_cast<gr::Font *>(&mrFont), mpTextSrc, &aLE,
+ mnMinCharPos, mpTextSrc->getContextLength(),
+ targetWidth);
+ int nBreak = lineSeg.stopCharacter();
+
+ if (nBreak > mnEndCharPos) nBreak = STRING_LEN;
+ else if (nBreak < mnMinCharPos) nBreak = mnMinCharPos;
+ return nBreak;
+}
+
+
+long GraphiteLayout::FillDXArray( sal_Int32* pDXArray ) const
+{
+ if (mnEndCharPos == mnMinCharPos)
+ // Then we must be zero width!
+ return 0;
+
+ if (pDXArray)
+ {
+ for (size_t i = 0; i < mvCharDxs.size(); i++)
+ {
+ assert((mvChar2BaseGlyph[i] >= -1) && (mvChar2BaseGlyph[i] < (signed)mvGlyphs.size()));
+ if (mvChar2BaseGlyph[i] != -1 &&
+ mvGlyphs[mvChar2BaseGlyph[i]].mnGlyphIndex == GF_DROPPED)
+ {
+ // when used in MultiSalLayout::GetTextBreak dropped glyphs
+ // must have zero width
+ pDXArray[i] = 0;
+ }
+ else
+ {
+ pDXArray[i] = mvCharDxs[i];
+ if (i > 0) pDXArray[i] -= mvCharDxs[i-1];
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%d,%ld ", (int)i, (int)mvCharDxs[i], pDXArray[i]);
+#endif
+ }
+ //std::adjacent_difference(mvCharDxs.begin(), mvCharDxs.end(), pDXArray);
+ //for (size_t i = 0; i < mvCharDxs.size(); i++)
+ // fprintf(grLog(),"%d,%d,%d ", (int)i, (int)mvCharDxs[i], pDXArray[i]);
+ //fprintf(grLog(),"FillDX %ld,%d\n", mnWidth, std::accumulate(pDXArray, pDXArray + mvCharDxs.size(), 0));
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"FillDXArray %d-%d,%d=%ld\n", mnMinCharPos, mnEndCharPos, (int)mpTextSrc->getLength(), mnWidth);
+#endif
+ return mnWidth;
+}
+
+
+void GraphiteLayout::AdjustLayout(ImplLayoutArgs& rArgs)
+{
+ SalLayout::AdjustLayout(rArgs);
+
+ if(rArgs.mpDXArray)
+ {
+ std::vector<int> vDeltaWidths(mvGlyphs.size(), 0);
+ ApplyDXArray(rArgs, vDeltaWidths);
+
+ if( (mnLayoutFlags & SAL_LAYOUT_BIDI_RTL) &&
+ !(rArgs.mnFlags & SAL_LAYOUT_FOR_FALLBACK) )
+ {
+ // check if this is a kashida script
+ bool bKashidaScript = false;
+ for (int i = rArgs.mnMinCharPos; i < rArgs.mnEndCharPos; i++)
+ {
+ UErrorCode aStatus = U_ZERO_ERROR;
+ UScriptCode scriptCode = uscript_getScript(rArgs.mpStr[i], &aStatus);
+ if (scriptCode == USCRIPT_ARABIC || scriptCode == USCRIPT_SYRIAC)
+ {
+ bKashidaScript = true;
+ break;
+ }
+ }
+ int nKashidaWidth = 0;
+ int nKashidaIndex = getKashidaGlyph(nKashidaWidth);
+ if( nKashidaIndex != 0 && bKashidaScript)
+ {
+ kashidaJustify( vDeltaWidths, nKashidaIndex, nKashidaWidth );
+ }
+ }
+ }
+}
+
+
+void GraphiteLayout::ApplyDXArray(ImplLayoutArgs &args, std::vector<int> & rDeltaWidth)
+{
+ const size_t nChars = args.mnEndCharPos - args.mnMinCharPos;
+ if (nChars == 0) return;
+
+#ifdef GRLAYOUT_DEBUG
+ for (size_t iDx = 0; iDx < mvCharDxs.size(); iDx++)
+ fprintf(grLog(),"%d,%d,%ld ", (int)iDx, (int)mvCharDxs[iDx], args.mpDXArray[iDx]);
+ fprintf(grLog(),"ApplyDx\n");
+#endif
+ bool bRtl = mnLayoutFlags & SAL_LAYOUT_BIDI_RTL;
+ int nXOffset = 0;
+ if (bRtl)
+ {
+ nXOffset = args.mpDXArray[nChars - 1] - mvCharDxs[nChars - 1];
+ }
+ int nPrevClusterGlyph = (bRtl)? mvGlyphs.size() : -1;
+ int nPrevClusterLastChar = -1;
+ for (size_t i = 0; i < nChars; i++)
+ {
+ if (mvChar2BaseGlyph[i] > -1 && mvChar2BaseGlyph[i] != nPrevClusterGlyph)
+ {
+ assert((mvChar2BaseGlyph[i] > -1) && (mvChar2BaseGlyph[i] < (signed)mvGlyphs.size()));
+ GlyphItem & gi = mvGlyphs[mvChar2BaseGlyph[i]];
+ if (!gi.IsClusterStart())
+ continue;
+
+ // find last glyph of this cluster
+ size_t j = i + 1;
+ int nLastChar = i;
+ int nLastGlyph = mvChar2BaseGlyph[i];
+ for (; j < nChars; j++)
+ {
+ assert((mvChar2BaseGlyph[j] >= -1) && (mvChar2BaseGlyph[j] < (signed)mvGlyphs.size()));
+ if (mvChar2BaseGlyph[j] != -1 && mvGlyphs[mvChar2BaseGlyph[j]].IsClusterStart())
+ {
+ nLastGlyph = mvChar2BaseGlyph[j] + ((bRtl)? 1 : -1);
+ nLastChar = j - 1;
+ break;
+ }
+ }
+ if (nLastGlyph < 0)
+ {
+ nLastGlyph = mvChar2BaseGlyph[i];
+ }
+ // Its harder to find the last glyph rtl, since the first of
+ // cluster is still on the left so we need to search towards
+ // the previous cluster to the right
+ if (bRtl)
+ {
+ nLastGlyph = mvChar2BaseGlyph[i];
+ while (nLastGlyph + 1 < (signed)mvGlyphs.size() &&
+ !mvGlyphs[nLastGlyph+1].IsClusterStart())
+ {
+ ++nLastGlyph;
+ }
+ }
+ if (j == nChars)
+ {
+ nLastChar = nChars - 1;
+ if (!bRtl) nLastGlyph = mvGlyphs.size() - 1;
+ }
+ assert((nLastChar > -1) && (nLastChar < (signed)nChars));
+ long nNewClusterWidth = args.mpDXArray[nLastChar];
+ long nOrigClusterWidth = mvCharDxs[nLastChar];
+ long nDGlyphOrigin = 0;
+ if (nPrevClusterLastChar > - 1)
+ {
+ assert(nPrevClusterLastChar < (signed)nChars);
+ nNewClusterWidth -= args.mpDXArray[nPrevClusterLastChar];
+ nOrigClusterWidth -= mvCharDxs[nPrevClusterLastChar];
+ nDGlyphOrigin = args.mpDXArray[nPrevClusterLastChar] - mvCharDxs[nPrevClusterLastChar];
+ }
+ long nDWidth = nNewClusterWidth - nOrigClusterWidth;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(), "c%d last glyph %d/%d\n", i, nLastGlyph, mvGlyphs.size());
+#endif
+ assert((nLastGlyph > -1) && (nLastGlyph < (signed)mvGlyphs.size()));
+ mvGlyphs[nLastGlyph].mnNewWidth += nDWidth;
+ if (gi.mnGlyphIndex != GF_DROPPED)
+ mvGlyphs[nLastGlyph].mnNewWidth += nDWidth;
+ else
+ nDGlyphOrigin += nDWidth;
+ // update glyph positions
+ if (bRtl)
+ {
+ for (int n = mvChar2BaseGlyph[i]; n <= nLastGlyph; n++)
+ {
+ assert((n > - 1) && (n < (signed)mvGlyphs.size()));
+ mvGlyphs[n].maLinearPos.X() += -nDGlyphOrigin + nXOffset;
+ }
+ }
+ else
+ {
+ for (int n = mvChar2BaseGlyph[i]; n <= nLastGlyph; n++)
+ {
+ assert((n > - 1) && (n < (signed)mvGlyphs.size()));
+ mvGlyphs[n].maLinearPos.X() += nDGlyphOrigin + nXOffset;
+ }
+ }
+ rDeltaWidth[mvChar2BaseGlyph[i]] = nDWidth;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"c%d g%d-%d dW%ld-%ld=%ld dX%ld x%ld\t", (int)i, mvChar2BaseGlyph[i], nLastGlyph, nNewClusterWidth, nOrigClusterWidth, nDWidth, nDGlyphOrigin, mvGlyphs[mvChar2BaseGlyph[i]].maLinearPos.X());
+#endif
+ nPrevClusterGlyph = mvChar2BaseGlyph[i];
+ nPrevClusterLastChar = nLastChar;
+ i = nLastChar;
+ }
+ }
+ // Update the dx vector with the new values.
+ std::copy(args.mpDXArray, args.mpDXArray + nChars,
+ mvCharDxs.begin() + (args.mnMinCharPos - mnMinCharPos));
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"ApplyDx %ld(%ld)\n", args.mpDXArray[nChars - 1], mnWidth);
+#endif
+ mnWidth = args.mpDXArray[nChars - 1];
+}
+
+void GraphiteLayout::kashidaJustify(std::vector<int>& rDeltaWidths, sal_GlyphId nKashidaIndex, int nKashidaWidth)
+{
+ // skip if the kashida glyph in the font looks suspicious
+ if( nKashidaWidth <= 0 )
+ return;
+
+ // calculate max number of needed kashidas
+ Glyphs::iterator i = mvGlyphs.begin();
+ int nKashidaCount = 0;
+ int nOrigGlyphIndex = -1;
+ int nGlyphIndex = -1;
+ while (i != mvGlyphs.end())
+ {
+ nOrigGlyphIndex++;
+ nGlyphIndex++;
+ // only inject kashidas in RTL contexts
+ if( !(*i).IsRTLGlyph() )
+ {
+ ++i;
+ continue;
+ }
+ // no kashida-injection for blank justified expansion either
+ if( IsSpacingGlyph( (*i).mnGlyphIndex ) )
+ {
+ ++i;
+ continue;
+ }
+ // calculate gap, ignore if too small
+ int nGapWidth = rDeltaWidths[nOrigGlyphIndex];;
+ // worst case is one kashida even for mini-gaps
+ if( 3 * nGapWidth < nKashidaWidth )
+ {
+ ++i;
+ continue;
+ }
+ nKashidaCount = 1 + (nGapWidth / nKashidaWidth);
+#ifdef GRLAYOUT_DEBUG
+ printf("inserting %d kashidas at %ld\n", nKashidaCount, (*i).mnGlyphIndex);
+#endif
+ GlyphItem glyphItem = *i;
+ Point aPos(0, 0);
+ aPos.X() = (*i).maLinearPos.X();
+ GlyphItem newGi(glyphItem.mnCharPos, nKashidaIndex, aPos,
+ GlyphItem::IS_IN_CLUSTER|GlyphItem::IS_RTL_GLYPH, nKashidaWidth);
+ mvGlyphs.reserve(mvGlyphs.size() + nKashidaCount);
+ i = mvGlyphs.begin() + nGlyphIndex;
+ mvGlyphs.insert(i, nKashidaCount, newGi);
+ i = mvGlyphs.begin() + nGlyphIndex;
+ nGlyphIndex += nKashidaCount;
+ // now fix up the kashida positions
+ for (int j = 0; j < nKashidaCount; j++)
+ {
+ (*(i)).maLinearPos.X() -= nGapWidth;
+ nGapWidth -= nKashidaWidth;
+ i++;
+ }
+
+ // fixup rightmost kashida for gap remainder
+ if( nGapWidth < 0 )
+ {
+ if( nKashidaCount <= 1 )
+ nGapWidth /= 2; // for small gap move kashida to middle
+ (*(i-1)).mnNewWidth += nGapWidth; // adjust kashida width to gap width
+ (*(i-1)).maLinearPos.X() += nGapWidth;
+ }
+
+ (*i).mnNewWidth = (*i).mnOrigWidth;
+ ++i;
+ }
+
+}
+
+void GraphiteLayout::GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const
+{
+ // For each character except the last discover the caret positions
+ // immediatly before and after that character.
+ // This is used for underlines in the GUI amongst other things.
+ // It may be used from MultiSalLayout, in which case it must take into account
+ // glyphs that have been moved.
+ std::fill(pCaretXArray, pCaretXArray + nArraySize, -1);
+ // the layout method doesn't modify the layout even though it isn't
+ // const in the interface
+ bool bRtl = const_cast<GraphiteLayout*>(this)->maLayout.rightToLeft();
+ int prevBase = -1;
+ long prevClusterWidth = 0;
+ for (int i = 0, nCharSlot = 0; i < nArraySize && nCharSlot < static_cast<int>(mvCharDxs.size()); ++nCharSlot, i+=2)
+ {
+ if (mvChar2BaseGlyph[nCharSlot] != -1)
+ {
+ assert((mvChar2BaseGlyph[nCharSlot] > -1) && (mvChar2BaseGlyph[nCharSlot] < (signed)mvGlyphs.size()));
+ GlyphItem gi = mvGlyphs[mvChar2BaseGlyph[nCharSlot]];
+ if (gi.mnGlyphIndex == GF_DROPPED)
+ {
+ continue;
+ }
+ int nCluster = mvChar2BaseGlyph[nCharSlot];
+ long origClusterWidth = gi.mnNewWidth;
+ long nMin = gi.maLinearPos.X();
+ long nMax = gi.maLinearPos.X() + gi.mnNewWidth;
+ // attached glyphs are always stored after their base rtl or ltr
+ while (++nCluster < static_cast<int>(mvGlyphs.size()) &&
+ !mvGlyphs[nCluster].IsClusterStart())
+ {
+ origClusterWidth += mvGlyphs[nCluster].mnNewWidth;
+ if (mvGlyph2Char[nCluster] == nCharSlot)
+ {
+ nMin = std::min(nMin, mvGlyphs[nCluster].maLinearPos.X());
+ nMax = std::min(nMax, mvGlyphs[nCluster].maLinearPos.X() + mvGlyphs[nCluster].mnNewWidth);
+ }
+ }
+ if (bRtl)
+ {
+ pCaretXArray[i+1] = nMin;
+ pCaretXArray[i] = nMax;
+ }
+ else
+ {
+ pCaretXArray[i] = nMin;
+ pCaretXArray[i+1] = nMax;
+ }
+ prevBase = mvChar2BaseGlyph[nCharSlot];
+ prevClusterWidth = origClusterWidth;
+ }
+ else if (prevBase > -1)
+ {
+ // this could probably be improved
+ assert((prevBase > -1) && (prevBase < (signed)mvGlyphs.size()));
+ GlyphItem gi = mvGlyphs[prevBase];
+ int nGlyph = prevBase + 1;
+ // try to find a better match, otherwise default to complete cluster
+ for (; nGlyph < static_cast<int>(mvGlyphs.size()) &&
+ !mvGlyphs[nGlyph].IsClusterStart(); nGlyph++)
+ {
+ if (mvGlyph2Char[nGlyph] == nCharSlot)
+ {
+ gi = mvGlyphs[nGlyph];
+ break;
+ }
+ }
+ long nGWidth = gi.mnNewWidth;
+ // if no match position at end of cluster
+ if (nGlyph == static_cast<int>(mvGlyphs.size()) ||
+ mvGlyphs[nGlyph].IsClusterStart())
+ {
+ nGWidth = prevClusterWidth;
+ if (bRtl)
+ {
+ pCaretXArray[i+1] = gi.maLinearPos.X();
+ pCaretXArray[i] = gi.maLinearPos.X();
+ }
+ else
+ {
+ pCaretXArray[i] = gi.maLinearPos.X() + prevClusterWidth;
+ pCaretXArray[i+1] = gi.maLinearPos.X() + prevClusterWidth;
+ }
+ }
+ else
+ {
+ if (bRtl)
+ {
+ pCaretXArray[i+1] = gi.maLinearPos.X();
+ pCaretXArray[i] = gi.maLinearPos.X() + gi.mnNewWidth;
+ }
+ else
+ {
+ pCaretXArray[i] = gi.maLinearPos.X();
+ pCaretXArray[i+1] = gi.maLinearPos.X() + gi.mnNewWidth;
+ }
+ }
+ }
+ else
+ {
+ pCaretXArray[i] = pCaretXArray[i+1] = 0;
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%ld-%ld\t", nCharSlot, pCaretXArray[i], pCaretXArray[i+1]);
+#endif
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"\n");
+#endif
+}
+
+
+// GetNextGlyphs returns a contiguous sequence of glyphs that can be
+// rendered together. It should never return a dropped glyph.
+// The glyph_slot returned should be the index of the next visible
+// glyph after the last glyph returned by this call.
+// The char_index array should be filled with the characters corresponding
+// to each glyph returned.
+// glyph_adv array should be a virtual width such that if successive
+// glyphs returned by this method are added one after the other they
+// have the correct spacing.
+// The logic in this method must match that expected in MultiSalLayout which
+// is used when glyph fallback is in operation.
+int GraphiteLayout::GetNextGlyphs( int length, sal_GlyphId * glyph_out,
+ ::Point & aPosOut, int &glyph_slot, sal_Int32 * glyph_adv, int *char_index) const
+{
+ // Sanity check on the slot index.
+ if (glyph_slot >= signed(mvGlyphs.size()))
+ {
+ glyph_slot = mvGlyphs.size();
+ return 0;
+ }
+ assert(glyph_slot >= 0);
+ // Find the first glyph in the substring.
+ for (; glyph_slot < signed(mvGlyphs.size()) &&
+ ((mvGlyphs.begin() + glyph_slot)->mnGlyphIndex == GF_DROPPED);
+ ++glyph_slot) {};
+
+ // Update the length
+ const int nGlyphSlotEnd = std::min(size_t(glyph_slot + length), mvGlyphs.size());
+
+ // We're all out of glyphs here.
+ if (glyph_slot == nGlyphSlotEnd)
+ {
+ return 0;
+ }
+
+ // Find as many glyphs as we can which can be drawn in one go.
+ Glyphs::const_iterator glyph_itr = mvGlyphs.begin() + glyph_slot;
+ const int glyph_slot_begin = glyph_slot;
+ const int initial_y_pos = glyph_itr->maLinearPos.Y();
+
+ // Set the position to the position of the start glyph.
+ ::Point aStartPos = glyph_itr->maLinearPos;
+ //aPosOut = glyph_itr->maLinearPos;
+ aPosOut = GetDrawPosition(aStartPos);
+
+
+ for (;;) // Forever
+ {
+ // last index of the range from glyph_to_chars does not include this glyph
+ if (char_index)
+ {
+ assert((glyph_slot >= -1) && (glyph_slot < (signed)mvGlyph2Char.size()));
+ if (mvGlyph2Char[glyph_slot] == -1)
+ *char_index++ = mvCharDxs.size();
+ else
+ *char_index++ = mvGlyph2Char[glyph_slot];
+ }
+ // Copy out this glyphs data.
+ ++glyph_slot;
+ *glyph_out++ = glyph_itr->mnGlyphIndex;
+
+ // Find the actual advance - this must be correct if called from
+ // MultiSalLayout::AdjustLayout which requests one glyph at a time.
+ const long nGlyphAdvance = (glyph_slot == static_cast<int>(mvGlyphs.size()))?
+ glyph_itr->mnNewWidth :
+ ((glyph_itr+1)->maLinearPos.X() - glyph_itr->maLinearPos.X());
+
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"GetNextGlyphs g%d c%d x%ld,%ld adv%ld, pos %ld,%ld\n", glyph_slot - 1,
+ mvGlyph2Char[glyph_slot-1], glyph_itr->maLinearPos.X(), glyph_itr->maLinearPos.Y(), nGlyphAdvance,
+ aPosOut.X(), aPosOut.Y());
+#endif
+
+ if (glyph_adv) // If we are returning advance store it.
+ *glyph_adv++ = nGlyphAdvance;
+ else // Stop when next advance is unexpected.
+ if (glyph_itr->mnOrigWidth != nGlyphAdvance) break;
+
+ // Have fetched all the glyphs we need to
+ if (glyph_slot == nGlyphSlotEnd)
+ break;
+
+ ++glyph_itr;
+ // Stop when next y position is unexpected.
+ if (initial_y_pos != glyph_itr->maLinearPos.Y())
+ break;
+
+ // Stop if glyph dropped
+ if (glyph_itr->mnGlyphIndex == GF_DROPPED)
+ break;
+ }
+ int numGlyphs = glyph_slot - glyph_slot_begin;
+ // move the next glyph_slot to a glyph that hasn't been dropped
+ while (glyph_slot < static_cast<int>(mvGlyphs.size()) &&
+ (mvGlyphs.begin() + glyph_slot)->mnGlyphIndex == GF_DROPPED)
+ ++glyph_slot;
+ return numGlyphs;
+}
+
+
+void GraphiteLayout::MoveGlyph( int nGlyphIndex, long nNewPos )
+{
+ // TODO it might be better to actualy implement simplify properly, but this
+ // needs to be done carefully so the glyph/char maps are maintained
+ // If a glyph has been dropped then it wasn't returned by GetNextGlyphs, so
+ // the index here may be wrong
+ while ((mvGlyphs[nGlyphIndex].mnGlyphIndex == GF_DROPPED) &&
+ (nGlyphIndex < (signed)mvGlyphs.size()))
+ {
+ nGlyphIndex++;
+ }
+ const long dx = nNewPos - mvGlyphs[nGlyphIndex].maLinearPos.X();
+
+ if (dx == 0) return;
+ // GenericSalLayout only changes maLinearPos, mvCharDxs doesn't change
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Move %d (%ld,%ld) c%d by %ld\n", nGlyphIndex, mvGlyphs[nGlyphIndex].maLinearPos.X(), nNewPos, mvGlyph2Char[nGlyphIndex], dx);
+#endif
+ for (size_t gi = nGlyphIndex; gi < mvGlyphs.size(); gi++)
+ {
+ mvGlyphs[gi].maLinearPos.X() += dx;
+ }
+ // width does need to be updated for correct fallback
+ mnWidth += dx;
+}
+
+
+void GraphiteLayout::DropGlyph( int nGlyphIndex )
+{
+ if(nGlyphIndex >= signed(mvGlyphs.size()))
+ return;
+
+ GlyphItem & glyph = mvGlyphs[nGlyphIndex];
+ glyph.mnGlyphIndex = GF_DROPPED;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Dropped %d\n", nGlyphIndex);
+#endif
+}
+
+void GraphiteLayout::Simplify( bool isBaseLayout )
+{
+ const sal_GlyphId dropMarker = isBaseLayout ? GF_DROPPED : 0;
+
+ Glyphs::iterator gi = mvGlyphs.begin();
+ // TODO check whether we need to adjust positions here
+ // MultiSalLayout seems to move the glyphs itself, so it may not be needed.
+ long deltaX = 0;
+ while (gi != mvGlyphs.end())
+ {
+ if (gi->mnGlyphIndex == dropMarker)
+ {
+ deltaX += gi->mnNewWidth;
+ gi->mnNewWidth = 0;
+ }
+ else
+ {
+ deltaX = 0;
+ }
+ //mvCharDxs[mvGlyph2Char[gi->mnCharPos]] -= deltaX;
+ ++gi;
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Simplify base%d dx=%ld newW=%ld\n", isBaseLayout, deltaX, mnWidth - deltaX);
+#endif
+ // discard width from trailing dropped glyphs, but not those in the middle
+ mnWidth -= deltaX;
+}
diff --git a/vcl/source/glyphs/graphite_serverfont.cxx b/vcl/source/glyphs/graphite_serverfont.cxx
new file mode 100644
index 000000000000..be424c94b9d2
--- /dev/null
+++ b/vcl/source/glyphs/graphite_serverfont.cxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Header files
+//
+
+// Platform
+#include <vcl/sallayout.hxx>
+// Module
+#include "gcach_ftyp.hxx"
+#include <vcl/graphite_features.hxx>
+#include "graphite_textsrc.hxx"
+#include <vcl/graphite_serverfont.hxx>
+
+#ifndef WNT
+
+//
+// An implementation of the GraphiteLayout interface to enable Graphite enabled fonts to be used.
+//
+
+GraphiteServerFontLayout::GraphiteServerFontLayout(GraphiteFontAdaptor * pFont) throw()
+ : ServerFontLayout(pFont->font()), mpFont(pFont),
+ maImpl(*mpFont, mpFont->features(), pFont)
+{
+ // Nothing needed here
+}
+
+GraphiteServerFontLayout::~GraphiteServerFontLayout() throw()
+{
+ delete mpFont;
+ mpFont = NULL;
+}
+
+const sal_Unicode* GraphiteServerFontLayout::getTextPtr() const
+{
+ return maImpl.textSrc()->getLayoutArgs().mpStr +
+ maImpl.textSrc()->getLayoutArgs().mnMinCharPos;
+}
+
+sal_GlyphId GraphiteLayoutImpl::getKashidaGlyph(int & width)
+{
+ int nKashidaIndex = mpFont->font().GetGlyphIndex( 0x0640 );
+ if( nKashidaIndex != 0 )
+ {
+ const GlyphMetric& rGM = mpFont->font().GetGlyphMetric( nKashidaIndex );
+ width = rGM.GetCharWidth();
+ }
+ else
+ {
+ width = 0;
+ }
+ return nKashidaIndex;
+}
+
+#endif
diff --git a/vcl/source/glyphs/graphite_textsrc.cxx b/vcl/source/glyphs/graphite_textsrc.cxx
new file mode 100644
index 000000000000..adc2ae99c4f8
--- /dev/null
+++ b/vcl/source/glyphs/graphite_textsrc.cxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Header files
+//
+// Standard Library
+#include <string>
+#include <cassert>
+#include "graphite_textsrc.hxx"
+#include <vcl/graphite_features.hxx>
+
+// class TextSourceAdaptor implementation.
+//
+TextSourceAdaptor::~TextSourceAdaptor()
+{
+ delete mpFeatures;
+}
+
+gr::UtfType TextSourceAdaptor::utfEncodingForm() {
+ return gr::kutf16;
+}
+
+
+size_t TextSourceAdaptor::getLength()
+{
+ return maLayoutArgs.mnLength;
+}
+
+
+size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf32 *)
+{
+ assert(false);
+ return 0;
+}
+
+
+size_t TextSourceAdaptor::fetch(gr::toffset offset, size_t char_count, gr::utf16 * char_buffer)
+{
+ assert(char_buffer);
+
+ size_t copy_count = std::min(size_t(maLayoutArgs.mnLength), char_count);
+ std::copy(maLayoutArgs.mpStr + offset, maLayoutArgs.mpStr + offset + copy_count, char_buffer);
+
+ return copy_count;
+}
+
+
+size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf8 *)
+{
+ assert(false);
+ return 0;
+}
+
+
+inline void TextSourceAdaptor::getCharProperties(const int nCharIdx, int & min, int & lim, size_t & depth)
+{
+ maLayoutArgs.ResetPos();
+ bool rtl = maLayoutArgs.mnFlags & SAL_LAYOUT_BIDI_RTL;
+ for(depth = ((rtl)? 1:0); maLayoutArgs.maRuns.GetRun(&min, &lim, &rtl); maLayoutArgs.maRuns.NextRun())
+ {
+ if (min > nCharIdx)
+ break;
+ // Only increase the depth when a change of direction occurs.
+ depth += int(rtl ^ bool(depth & 0x1));
+ if (min <= nCharIdx && nCharIdx < lim)
+ break;
+ }
+ // If there is no run for this position increment the depth, but don't
+ // change if this is out of bounds context
+ if (lim > 0 && nCharIdx >= lim && nCharIdx < maLayoutArgs.mnEndCharPos)
+ depth++;
+}
+
+
+bool TextSourceAdaptor::getRightToLeft(gr::toffset nCharIdx)
+{
+ size_t depth;
+ int min, lim = 0;
+ getCharProperties(nCharIdx, min, lim, depth);
+ //printf("getRtl %d,%x=%d\n", nCharIdx, maLayoutArgs.mpStr[nCharIdx], depth & 0x1);
+ return depth & 0x1;
+}
+
+
+unsigned int TextSourceAdaptor::getDirectionDepth(gr::toffset nCharIdx)
+{
+ size_t depth;
+ int min, lim;
+ getCharProperties(nCharIdx, min, lim, depth);
+ //printf("getDirectionDepth %d,%x=%d\n", nCharIdx, maLayoutArgs.mpStr[nCharIdx], depth);
+ return depth;
+}
+
+
+float TextSourceAdaptor::getVerticalOffset(gr::toffset)
+{
+ return 0.0f; //TODO: Implement correctly
+}
+
+gr::isocode TextSourceAdaptor::getLanguage(gr::toffset)
+{
+ if (mpFeatures && mpFeatures->hasLanguage())
+ return mpFeatures->getLanguage();
+ gr::isocode unknown = {{0,0,0,0}};
+ return unknown;
+}
+
+std::pair<gr::toffset, gr::toffset> TextSourceAdaptor::propertyRange(gr::toffset nCharIdx)
+{
+
+ if (nCharIdx < unsigned(maLayoutArgs.mnMinCharPos))
+ return std::make_pair(0, maLayoutArgs.mnMinCharPos);
+
+ if (nCharIdx < mnEnd)
+ return std::make_pair(maLayoutArgs.mnMinCharPos, mnEnd);
+
+ return std::make_pair(mnEnd, maLayoutArgs.mnLength);
+}
+
+size_t TextSourceAdaptor::getFontFeatures(gr::toffset, gr::FeatureSetting * settings)
+{
+ if (mpFeatures) return mpFeatures->getFontFeatures(settings);
+ return 0;
+}
+
+
+bool TextSourceAdaptor::sameSegment(gr::toffset char_idx1, gr::toffset char_idx2)
+{
+ const std::pair<gr::toffset, gr::toffset>
+ range1 = propertyRange(char_idx1),
+ range2 = propertyRange(char_idx2);
+
+ return range1 == range2;
+}
+
+void TextSourceAdaptor::setFeatures(const grutils::GrFeatureParser * pFeatures)
+{
+ mpFeatures = new grutils::GrFeatureParser(*pFeatures);
+}
diff --git a/vcl/source/glyphs/graphite_textsrc.hxx b/vcl/source/glyphs/graphite_textsrc.hxx
new file mode 100644
index 000000000000..6f701988bb01
--- /dev/null
+++ b/vcl/source/glyphs/graphite_textsrc.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITETEXTSRC_HXX
+#define _SV_GRAPHITETEXTSRC_HXX
+// Description: Implements the Graphite interfaces IGrTextSource and
+// IGrGraphics which provide Graphite with access to the
+// app's text storage system and the platform's font and
+// graphics systems.
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Standard Library
+#include <stdexcept>
+// Platform
+
+#ifndef _SVWIN_H
+#include <tools/svwin.h>
+#endif
+
+#ifndef _SV_SVSYS_HXX
+#include <svsys.h>
+#endif
+
+#ifndef _SV_SALGDI_HXX
+#include <vcl/salgdi.hxx>
+#endif
+
+#ifndef _SV_SALLAYOUT_HXX
+#include <vcl/sallayout.hxx>
+#endif
+
+// Module
+#include "vcl/dllapi.h"
+
+// Libraries
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/ITextSource.h>
+
+// Module type definitions and forward declarations.
+//
+namespace grutils
+{
+ class GrFeatureParser;
+}
+// Implements the Adaptor pattern to adapt the LayoutArgs and the ServerFont interfaces to the
+// gr::IGrTextSource interface.
+// @author tse
+//
+class TextSourceAdaptor : public gr::ITextSource
+{
+public:
+ TextSourceAdaptor(ImplLayoutArgs &layout_args, const int nContextLen) throw();
+ ~TextSourceAdaptor();
+ virtual gr::UtfType utfEncodingForm();
+ virtual size_t getLength();
+ virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchBuffer);
+ virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer);
+ virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchsBuffer);
+ virtual bool getRightToLeft(gr::toffset ich);
+ virtual unsigned int getDirectionDepth(gr::toffset ich);
+ virtual float getVerticalOffset(gr::toffset ich);
+ virtual gr::isocode getLanguage(gr::toffset ich);
+
+ virtual std::pair<gr::toffset, gr::toffset> propertyRange(gr::toffset ich);
+ virtual size_t getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset);
+ virtual bool sameSegment(gr::toffset ich1, gr::toffset ich2);
+
+ operator ImplLayoutArgs & () throw();
+ void setFeatures(const grutils::GrFeatureParser * pFeatures);
+ const ImplLayoutArgs & getLayoutArgs() const { return maLayoutArgs; }
+ size_t getContextLength() const { return mnEnd; };
+ inline void switchLayoutArgs(ImplLayoutArgs & newArgs);
+private:
+ // Prevent the generation of a default assignment operator.
+ TextSourceAdaptor & operator=(const TextSourceAdaptor &);
+
+ void getCharProperties(const int, int &, int &, size_t &);
+
+ ImplLayoutArgs maLayoutArgs;
+ size_t mnEnd;
+ const grutils::GrFeatureParser * mpFeatures;
+};
+
+inline TextSourceAdaptor::TextSourceAdaptor(ImplLayoutArgs &la, const int nContextLen) throw()
+ : maLayoutArgs(la),
+ mnEnd(std::min(la.mnLength, nContextLen)),
+ mpFeatures(NULL)
+{
+}
+
+inline TextSourceAdaptor::operator ImplLayoutArgs & () throw() {
+ return maLayoutArgs;
+}
+
+inline void TextSourceAdaptor::switchLayoutArgs(ImplLayoutArgs & aNewArgs)
+{
+ mnEnd += aNewArgs.mnMinCharPos - maLayoutArgs.mnMinCharPos;
+ maLayoutArgs = aNewArgs;
+}
+
+#endif
diff --git a/vcl/source/glyphs/makefile.mk b/vcl/source/glyphs/makefile.mk
index b08777d7020f..3e79cdc63da2 100644
--- a/vcl/source/glyphs/makefile.mk
+++ b/vcl/source/glyphs/makefile.mk
@@ -49,11 +49,36 @@ CFLAGS+=-DUSE_FT_EMBOLDEN
# --- Files --------------------------------------------------------
.IF "$(USE_BUILTIN_RASTERIZER)" != ""
+# GlyphCache + FreeType support (only on UNX platforms currently)
SLOFILES=\
$(SLO)$/glyphcache.obj \
$(SLO)$/gcach_rbmp.obj \
$(SLO)$/gcach_layout.obj \
$(SLO)$/gcach_ftyp.obj
+
+.IF "$(ENABLE_GRAPHITE)" != ""
+# Graphite support using the glyphcache infrastructure
+CFLAGS+=-DENABLE_GRAPHITE
+SLOFILES+= $(SLO)$/graphite_adaptors.obj \
+ $(SLO)$/graphite_features.obj \
+ $(SLO)$/graphite_cache.obj \
+ $(SLO)$/graphite_textsrc.obj \
+ $(SLO)$/graphite_serverfont.obj \
+ $(SLO)$/graphite_layout.obj
+.ENDIF
+
+.ELSE
+
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+# Graphite support on non-UNX platforms
+# make use of stlport headerfiles
+EXT_USE_STLPORT=TRUE
+SLOFILES=\
+ $(SLO)$/graphite_textsrc.obj \
+ $(SLO)$/graphite_cache.obj \
+ $(SLO)$/graphite_features.obj \
+ $(SLO)$/graphite_layout.obj
+.ENDIF
.ENDIF
# --- Targets ------------------------------------------------------
diff --git a/vcl/source/helper/lazydelete.cxx b/vcl/source/helper/lazydelete.cxx
index f5a8d8fbb14e..a300aedf8175 100644
--- a/vcl/source/helper/lazydelete.cxx
+++ b/vcl/source/helper/lazydelete.cxx
@@ -84,6 +84,9 @@ template<> bool LazyDeletor<Menu>::is_less( Menu* left, Menu* right )
DeleteOnDeinitBase::~DeleteOnDeinitBase()
{
+ ImplSVData* pSVData = ImplGetSVData();
+ if( pSVData && pSVData->mpDeinitDeleteList != NULL )
+ pSVData->mpDeinitDeleteList->remove( this );
}
void DeleteOnDeinitBase::addDeinitContainer( DeleteOnDeinitBase* i_pContainer )
diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx
index f8baad0b4137..c9e8d11557e8 100644
--- a/vcl/source/window/brdwin.cxx
+++ b/vcl/source/window/brdwin.cxx
@@ -1840,7 +1840,7 @@ void ImplBorderWindow::ImplInit( Window* pParent,
{
// Alle WindowBits entfernen, die wir nicht haben wollen
WinBits nOrgStyle = nStyle;
- WinBits nTestStyle = (WB_MOVEABLE | WB_SIZEABLE | WB_ROLLABLE | WB_PINABLE | WB_CLOSEABLE | WB_STANDALONE | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_SYSTEMFLOATWIN | WB_INTROWIN | WB_DEFAULTWIN | WB_TOOLTIPWIN | WB_NOSHADOW | WB_OWNERDRAWDECORATION | WB_SYSTEMCHILDWINDOW );
+ WinBits nTestStyle = (WB_MOVEABLE | WB_SIZEABLE | WB_ROLLABLE | WB_PINABLE | WB_CLOSEABLE | WB_STANDALONE | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_SYSTEMFLOATWIN | WB_INTROWIN | WB_DEFAULTWIN | WB_TOOLTIPWIN | WB_NOSHADOW | WB_OWNERDRAWDECORATION | WB_SYSTEMCHILDWINDOW | WB_NEEDSFOCUS);
if ( nTypeStyle & BORDERWINDOW_STYLE_APP )
nTestStyle |= WB_APP;
nStyle &= nTestStyle;
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index 392c2ceaa478..c6f64d74c5fc 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -46,10 +46,41 @@ using namespace ::com::sun::star;
// =======================================================================
+static BOOL ImplHasIndirectTabParent( Window* pWindow )
+{
+ // The window has inderect tab parent if it is included in tab hierarchy
+ // of the indirect parent window
+
+ return ( pWindow && pWindow->GetParent()
+ && ( pWindow->GetParent()->ImplGetWindow()->GetStyle() & WB_CHILDDLGCTRL ) );
+}
+
+// -----------------------------------------------------------------------
+
+static Window* ImplGetTopParentOfTabHierarchy( Window* pParent )
+{
+ // The method allows to find the most close parent containing all the
+ // window from the current tab-hierarchy
+ // The direct parent should be provided as a parameter here
+
+ Window* pResult = pParent;
+
+ if ( pResult )
+ {
+ while ( pResult->GetParent() && ( pResult->ImplGetWindow()->GetStyle() & WB_CHILDDLGCTRL ) )
+ pResult = pResult->GetParent();
+ }
+
+ return pResult;
+}
+
+// -----------------------------------------------------------------------
+
static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex )
{
Window* pTabPage = NULL;
Window* pFoundWindow = NULL;
+
Window* pWindow = pParent->GetWindow( WINDOW_FIRSTCHILD );
Window* pNextWindow = pWindow;
while ( pWindow )
@@ -96,7 +127,8 @@ static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex
}
}
}
- else if ( pWindow->GetStyle() & WB_DIALOGCONTROL )
+ else if ( ( pWindow->GetStyle() & WB_DIALOGCONTROL )
+ || ( pWindow->GetStyle() & WB_CHILDDLGCTRL ) )
pFoundWindow = ImplGetSubChildWindow( pWindow, n, nIndex );
}
@@ -122,6 +154,8 @@ static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex
static Window* ImplGetChildWindow( Window* pParent, USHORT n, USHORT& nIndex, BOOL bTestEnable )
{
+ pParent = ImplGetTopParentOfTabHierarchy( pParent );
+
nIndex = 0;
Window* pWindow = ImplGetSubChildWindow( pParent, n, nIndex );
if ( bTestEnable )
@@ -284,14 +318,16 @@ static Window* ImplFindDlgCtrlWindow( Window* pParent, Window* pWindow, USHORT&
USHORT nFormEnd;
// Focus-Fenster in der Child-Liste suchen
- pSWindow = ImplGetChildWindow( pParent, 0, i, FALSE );
+ Window* pFirstChildWindow = pSWindow = ImplGetChildWindow( pParent, 0, i, FALSE );
if( pWindow == NULL )
pWindow = pSWindow;
while ( pSWindow )
{
- if ( pSWindow->ImplGetWindow()->IsDialogControlStart() )
+ // the DialogControlStart mark is only accepted for the direct children
+ if ( !ImplHasIndirectTabParent( pSWindow )
+ && pSWindow->ImplGetWindow()->IsDialogControlStart() )
nFormStart = i;
// SecondWindow wegen zusammengesetzten Controls wie
@@ -331,12 +367,33 @@ static Window* ImplFindDlgCtrlWindow( Window* pParent, Window* pWindow, USHORT&
// Formularende suchen
nFormEnd = nFormStart;
pTempWindow = pSWindow;
+ sal_Int32 nIteration = 0;
do
{
nFormEnd = i;
pTempWindow = ImplGetNextWindow( pParent, i, i, FALSE );
- if ( !i || (pTempWindow && pTempWindow->ImplGetWindow()->IsDialogControlStart()) )
+
+ // the DialogControlStart mark is only accepted for the direct children
+ if ( !i
+ || ( pTempWindow && !ImplHasIndirectTabParent( pTempWindow )
+ && pTempWindow->ImplGetWindow()->IsDialogControlStart() ) )
break;
+
+ if ( pTempWindow && pTempWindow == pFirstChildWindow )
+ {
+ // It is possible to go through the begin of hierarchy once
+ // while looking for DialogControlStart mark.
+ // If it happens second time, it looks like an endless loop,
+ // that should be impossible, but just for the case...
+ nIteration++;
+ if ( nIteration >= 2 )
+ {
+ // this is an unexpected scenario
+ DBG_ASSERT( FALSE, "It seems to be an endless loop!" );
+ rFormStart = 0;
+ break;
+ }
+ }
}
while ( pTempWindow );
rFormEnd = nFormEnd;
diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index b5f1ada74a98..c587b7ad8441 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -1238,8 +1238,8 @@ void ImplDockingWindowWrapper::StartPopupMode( ToolBox *pParentToolBox )
ULONG nFlags = FLOATWIN_POPUPMODE_ALLOWTEAROFF |
FLOATWIN_POPUPMODE_NOFOCUSCLOSE |
FLOATWIN_POPUPMODE_ALLMOUSEBUTTONCLOSE |
- FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE |
- FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE;
+ FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE;
+// |FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE;
// if the subtoolbar was opened via keyboard make sure that key events
// will go into subtoolbar
diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx
index 7bcb90bbb8fc..5f1578c4b9e2 100644
--- a/vcl/source/window/floatwin.cxx
+++ b/vcl/source/window/floatwin.cxx
@@ -243,6 +243,13 @@ FloatingWindow::~FloatingWindow()
// -----------------------------------------------------------------------
+Point FloatingWindow::CalcFloatingPosition( Window* pWindow, const Rectangle& rRect, ULONG nFlags, USHORT& rArrangeIndex )
+{
+ return ImplCalcPos( pWindow, rRect, nFlags, rArrangeIndex );
+}
+
+// -----------------------------------------------------------------------
+
Point FloatingWindow::ImplCalcPos( Window* pWindow,
const Rectangle& rRect, ULONG nFlags,
USHORT& rArrangeIndex )
@@ -676,8 +683,6 @@ void FloatingWindow::StartPopupMode( const Rectangle& rRect, ULONG nFlags )
// avoid close on focus change for decorated floating windows only
if( mpWindowImpl->mbFrame && (GetStyle() & WB_MOVEABLE) )
nFlags |= FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE;
- else
- nFlags &= ~FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE;
// #102010# For debugging Accessibility
static const char* pEnv = getenv("SAL_FLOATWIN_NOAPPFOCUSCLOSE" );
@@ -751,8 +756,9 @@ void FloatingWindow::StartPopupMode( ToolBox* pBox, ULONG nFlags )
// FLOATWIN_POPUPMODE_NOMOUSECLOSE |
FLOATWIN_POPUPMODE_ALLMOUSEBUTTONCLOSE |
// FLOATWIN_POPUPMODE_NOMOUSERECTCLOSE | // #105968# floating toolboxes should close when clicked in (parent's) float rect
- FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE |
- FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE;
+ FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE;
+// | FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE;
+
/*
* FLOATWIN_POPUPMODE_NOKEYCLOSE |
* don't set since it disables closing floaters with escape
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index ccf75dbd59b3..ebd4475a80fc 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -557,7 +557,7 @@ public:
void DataChanged( const DataChangedEvent& rDCEvt );
- void SetImages( long nMaxHeight = 0 );
+ void SetImages( long nMaxHeight = 0, bool bForce = false );
void calcMinSize();
Size getMinSize();
@@ -591,7 +591,7 @@ void DecoToolBox::DataChanged( const DataChangedEvent& rDCEvt )
{
calcMinSize();
SetBackground();
- SetImages();
+ SetImages( 0, true);
}
}
@@ -625,7 +625,7 @@ Size DecoToolBox::getMinSize()
return maMinSize;
}
-void DecoToolBox::SetImages( long nMaxHeight )
+void DecoToolBox::SetImages( long nMaxHeight, bool bForce )
{
long border = getMinSize().Height() - maImage.GetSizePixel().Height();
@@ -635,13 +635,13 @@ void DecoToolBox::SetImages( long nMaxHeight )
if( nMaxHeight < getMinSize().Height() )
nMaxHeight = getMinSize().Height();
- if( lastSize != nMaxHeight - border )
+ if( (lastSize != nMaxHeight - border) || bForce )
{
lastSize = nMaxHeight - border;
Color aEraseColor( 255, 255, 255, 255 );
BitmapEx aBmpExDst( maImage.GetBitmapEx() );
- BitmapEx aBmpExSrc( GetSettings().GetStyleSettings().GetMenuBarColor().IsDark() ?
+ BitmapEx aBmpExSrc( GetSettings().GetStyleSettings().GetHighContrastMode() ?
maImageHC.GetBitmapEx() : aBmpExDst );
aEraseColor.SetTransparency( 255 );
@@ -2731,7 +2731,14 @@ void Menu::ImplPaint( Window* pWin, USHORT nBorder, long nStartY, MenuItemData*
}
if ( pThisItemOnly && bHighlighted )
- pWin->SetTextColor( rSettings.GetMenuTextColor() );
+ {
+ // This restores the normal menu or menu bar text
+ // color for when it is no longer highlighted.
+ if ( bIsMenuBar )
+ pWin->SetTextColor( rSettings.GetMenuBarTextColor() );
+ else
+ pWin->SetTextColor( rSettings.GetMenuTextColor() );
+ }
}
if( bLayout )
{
@@ -3787,7 +3794,10 @@ static void ImplInitMenuWindow( Window* pWin, BOOL bFont, BOOL bMenuBar )
pWin->SetBackground( Wallpaper( rStyleSettings.GetMenuColor() ) );
}
- pWin->SetTextColor( rStyleSettings.GetMenuTextColor() );
+ if ( bMenuBar )
+ pWin->SetTextColor( rStyleSettings.GetMenuBarTextColor() );
+ else
+ pWin->SetTextColor( rStyleSettings.GetMenuTextColor() );
pWin->SetTextFillColor();
pWin->SetLineColor();
}
@@ -5056,7 +5066,7 @@ MenuBarWindow::MenuBarWindow( Window* pParent ) :
aCloser.SetParentClipMode( PARENTCLIPMODE_NOCLIP );
aCloser.InsertItem( IID_DOCUMENTCLOSE,
- GetSettings().GetStyleSettings().GetMenuBarColor().IsDark() ? aCloser.maImageHC : aCloser.maImage, 0 );
+ GetSettings().GetStyleSettings().GetHighContrastMode() ? aCloser.maImageHC : aCloser.maImage, 0 );
aCloser.SetSelectHdl( LINK( this, MenuBarWindow, CloserHdl ) );
aCloser.AddEventListener( LINK( this, MenuBarWindow, ToolboxEventHdl ) );
aCloser.SetQuickHelpText( IID_DOCUMENTCLOSE, XubString( ResId( SV_HELPTEXT_CLOSEDOCUMENT, *pResMgr ) ) );
@@ -5697,7 +5707,7 @@ void MenuBarWindow::Paint( const Rectangle& )
// in high contrast mode draw a separating line on the lower edge
if( ! IsNativeControlSupported( CTRL_MENUBAR, PART_ENTIRE_CONTROL) &&
- GetSettings().GetStyleSettings().GetFaceColor().IsDark() )
+ GetSettings().GetStyleSettings().GetHighContrastMode() )
{
Push( PUSH_LINECOLOR | PUSH_MAPMODE );
SetLineColor( Color( COL_WHITE ) );
diff --git a/vcl/source/window/msgbox.cxx b/vcl/source/window/msgbox.cxx
index bd727092a836..3d3245af831f 100644
--- a/vcl/source/window/msgbox.cxx
+++ b/vcl/source/window/msgbox.cxx
@@ -500,7 +500,7 @@ void InfoBox::ImplInitInfoBoxData()
if ( !GetText().Len() )
SetText( Application::GetDisplayName() );
- SetImage( GetSettings().GetStyleSettings().GetDialogColor().IsDark() ?
+ SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
InfoBox::GetStandardImageHC() : InfoBox::GetStandardImage() );
mnSoundType = ((USHORT)SOUND_INFO)+1;
}
@@ -591,7 +591,7 @@ void ErrorBox::ImplInitErrorBoxData()
if ( !GetText().Len() )
SetText( Application::GetDisplayName() );
- SetImage( GetSettings().GetStyleSettings().GetDialogColor().IsDark() ?
+ SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
ErrorBox::GetStandardImageHC() : ErrorBox::GetStandardImage() );
mnSoundType = ((USHORT)SOUND_ERROR)+1;
}
@@ -637,7 +637,7 @@ void QueryBox::ImplInitQueryBoxData()
if ( !GetText().Len() )
SetText( Application::GetDisplayName() );
- SetImage( GetSettings().GetStyleSettings().GetDialogColor().IsDark() ?
+ SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
QueryBox::GetStandardImageHC() : QueryBox::GetStandardImage() );
mnSoundType = ((USHORT)SOUND_QUERY)+1;
}
diff --git a/vcl/source/window/taskpanelist.cxx b/vcl/source/window/taskpanelist.cxx
index bae6d99430f0..d1e598532b88 100644
--- a/vcl/source/window/taskpanelist.cxx
+++ b/vcl/source/window/taskpanelist.cxx
@@ -197,18 +197,21 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
{
// F6 cycles through everything and works always
- // Ctrl-TAB cycles through Menubar, Toolbars and Floatingwindows only and is
- // only active if one of those items has the focus
- BOOL bF6 = FALSE;
+
+ // MAV, #i104204#
+ // The old design was the following one:
+ // < Ctrl-TAB cycles through Menubar, Toolbars and Floatingwindows only and is
+ // < only active if one of those items has the focus
+ //
+ // Since the design of Ctrl-Tab looks to be inconsistent ( non-modal dialogs are not reachable
+ // and the shortcut conflicts with tab-control shortcut ), it is no more supported
BOOL bSplitterOnly = FALSE;
BOOL bFocusInList = FALSE;
KeyCode aKeyCode = aKeyEvent.GetKeyCode();
BOOL bForward = !aKeyCode.IsShift();
- if( ( (aKeyCode.IsMod1() || aKeyCode.IsMod2()) && aKeyCode.GetCode() == KEY_TAB ) // Ctrl-TAB or Alt-TAB
- || ( bF6 = ( aKeyCode.GetCode()) == KEY_F6 ) != FALSE // F6
- )
+ if( aKeyCode.GetCode() == KEY_F6 ) // F6
{
- bSplitterOnly = bF6 && aKeyCode.IsMod1() && aKeyCode.IsShift();
+ bSplitterOnly = aKeyCode.IsMod1() && aKeyCode.IsShift();
// is the focus in the list ?
::std::vector< Window* >::iterator p = mTaskPanes.begin();
@@ -219,12 +222,8 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
{
bFocusInList = TRUE;
- // Ctrl-TAB does not work in Dialogs
- if( !bF6 && pWin->IsDialog() )
- return FALSE;
-
// Ctrl-F6 goes directly to the document
- if( !pWin->IsDialog() && bF6 && aKeyCode.IsMod1() && !aKeyCode.IsShift() )
+ if( !pWin->IsDialog() && aKeyCode.IsMod1() && !aKeyCode.IsShift() )
{
pWin->GrabFocusToDocument();
return TRUE;
@@ -236,7 +235,8 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
if( bSplitterOnly )
pNextWin = FindNextSplitter( *p, TRUE );
else
- pNextWin = bF6 ? FindNextFloat( *p, bForward ) : FindNextPane( *p, bForward );
+ pNextWin = FindNextFloat( *p, bForward );
+
if( pNextWin != pWin )
{
ImplGetSVData()->maWinData.mbNoSaveFocus = TRUE;
@@ -261,7 +261,7 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
}
// the focus is not in the list: activate first float if F6 was pressed
- if( !bFocusInList && bF6 )
+ if( !bFocusInList )
{
Window *pWin;
if( bSplitterOnly )
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index bb1f428c6626..8aa4926f5e1a 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -397,7 +397,7 @@ void ToolBox::ImplDrawGradientBackground( ToolBox* pThis, ImplDockingWindowWrapp
Color startCol, endCol;
startCol = pThis->GetSettings().GetStyleSettings().GetFaceGradientColor();
endCol = pThis->GetSettings().GetStyleSettings().GetFaceColor();
- if( endCol.IsDark() )
+ if( pThis->GetSettings().GetStyleSettings().GetHighContrastMode() )
// no 'extreme' gradient when high contrast
startCol = endCol;
@@ -1901,37 +1901,78 @@ BOOL ToolBox::ImplCalcItem()
nDefWidth = GetDefaultImageSize().Width();
nDefHeight = GetDefaultImageSize().Height();
+ mnWinHeight = 0;
// determine minimum size necessary in NWF
- if( IsNativeControlSupported( CTRL_TOOLBAR, PART_BUTTON ) )
{
Rectangle aRect( Point( 0, 0 ), Size( nMinWidth, nMinHeight ) );
- Region aArrowReg = aRect;
+ Region aReg = aRect;
ImplControlValue aVal;
Region aNativeBounds, aNativeContent;
- if( GetNativeControlRegion( CTRL_TOOLBAR, PART_BUTTON,
- aArrowReg,
+ if( IsNativeControlSupported( CTRL_TOOLBAR, PART_BUTTON ) )
+ {
+ if( GetNativeControlRegion( CTRL_TOOLBAR, PART_BUTTON,
+ aReg,
+ CTRL_STATE_ENABLED | CTRL_STATE_ROLLOVER,
+ aVal, OUString(),
+ aNativeBounds, aNativeContent ) )
+ {
+ aRect = aNativeBounds.GetBoundRect();
+ if( aRect.GetWidth() > nMinWidth )
+ nMinWidth = aRect.GetWidth();
+ if( aRect.GetHeight() > nMinHeight )
+ nMinHeight = aRect.GetHeight();
+ if( nDropDownArrowWidth < nMinWidth )
+ nDropDownArrowWidth = nMinWidth;
+ if( nMinWidth > mpData->mnMenuButtonWidth )
+ mpData->mnMenuButtonWidth = nMinWidth;
+ else if( nMinWidth < TB_MENUBUTTON_SIZE )
+ mpData->mnMenuButtonWidth = TB_MENUBUTTON_SIZE;
+ }
+ }
+
+ // also calculate the area for comboboxes, drop down list boxes and spinfields
+ // as these are often inserted into toolboxes; set mnWinHeight to the
+ // greater of those values to prevent toolbar flickering (#i103385#)
+ aRect = Rectangle( Point( 0, 0 ), Size( nMinWidth, nMinHeight ) );
+ aReg = aRect;
+ if( GetNativeControlRegion( CTRL_COMBOBOX, PART_ENTIRE_CONTROL,
+ aReg,
+ CTRL_STATE_ENABLED | CTRL_STATE_ROLLOVER,
+ aVal, OUString(),
+ aNativeBounds, aNativeContent ) )
+ {
+ aRect = aNativeBounds.GetBoundRect();
+ if( aRect.GetHeight() > mnWinHeight )
+ mnWinHeight = aRect.GetHeight();
+ }
+ aRect = Rectangle( Point( 0, 0 ), Size( nMinWidth, nMinHeight ) );
+ aReg = aRect;
+ if( GetNativeControlRegion( CTRL_LISTBOX, PART_ENTIRE_CONTROL,
+ aReg,
CTRL_STATE_ENABLED | CTRL_STATE_ROLLOVER,
aVal, OUString(),
aNativeBounds, aNativeContent ) )
{
aRect = aNativeBounds.GetBoundRect();
- if( aRect.GetWidth() > nMinWidth )
- nMinWidth = aRect.GetWidth();
- if( aRect.GetHeight() > nMinHeight )
- nMinHeight = aRect.GetHeight();
- if( nDropDownArrowWidth < nMinWidth )
- nDropDownArrowWidth = nMinWidth;
- if( nMinWidth > mpData->mnMenuButtonWidth )
- mpData->mnMenuButtonWidth = nMinWidth;
- else if( nMinWidth < TB_MENUBUTTON_SIZE )
- mpData->mnMenuButtonWidth = TB_MENUBUTTON_SIZE;
+ if( aRect.GetHeight() > mnWinHeight )
+ mnWinHeight = aRect.GetHeight();
+ }
+ aRect = Rectangle( Point( 0, 0 ), Size( nMinWidth, nMinHeight ) );
+ aReg = aRect;
+ if( GetNativeControlRegion( CTRL_SPINBOX, PART_ENTIRE_CONTROL,
+ aReg,
+ CTRL_STATE_ENABLED | CTRL_STATE_ROLLOVER,
+ aVal, OUString(),
+ aNativeBounds, aNativeContent ) )
+ {
+ aRect = aNativeBounds.GetBoundRect();
+ if( aRect.GetHeight() > mnWinHeight )
+ mnWinHeight = aRect.GetHeight();
}
}
if ( ! mpData->m_aItems.empty() )
{
- mnWinHeight = 0;
-
std::vector< ImplToolItem >::iterator it = mpData->m_aItems.begin();
while ( it != mpData->m_aItems.end() )
{
diff --git a/vcl/source/window/toolbox2.cxx b/vcl/source/window/toolbox2.cxx
index 7fa8f76e1586..9ec86fab20de 100644
--- a/vcl/source/window/toolbox2.cxx
+++ b/vcl/source/window/toolbox2.cxx
@@ -2413,10 +2413,10 @@ void ToolBox::ImplUpdateImageList()
{
if (mpData->mpImageListProvider != NULL)
{
- BOOL bIsDark = GetSettings().GetStyleSettings().GetFaceColor().IsDark();
+ BOOL bHC = GetSettings().GetStyleSettings().GetHighContrastMode();
try
{
- ImageListType eType = bIsDark ? vcl::HIGHCONTRAST_YES : vcl::HIGHCONTRAST_NO;
+ ImageListType eType = bHC ? vcl::HIGHCONTRAST_YES : vcl::HIGHCONTRAST_NO;
if (eType != mpData->meImageListType)
{
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 1f20f65f4ec5..b6e071766412 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -292,6 +292,13 @@ bool Window::ImplCheckUIFont( const Font& rFont )
void Window::ImplUpdateGlobalSettings( AllSettings& rSettings, BOOL bCallHdl )
{
+ // reset high contrast to false, so the system can either update it
+ // or AutoDetectSystemHC can kick in (see below)
+ StyleSettings aTmpSt( rSettings.GetStyleSettings() );
+ aTmpSt.SetHighContrastMode( FALSE );
+ rSettings.SetStyleSettings( aTmpSt );
+ ImplGetFrame()->UpdateSettings( rSettings );
+
// Verify availability of the configured UI font, otherwise choose "Andale Sans UI"
String aUserInterfaceFont;
bool bUseSystemFont = rSettings.GetStyleSettings().GetUseSystemUIFonts();
@@ -472,7 +479,8 @@ void Window::ImplUpdateGlobalSettings( AllSettings& rSettings, BOOL bCallHdl )
rSettings.SetStyleSettings( aStyleSettings );
- // #104427# auto detect HC mode ?
+ // auto detect HC mode; if the system already set it to "yes"
+ // (see above) then accept that
if( !rSettings.GetStyleSettings().GetHighContrastMode() )
{
sal_Bool bTmp = sal_False, bAutoHCMode = sal_True;
@@ -729,7 +737,7 @@ void Window::ImplInit( Window* pParent, WinBits nStyle, SystemParentData* pSyste
nBorderTypeStyle |= BORDERWINDOW_STYLE_FRAME;
nStyle |= WB_BORDER;
}
- ImplBorderWindow* pBorderWin = new ImplBorderWindow( pParent, nStyle & (WB_BORDER | WB_DIALOGCONTROL | WB_NODIALOGCONTROL), nBorderTypeStyle );
+ ImplBorderWindow* pBorderWin = new ImplBorderWindow( pParent, nStyle & (WB_BORDER | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_NEEDSFOCUS), nBorderTypeStyle );
((Window*)pBorderWin)->mpWindowImpl->mpClientWindow = this;
pBorderWin->GetBorder( mpWindowImpl->mnLeftBorder, mpWindowImpl->mnTopBorder, mpWindowImpl->mnRightBorder, mpWindowImpl->mnBottomBorder );
mpWindowImpl->mpBorderWindow = pBorderWin;
@@ -784,6 +792,8 @@ void Window::ImplInit( Window* pParent, WinBits nStyle, SystemParentData* pSyste
nFrameStyle = SAL_FRAME_STYLE_FLOAT;
if( nStyle & WB_OWNERDRAWDECORATION )
nFrameStyle |= (SAL_FRAME_STYLE_OWNERDRAWDECORATION | SAL_FRAME_STYLE_NOSHADOW);
+ if( nStyle & WB_NEEDSFOCUS )
+ nFrameStyle |= SAL_FRAME_STYLE_FLOAT_FOCUSABLE;
}
else if( mpWindowImpl->mbFloatWin )
nFrameStyle |= SAL_FRAME_STYLE_TOOLWINDOW;
@@ -924,7 +934,7 @@ void Window::ImplInit( Window* pParent, WinBits nStyle, SystemParentData* pSyste
! (nStyle & (WB_INTROWIN|WB_DEFAULTWIN))
)
{
- mpWindowImpl->mpFrame->UpdateSettings( *pSVData->maAppData.mpSettings );
+ // side effect: ImplUpdateGlobalSettings does an ImplGetFrame()->UpdateSettings
ImplUpdateGlobalSettings( *pSVData->maAppData.mpSettings );
OutputDevice::SetSettings( *pSVData->maAppData.mpSettings );
pSVData->maAppData.mbSettingsInit = TRUE;
diff --git a/vcl/unx/gtk/a11y/atklistener.cxx b/vcl/unx/gtk/a11y/atklistener.cxx
index c3b2859f7c3f..f083e7cc584e 100644
--- a/vcl/unx/gtk/a11y/atklistener.cxx
+++ b/vcl/unx/gtk/a11y/atklistener.cxx
@@ -360,6 +360,32 @@ void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEven
break;
}
+ // --> OD 2009-05-26 #i92103#
+ case accessibility::AccessibleEventId::LISTBOX_ENTRY_EXPANDED:
+ {
+ AtkObject *pChild = getObjFromAny( aEvent.NewValue );
+ if( pChild )
+ {
+ AtkStateType eExpandedState = ATK_STATE_EXPANDED;
+ atk_object_notify_state_change( pChild, eExpandedState, true );
+ g_object_unref( pChild );
+ }
+ break;
+ }
+
+ case accessibility::AccessibleEventId::LISTBOX_ENTRY_COLLAPSED:
+ {
+ AtkObject *pChild = getObjFromAny( aEvent.NewValue );
+ if( pChild )
+ {
+ AtkStateType eExpandedState = ATK_STATE_EXPANDED;
+ atk_object_notify_state_change( pChild, eExpandedState, false );
+ g_object_unref( pChild );
+ }
+ break;
+ }
+ // <--
+
// AtkAction signals ...
case accessibility::AccessibleEventId::ACTION_CHANGED:
g_signal_emit_by_name( G_OBJECT( atk_obj ), "property_change::accessible-actions");
diff --git a/vcl/unx/gtk/a11y/atktext.cxx b/vcl/unx/gtk/a11y/atktext.cxx
index 1c839ed58839..8d83ca008e4a 100644
--- a/vcl/unx/gtk/a11y/atktext.cxx
+++ b/vcl/unx/gtk/a11y/atktext.cxx
@@ -33,12 +33,15 @@
#include "atkwrapper.hxx"
#include "atktextattributes.hxx"
+#include <algorithm>
#include <com/sun/star/accessibility/AccessibleTextType.hpp>
#include <com/sun/star/accessibility/TextSegment.hpp>
#include <com/sun/star/accessibility/XAccessibleMultiLineText.hpp>
#include <com/sun/star/accessibility/XAccessibleText.hpp>
#include <com/sun/star/accessibility/XAccessibleTextAttributes.hpp>
+#include <com/sun/star/accessibility/XAccessibleTextMarkup.hpp>
+#include <com/sun/star/text/TextMarkupType.hpp>
// #define ENABLE_TRACING
@@ -175,6 +178,27 @@ static accessibility::XAccessibleText*
/*****************************************************************************/
+static accessibility::XAccessibleTextMarkup*
+ getTextMarkup( AtkText *pText ) throw (uno::RuntimeException)
+{
+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
+ if( pWrap )
+ {
+ if( !pWrap->mpTextMarkup && pWrap->mpContext )
+ {
+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleTextMarkup::static_type(NULL) );
+ pWrap->mpTextMarkup = reinterpret_cast< accessibility::XAccessibleTextMarkup * > (any.pReserved);
+ pWrap->mpTextMarkup->acquire();
+ }
+
+ return pWrap->mpTextMarkup;
+ }
+
+ return NULL;
+}
+
+/*****************************************************************************/
+
static accessibility::XAccessibleTextAttributes*
getTextAttributes( AtkText *pText ) throw (uno::RuntimeException)
{
@@ -434,6 +458,8 @@ text_wrapper_get_run_attributes( AtkText *text,
AtkAttributeSet *pSet = NULL;
try {
+ bool bOffsetsAreValid = false;
+
accessibility::XAccessibleText* pText = getText( text );
accessibility::XAccessibleTextAttributes* pTextAttributes = getTextAttributes( text );
if( pText && pTextAttributes )
@@ -442,17 +468,61 @@ text_wrapper_get_run_attributes( AtkText *text,
pTextAttributes->getRunAttributes( offset, uno::Sequence< rtl::OUString > () );
pSet = attribute_set_new_from_property_values( aAttributeList, true, text );
- if( pSet )
+ // --> OD 2009-06-22 #i100938#
+ // - always provide start_offset and end_offset
+// if( pSet )
+ // <--
{
accessibility::TextSegment aTextSegment =
pText->getTextAtIndex(offset, accessibility::AccessibleTextType::ATTRIBUTE_RUN);
*start_offset = aTextSegment.SegmentStart;
- *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME
+ // --> OD 2009-06-22 #i100938#
+ // Do _not_ increment the end_offset provide by <accessibility::TextSegment> instance
+// *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME
+ *end_offset = aTextSegment.SegmentEnd;
+ // <--
+ bOffsetsAreValid = true;
+ }
+ }
+
+ // Special handling for missspelled
+ accessibility::XAccessibleTextMarkup* pTextMarkup = getTextMarkup( text );
+ if( pTextMarkup )
+ {
+ uno::Sequence< accessibility::TextSegment > aTextSegmentSeq =
+ pTextMarkup->getTextMarkupAtIndex( offset, com::sun::star::text::TextMarkupType::SPELLCHECK );
+ if( aTextSegmentSeq.getLength() > 0 )
+ {
+ accessibility::TextSegment aTextSegment = aTextSegmentSeq[0];
+ gint nStartOffsetMisspelled = aTextSegment.SegmentStart;
+ gint nEndOffsetMisspelled = aTextSegment.SegmentEnd;
+
+ // Get attribute run here if it hasn't been done before
+ if( !bOffsetsAreValid )
+ {
+ accessibility::TextSegment aAttributeTextSegment =
+ pText->getTextAtIndex(offset, accessibility::AccessibleTextType::ATTRIBUTE_RUN);
+ *start_offset = aAttributeTextSegment.SegmentStart;
+ *end_offset = aAttributeTextSegment.SegmentEnd;
+ }
+
+ if( nEndOffsetMisspelled <= offset )
+ *start_offset = ::std::max( *start_offset, nEndOffsetMisspelled );
+ else if( nStartOffsetMisspelled <= offset )
+ *start_offset = ::std::max( *start_offset, nStartOffsetMisspelled );
+
+ if( nStartOffsetMisspelled > offset )
+ *end_offset = ::std::min( *end_offset, nStartOffsetMisspelled );
+ else if( nEndOffsetMisspelled > offset )
+ *end_offset = ::std::min( *end_offset, nEndOffsetMisspelled );
+
+ if( nStartOffsetMisspelled <= offset && nEndOffsetMisspelled > offset )
+ pSet = attribute_set_prepend_misspelled( pSet );
}
}
}
- catch(const uno::Exception& e) {
+ catch(const uno::Exception& e){
g_warning( "Exception in get_run_attributes()" );
diff --git a/vcl/unx/gtk/a11y/atktextattributes.cxx b/vcl/unx/gtk/a11y/atktextattributes.cxx
index f6b1eccc882a..58dd5f200bbd 100644
--- a/vcl/unx/gtk/a11y/atktextattributes.cxx
+++ b/vcl/unx/gtk/a11y/atktextattributes.cxx
@@ -76,6 +76,7 @@ static AtkTextAttribute atk_text_attribute_tab_interval = ATK_TEXT_ATTR_INVALID;
static AtkTextAttribute atk_text_attribute_tab_stops = ATK_TEXT_ATTR_INVALID;
static AtkTextAttribute atk_text_attribute_writing_mode = ATK_TEXT_ATTR_INVALID;
static AtkTextAttribute atk_text_attribute_vertical_align = ATK_TEXT_ATTR_INVALID;
+static AtkTextAttribute atk_text_attribute_misspelled = ATK_TEXT_ATTR_INVALID;
/*****************************************************************************/
@@ -1299,6 +1300,18 @@ attribute_set_new_from_property_values(
}
+AtkAttributeSet* attribute_set_prepend_misspelled( AtkAttributeSet* attribute_set )
+{
+ if( ATK_TEXT_ATTR_INVALID == atk_text_attribute_misspelled )
+ atk_text_attribute_misspelled = atk_text_attribute_register( "text-spelling" );
+
+ attribute_set = attribute_set_prepend( attribute_set, atk_text_attribute_misspelled,
+ g_strdup_printf( "misspelled" ) );
+
+ return attribute_set;
+}
+
+
/*****************************************************************************/
struct AtkTextAttrMapping
diff --git a/vcl/unx/gtk/a11y/atktextattributes.hxx b/vcl/unx/gtk/a11y/atktextattributes.hxx
index 909f09eb1522..ca67fd946a20 100644
--- a/vcl/unx/gtk/a11y/atktextattributes.hxx
+++ b/vcl/unx/gtk/a11y/atktextattributes.hxx
@@ -47,5 +47,6 @@ attribute_set_map_to_property_values(
AtkAttributeSet* attribute_set,
com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rValueList );
+AtkAttributeSet* attribute_set_prepend_misspelled( AtkAttributeSet* attribute_set );
#endif
diff --git a/vcl/unx/gtk/a11y/atkutil.cxx b/vcl/unx/gtk/a11y/atkutil.cxx
index 91f4b3280448..5206c8ce87ca 100644
--- a/vcl/unx/gtk/a11y/atkutil.cxx
+++ b/vcl/unx/gtk/a11y/atkutil.cxx
@@ -36,6 +36,9 @@
#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
+// --> OD 2009-04-14 #i93269#
+#include <com/sun/star/accessibility/XAccessibleText.hpp>
+// <--
#include <cppuhelper/implbase1.hxx>
#include <vos/mutex.hxx>
#include <rtl/ref.hxx>
@@ -86,6 +89,34 @@ atk_wrapper_focus_idle_handler (gpointer data)
fprintf(stderr, "notifying focus event for %p\n", atk_obj);
#endif
atk_focus_tracker_notify(atk_obj);
+ // --> OD 2009-04-14 #i93269#
+ // emit text_caret_moved event for <XAccessibleText> object,
+ // if cursor is inside the <XAccessibleText> object.
+ // also emit state-changed:focused event under the same condition.
+ {
+ AtkObjectWrapper* wrapper_obj = ATK_OBJECT_WRAPPER (atk_obj);
+ if( !wrapper_obj->mpText && wrapper_obj->mpContext )
+ {
+ uno::Any any = wrapper_obj->mpContext->queryInterface( accessibility::XAccessibleText::static_type(NULL) );
+ if ( typelib_TypeClass_INTERFACE == any.pType->eTypeClass &&
+ any.pReserved != 0 )
+ {
+ wrapper_obj->mpText = reinterpret_cast< accessibility::XAccessibleText * > (any.pReserved);
+ if ( wrapper_obj->mpText != 0 )
+ {
+ wrapper_obj->mpText->acquire();
+ gint caretPos = wrapper_obj->mpText->getCaretPosition();
+
+ if ( caretPos != -1 )
+ {
+ atk_object_notify_state_change( atk_obj, ATK_STATE_FOCUSED, TRUE );
+ g_signal_emit_by_name( atk_obj, "text_caret_moved", caretPos );
+ }
+ }
+ }
+ }
+ }
+ // <--
g_object_unref(atk_obj);
}
}
diff --git a/vcl/unx/gtk/a11y/atkwrapper.cxx b/vcl/unx/gtk/a11y/atkwrapper.cxx
index 927b8548a77a..8854083e1509 100644
--- a/vcl/unx/gtk/a11y/atkwrapper.cxx
+++ b/vcl/unx/gtk/a11y/atkwrapper.cxx
@@ -40,6 +40,7 @@
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
#include <com/sun/star/accessibility/XAccessible.hpp>
#include <com/sun/star/accessibility/XAccessibleText.hpp>
+#include <com/sun/star/accessibility/XAccessibleTextMarkup.hpp>
#include <com/sun/star/accessibility/XAccessibleTextAttributes.hpp>
#include <com/sun/star/accessibility/XAccessibleValue.hpp>
#include <com/sun/star/accessibility/XAccessibleAction.hpp>
@@ -893,6 +894,7 @@ void atk_object_wrapper_dispose(AtkObjectWrapper* wrapper)
RELEASE( wrapper->mpMultiLineText )
RELEASE( wrapper->mpTable )
RELEASE( wrapper->mpText )
+ RELEASE( wrapper->mpTextMarkup )
RELEASE( wrapper->mpTextAttributes )
RELEASE( wrapper->mpValue )
}
diff --git a/vcl/unx/gtk/a11y/atkwrapper.hxx b/vcl/unx/gtk/a11y/atkwrapper.hxx
index 1003d0d25cc7..95cf30096e7b 100644
--- a/vcl/unx/gtk/a11y/atkwrapper.hxx
+++ b/vcl/unx/gtk/a11y/atkwrapper.hxx
@@ -49,6 +49,7 @@ namespace com { namespace sun { namespace star { namespace accessibility {
class XAccessibleSelection;
class XAccessibleTable;
class XAccessibleText;
+ class XAccessibleTextMarkup;
class XAccessibleTextAttributes;
class XAccessibleValue;
} } } }
@@ -69,6 +70,7 @@ struct _AtkObjectWrapper
::com::sun::star::accessibility::XAccessibleSelection *mpSelection;
::com::sun::star::accessibility::XAccessibleTable *mpTable;
::com::sun::star::accessibility::XAccessibleText *mpText;
+ ::com::sun::star::accessibility::XAccessibleTextMarkup *mpTextMarkup;
::com::sun::star::accessibility::XAccessibleTextAttributes *mpTextAttributes;
::com::sun::star::accessibility::XAccessibleValue *mpValue;
diff --git a/vcl/unx/gtk/app/gtkinst.cxx b/vcl/unx/gtk/app/gtkinst.cxx
index 73b4432342bf..af3a1df97a8c 100644
--- a/vcl/unx/gtk/app/gtkinst.cxx
+++ b/vcl/unx/gtk/app/gtkinst.cxx
@@ -134,6 +134,16 @@ extern "C"
VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule pModule )
{
+ /* #i92121# workaround deadlocks in the X11 implementation
+ */
+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
+ /* #i90094#
+ from now on we know that an X connection will be
+ established, so protect X against itself
+ */
+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
+ XInitThreads();
+
#if OSL_DEBUG_LEVEL > 1
int nFd = open( "/home/pl93762/log.txt", O_CREAT | O_TRUNC | O_WRONLY, 0755 );
dup2( nFd, STDERR_FILENO );
@@ -206,6 +216,34 @@ SalObject* GtkInstance::CreateObject( SalFrame* pParent, SystemWindowData* pWind
return new GtkSalObject( static_cast<GtkSalFrame*>(pParent), bShow );
}
+extern "C"
+{
+ typedef void*(* getDefaultFnc)();
+ typedef void(* addItemFnc)(void *, const char *);
+}
+
+void GtkInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType)
+{
+#if GTK_CHECK_VERSION(2,10,0)
+ GtkRecentManager *manager = gtk_recent_manager_get_default ();
+ gtk_recent_manager_add_item (manager, rtl::OUStringToOString(rFileUrl, RTL_TEXTENCODING_UTF8).getStr());
+ (void)rMimeType;
+#else
+ static getDefaultFnc sym_gtk_recent_manager_get_default =
+ (getDefaultFnc)osl_getAsciiFunctionSymbol( GetSalData()->m_pPlugin, "gtk_recent_manager_get_default" );
+
+ static addItemFnc sym_gtk_recent_manager_add_item =
+ (addItemFnc)osl_getAsciiFunctionSymbol( GetSalData()->m_pPlugin, "gtk_recent_manager_add_item");
+ if (sym_gtk_recent_manager_get_default && sym_gtk_recent_manager_add_item)
+ {
+ sym_gtk_recent_manager_add_item(sym_gtk_recent_manager_get_default(),
+ rtl::OUStringToOString(rFileUrl, RTL_TEXTENCODING_UTF8).getStr());
+ }
+ else
+ X11SalInstance::AddToRecentDocumentList(rFileUrl, rMimeType);
+#endif
+}
+
GtkYieldMutex::GtkYieldMutex()
{
}
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index fd9000afffa5..654f39c51a92 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -3304,12 +3304,38 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
aBackColor = getColor( pMenubarStyle->bg[GTK_STATE_NORMAL] );
aStyleSet.SetMenuBarColor( aBackColor );
aBackColor = getColor( pMenuStyle->bg[GTK_STATE_NORMAL] );
- aTextColor = getColor( pMenuTextStyle->fg[GTK_STATE_NORMAL] );
- if( aBackColor == aTextColor )
- aTextColor = (aBackColor.GetLuminance() < 128) ? Color( COL_WHITE ) : Color( COL_BLACK );
+ aTextColor = getColor( pMenuTextStyle->text[GTK_STATE_NORMAL] );
aStyleSet.SetMenuColor( aBackColor );
aStyleSet.SetMenuTextColor( aTextColor );
+ aTextColor = getColor( pMenubarStyle->text[GTK_STATE_NORMAL] );
+ aStyleSet.SetMenuBarTextColor( aTextColor );
+
+#if OSL_DEBUG_LEVEL > 1
+ std::fprintf( stderr, "==\n" );
+ std::fprintf( stderr, "MenuColor = %x (%d)\n", (int)aStyleSet.GetMenuColor().GetColor(), aStyleSet.GetMenuColor().GetLuminance() );
+ std::fprintf( stderr, "MenuTextColor = %x (%d)\n", (int)aStyleSet.GetMenuTextColor().GetColor(), aStyleSet.GetMenuTextColor().GetLuminance() );
+ std::fprintf( stderr, "MenuBarColor = %x (%d)\n", (int)aStyleSet.GetMenuBarColor().GetColor(), aStyleSet.GetMenuBarColor().GetLuminance() );
+ std::fprintf( stderr, "MenuBarTextColor = %x (%d)\n", (int)aStyleSet.GetMenuBarTextColor().GetColor(), aStyleSet.GetMenuBarTextColor().GetLuminance() );
+ std::fprintf( stderr, "LightColor = %x (%d)\n", (int)aStyleSet.GetLightColor().GetColor(), aStyleSet.GetLightColor().GetLuminance() );
+ std::fprintf( stderr, "ShadowColor = %x (%d)\n", (int)aStyleSet.GetShadowColor().GetColor(), aStyleSet.GetShadowColor().GetLuminance() );
+#endif
+
+ // Awful hack for menu separators in the Sonar and similar themes.
+ // If the menu color is not too dark, and the menu text color is lighter,
+ // make the "light" color lighter than the menu color and the "shadow"
+ // color darker than it.
+ if ( aStyleSet.GetMenuColor().GetLuminance() >= 32 &&
+ aStyleSet.GetMenuColor().GetLuminance() <= aStyleSet.GetMenuTextColor().GetLuminance() )
+ {
+ Color temp = aStyleSet.GetMenuColor();
+ temp.IncreaseLuminance( 8 );
+ aStyleSet.SetLightColor( temp );
+ temp = aStyleSet.GetMenuColor();
+ temp.DecreaseLuminance( 16 );
+ aStyleSet.SetShadowColor( temp );
+ }
+
aHighlightColor = getColor( pMenuItemStyle->bg[ GTK_STATE_SELECTED ] );
aHighlightTextColor = getColor( pMenuTextStyle->fg[ GTK_STATE_PRELIGHT ] );
if( aHighlightColor == aHighlightTextColor )
@@ -3452,13 +3478,6 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
// FIXME: need some way of fetching toolbar icon size.
// aStyleSet.SetToolbarIconSize( STYLE_TOOLBAR_ICONSIZE_SMALL );
- /* #i35482# do not override HC mode per force
- // #i59364# high contrast mode
- bool bHC = ( aStyleSet.GetFaceColor().IsDark() ||
- aStyleSet.GetWindowColor().IsDark() );
- aStyleSet.SetHighContrastMode( bHC );
- */
-
// finally update the collected settings
rSettings.SetStyleSettings( aStyleSet );
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index b6770ca1a77e..8963ac2e3643 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -1123,7 +1123,7 @@ void GtkSalFrame::SetIcon( USHORT nIcon )
USHORT nIndex;
// Use high contrast icons where appropriate
- if( Application::GetSettings().GetStyleSettings().GetFaceColor().IsDark() )
+ if( Application::GetSettings().GetStyleSettings().GetHighContrastMode() )
{
nOffsets[0] = SV_ICON_LARGE_HC_START;
nOffsets[1] = SV_ICON_SMALL_HC_START;
@@ -1506,7 +1506,7 @@ void GtkSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight, USHOR
if( isChild( false, true ) )
gtk_widget_set_size_request( m_pWindow, nWidth, nHeight );
- else
+ else if( ! ( m_nState & GDK_WINDOW_STATE_MAXIMIZED ) )
gtk_window_resize( GTK_WINDOW(m_pWindow), nWidth, nHeight );
setMinMaxSize();
}
@@ -1608,6 +1608,7 @@ void GtkSalFrame::SetWindowState( const SalFrameState* pState )
SAL_FRAMESTATE_MASK_MAXIMIZED_WIDTH | SAL_FRAMESTATE_MASK_MAXIMIZED_HEIGHT;
if( (pState->mnMask & SAL_FRAMESTATE_MASK_STATE) &&
+ ! ( m_nState & GDK_WINDOW_STATE_MAXIMIZED ) &&
(pState->mnState & SAL_FRAMESTATE_MAXIMIZED) &&
(pState->mnMask & nMaxGeometryMask) == nMaxGeometryMask )
{
diff --git a/vcl/unx/headless/svpinst.cxx b/vcl/unx/headless/svpinst.cxx
index 87d0e4662f29..7b93e59b6acd 100644
--- a/vcl/unx/headless/svpinst.cxx
+++ b/vcl/unx/headless/svpinst.cxx
@@ -504,6 +504,10 @@ void SvpSalInstance::StartTimer( ULONG nMS )
}
}
+void SvpSalInstance::AddToRecentDocumentList(const rtl::OUString&, const rtl::OUString&)
+{
+}
+
SvpSalTimer::~SvpSalTimer()
{
}
diff --git a/vcl/unx/headless/svpinst.hxx b/vcl/unx/headless/svpinst.hxx
index 71c463f071a9..e77debb53f1d 100644
--- a/vcl/unx/headless/svpinst.hxx
+++ b/vcl/unx/headless/svpinst.hxx
@@ -193,6 +193,8 @@ public:
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
+
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
};
#endif // _SV_SALINST_HXX
diff --git a/vcl/unx/headless/svpprn.cxx b/vcl/unx/headless/svpprn.cxx
index 94d857e230b8..75d86959b2b5 100644
--- a/vcl/unx/headless/svpprn.cxx
+++ b/vcl/unx/headless/svpprn.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: svpprn.cxx,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,6 +25,9 @@
*
************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
#include "vcl/svapp.hxx"
#include "vcl/jobset.h"
#include "vcl/print.h"
diff --git a/vcl/unx/headless/svppspgraphics.cxx b/vcl/unx/headless/svppspgraphics.cxx
index eb342a130d85..3e9d67bcbbe9 100644
--- a/vcl/unx/headless/svppspgraphics.cxx
+++ b/vcl/unx/headless/svppspgraphics.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: svppspgraphics.cxx,v $
- * $Revision: 1.9 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,6 +25,9 @@
*
************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
#include "svppspgraphics.hxx"
#include "svpbmp.hxx"
@@ -39,6 +39,7 @@
#include "vcl/glyphcache.hxx"
#include "vcl/impfont.hxx"
#include "vcl/outfont.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/svapp.hxx"
#include "vcl/salprn.hxx"
#include "vcl/sysdata.hxx"
@@ -685,16 +686,13 @@ void PspGraphics::DrawServerFontLayout( const ServerFontLayout& rLayout )
ImplFontCharMap* PspGraphics::GetImplFontCharMap() const
{
// TODO: get ImplFontCharMap directly from fonts
- int nPairCount = 0;
- if( m_pServerFont[0] )
- nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL );
- if( !nPairCount )
+ if( !m_pServerFont[0] )
return NULL;
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- if( m_pServerFont[0] )
- m_pServerFont[0]->GetFontCodeRanges( pCodePairs );
- return new ImplFontCharMap( nPairCount, pCodePairs );
+ CmapResult aCmapResult;
+ if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
USHORT PspGraphics::SetFont( ImplFontSelectData *pEntry, int nFallbackLevel )
@@ -906,7 +904,7 @@ BOOL PspGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
@@ -916,7 +914,16 @@ BOOL PspGraphics::CreateFontSubset(
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
//--------------------------------------------------------------------------
@@ -970,50 +977,6 @@ void PspGraphics::GetGlyphWidths( const ImplFontData* pFont,
// static helpers of PspGraphics
-bool PspGraphics::DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo )
-{
- psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- psp::PrintFontInfo aFontInfo;
-
- if( ! rMgr.getFontInfo( aFont, aFontInfo ) )
- return false;
-
- // fill in font info
- switch( aFontInfo.m_eType )
- {
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
- default:
- return false;
- }
- rInfo.m_nAscent = aFontInfo.m_nAscend;
- rInfo.m_nDescent = aFontInfo.m_nDescend;
- rInfo.m_aPSName = rMgr.getPSName( aFont );
-
- int xMin, yMin, xMax, yMax;
- rMgr.getFontBoundingBox( aFont, xMin, yMin, xMax, yMax );
-
- if( ! rMgr.createFontSubset( aFont,
- rToFile,
- pGlyphIDs,
- pEncoding,
- pWidths,
- nGlyphs
- ) )
- return false;
-
- rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) );
- rInfo.m_nCapHeight = yMax; // Well ...
-
- return true;
-}
-
const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen )
{
psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
@@ -1025,8 +988,8 @@ const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnico
// fill in font info
switch( aFontInfo.m_eType )
{
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
+ case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break;
+ case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break;
default:
return NULL;
}
diff --git a/vcl/unx/headless/svppspgraphics.hxx b/vcl/unx/headless/svppspgraphics.hxx
index 81e4a29b8d55..7e5ff051f27b 100644
--- a/vcl/unx/headless/svppspgraphics.hxx
+++ b/vcl/unx/headless/svppspgraphics.hxx
@@ -72,13 +72,6 @@ public:
virtual ~PspGraphics();
// helper methods for sharing with X11SalGraphics
- static bool DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo );
static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen );
static void DoFreeEmbedFontData( const void* pData, long nLen );
static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded );
diff --git a/vcl/unx/headless/svptext.cxx b/vcl/unx/headless/svptext.cxx
index dc96aaaa8160..eac9e46c2348 100644
--- a/vcl/unx/headless/svptext.cxx
+++ b/vcl/unx/headless/svptext.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: svptext.cxx,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -274,20 +271,13 @@ ULONG SvpSalGraphics::GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs )
ImplFontCharMap* SvpSalGraphics::GetImplFontCharMap() const
{
- ImplFontCharMap* pMap = NULL;
-
- int nPairCount = 0;
- if( m_pServerFont[0] )
- nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL );
+ if( !m_pServerFont[0] )
+ return NULL;
- if( nPairCount > 0 )
- {
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- m_pServerFont[0]->GetFontCodeRanges( pCodePairs );
- pMap = new ImplFontCharMap( nPairCount, pCodePairs );
- }
-
- return pMap;
+ CmapResult aCmapResult;
+ if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
// ---------------------------------------------------------------------------
@@ -354,7 +344,7 @@ BOOL SvpSalGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
@@ -364,7 +354,16 @@ BOOL SvpSalGraphics::CreateFontSubset(
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
// ---------------------------------------------------------------------------
diff --git a/vcl/unx/inc/plugins/gtk/gtkinst.hxx b/vcl/unx/inc/plugins/gtk/gtkinst.hxx
index 22c50f627e0c..16dce4688ede 100644
--- a/vcl/unx/inc/plugins/gtk/gtkinst.hxx
+++ b/vcl/unx/inc/plugins/gtk/gtkinst.hxx
@@ -91,6 +91,7 @@ public:
virtual SalFrame* CreateChildFrame( SystemParentData* pParent, ULONG nStyle );
virtual SalObject* CreateObject( SalFrame* pParent, SystemWindowData* pWindowData, BOOL bShow = TRUE );
virtual SalSystem* CreateSalSystem();
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
};
class GtkSalSystem : public X11SalSystem
diff --git a/vcl/unx/inc/pspgraphics.h b/vcl/unx/inc/pspgraphics.h
index 219cc5f0a8ff..0ccc13291714 100644
--- a/vcl/unx/inc/pspgraphics.h
+++ b/vcl/unx/inc/pspgraphics.h
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: pspgraphics.h,v $
- * $Revision: 1.21 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -68,13 +65,6 @@ public:
virtual ~PspGraphics();
// helper methods for sharing with X11SalGraphics
- static bool DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo );
static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen );
static void DoFreeEmbedFontData( const void* pData, long nLen );
static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded );
diff --git a/vcl/unx/inc/salgdi.h b/vcl/unx/inc/salgdi.h
index 16276cdeb5c9..f893b547e847 100644
--- a/vcl/unx/inc/salgdi.h
+++ b/vcl/unx/inc/salgdi.h
@@ -106,6 +106,8 @@ protected:
Pixel nTextPixel_;
BOOL bFontVertical_;
+ BOOL bDisableGraphite_;
+
GC pBrushGC_; // Brush attributes
SalColor nBrushColor_;
Pixel nBrushPixel_;
diff --git a/vcl/unx/inc/salinst.h b/vcl/unx/inc/salinst.h
index c0614a78af9b..399326c44f27 100644
--- a/vcl/unx/inc/salinst.h
+++ b/vcl/unx/inc/salinst.h
@@ -116,6 +116,13 @@ public:
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
void FillFontPathList( std::list< rtl::OString >& o_rFontPaths );
+ // dtrans implementation
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
+
bool isPrinterInit() const
{
diff --git a/vcl/unx/kde/kdedata.cxx b/vcl/unx/kde/kdedata.cxx
index f29ef1d4ff96..1b5a2f86dcee 100644
--- a/vcl/unx/kde/kdedata.cxx
+++ b/vcl/unx/kde/kdedata.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: kdedata.cxx,v $
- * $Revision: 1.21 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -235,6 +232,16 @@ void KDEData::Init()
extern "C" {
VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule )
{
+ /* #i92121# workaround deadlocks in the X11 implementation
+ */
+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
+ /* #i90094#
+ from now on we know that an X connection will be
+ established, so protect X against itself
+ */
+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
+ XInitThreads();
+
rtl::OString aVersion( qVersion() );
#if OSL_DEBUG_LEVEL > 1
fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() );
@@ -248,7 +255,7 @@ extern "C" {
if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) )
{
#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "unsuitable qt version %"SAL_PRIdINT32".%"SAL_PRIdINT32".%"SAL_PRIdINT32"\n", nMajor, nMinor, nMicro );
+ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro );
#endif
return NULL;
}
diff --git a/vcl/unx/kde/salnativewidgets-kde.cxx b/vcl/unx/kde/salnativewidgets-kde.cxx
index 24358022d6a1..8046d22d75d3 100644
--- a/vcl/unx/kde/salnativewidgets-kde.cxx
+++ b/vcl/unx/kde/salnativewidgets-kde.cxx
@@ -1996,6 +1996,7 @@ void KDESalFrame::UpdateSettings( AllSettings& rSettings )
}
aStyleSettings.SetMenuTextColor( aMenuFore );
+ aStyleSettings.SetMenuBarTextColor( aMenuFore );
aStyleSettings.SetMenuColor( aMenuBack );
aStyleSettings.SetMenuBarColor( aMenuBack );
@@ -2035,13 +2036,6 @@ void KDESalFrame::UpdateSettings( AllSettings& rSettings )
// Scroll bar size
aStyleSettings.SetScrollBarSize( kapp->style().pixelMetric( QStyle::PM_ScrollBarExtent ) );
- /* #i35482# do not override HC mode
- // #i59364# high contrast mode
- bool bHC = ( aStyleSettings.GetFaceColor().IsDark() ||
- aStyleSettings.GetWindowColor().IsDark() );
- aStyleSettings.SetHighContrastMode( bHC );
- */
-
rSettings.SetStyleSettings( aStyleSettings );
}
diff --git a/vcl/unx/kde4/KDEData.cxx b/vcl/unx/kde4/KDEData.cxx
index 07a10c60d933..91e3a758da3c 100644
--- a/vcl/unx/kde4/KDEData.cxx
+++ b/vcl/unx/kde4/KDEData.cxx
@@ -45,6 +45,8 @@ void KDEData::initNWF()
// draw toolbars on separate lines
pSVData->maNWFData.mbDockingAreaSeparateTB = true;
+ // no borders for menu, theming does that
+ pSVData->maNWFData.mbFlatMenu = true;
}
void KDEData::deInitNWF()
diff --git a/vcl/unx/kde4/KDESalFrame.cxx b/vcl/unx/kde4/KDESalFrame.cxx
index ad8f467ee960..796350a63d50 100644
--- a/vcl/unx/kde4/KDESalFrame.cxx
+++ b/vcl/unx/kde4/KDESalFrame.cxx
@@ -318,6 +318,7 @@ void KDESalFrame::UpdateSettings( AllSettings& rSettings )
aMenuBack = toColor( qMenuCG.color( QPalette::Button ) );
style.SetMenuTextColor( aMenuFore );
+ style.SetMenuBarTextColor( aMenuFore );
style.SetMenuColor( aMenuBack );
style.SetMenuBarColor( aMenuBack );
diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx
index ae917f252b11..2e8f0dcad96b 100644
--- a/vcl/unx/kde4/KDESalGraphics.cxx
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@ -35,6 +35,8 @@
#include <QStyle>
#include <QStyleOption>
#include <QPainter>
+#include <QFrame>
+#include <QLabel>
#include <kapplication.h>
@@ -42,10 +44,9 @@
#include "KDESalGraphics.hxx"
-#include <vcl/settings.hxx>
-#include <rtl/ustrbuf.hxx>
-
-#include <stdio.h>
+#include "vcl/settings.hxx"
+#include "vcl/decoview.hxx"
+#include "rtl/ustrbuf.hxx"
using namespace ::rtl;
@@ -150,6 +151,30 @@ BOOL KDESalGraphics::hitTestNativeControl( ControlType, ControlPart,
return FALSE;
}
+void lcl_drawFrame( QRect& i_rRect, QPainter& i_rPainter, QStyle::PrimitiveElement i_nElement,
+ ControlState i_nState, const ImplControlValue& i_rValue )
+{
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ QStyleOptionFrameV3 styleOption;
+ styleOption.frameShape = QFrame::StyledPanel;
+ #else
+ QStyleOptionFrame styleOption;
+ QFrame aFrame( NULL );
+ aFrame.setFrameRect( QRect(0, 0, i_rRect.width(), i_rRect.height()) );
+ aFrame.setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
+ aFrame.ensurePolished();
+ styleOption.initFrom( &aFrame );
+ styleOption.lineWidth = aFrame.lineWidth();
+ styleOption.midLineWidth = aFrame.midLineWidth();
+ #endif
+ styleOption.rect = QRect(0, 0, i_rRect.width(), i_rRect.height());
+ styleOption.state = vclStateValue2StateFlag( i_nState, i_rValue );
+ #if ( QT_VERSION < QT_VERSION_CHECK( 4, 5, 0 ) )
+ styleOption.state |= QStyle::State_Sunken;
+ #endif
+ kapp->style()->drawPrimitive(i_nElement, &styleOption, &i_rPainter);
+}
+
BOOL KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
const Region& rControlRegion, ControlState nControlState,
const ImplControlValue& value, SalControlHandle&,
@@ -352,18 +377,25 @@ BOOL KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
}
else if (type == CTRL_LISTBOX)
{
- QStyleOptionComboBox styleOption;
-
- styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
- styleOption.state = vclStateValue2StateFlag( nControlState, value );
-
- if (part == PART_SUB_EDIT)
+ if( part == PART_WINDOW )
{
- kapp->style()->drawControl(QStyle::CE_ComboBoxLabel, &styleOption, &painter);
+ lcl_drawFrame( widgetRect, painter, QStyle::PE_Frame, nControlState, value );
}
else
{
- kapp->style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, &painter);
+ QStyleOptionComboBox styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ if (part == PART_SUB_EDIT)
+ {
+ kapp->style()->drawControl(QStyle::CE_ComboBoxLabel, &styleOption, &painter);
+ }
+ else
+ {
+ kapp->style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, &painter);
+ }
}
}
else if (type == CTRL_LISTNODE)
@@ -481,33 +513,11 @@ BOOL KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
}
else if (type == CTRL_FRAME)
{
- #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
- QStyleOptionFrameV3 styleOption;
- #else
- QStyleOptionFrameV2 styleOption;
- #endif
- styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
- styleOption.state = vclStateValue2StateFlag( nControlState, value );
- #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
- styleOption.frameShape = QFrame::StyledPanel;
- #endif
-
- kapp->style()->drawPrimitive(QStyle::PE_FrameWindow, &styleOption, &painter);
+ lcl_drawFrame( widgetRect, painter, QStyle::PE_Frame, nControlState, value );
}
else if (type == CTRL_FIXEDBORDER)
{
- #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
- QStyleOptionFrameV3 styleOption;
- #else
- QStyleOptionFrameV2 styleOption;
- #endif
- styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
- styleOption.state = vclStateValue2StateFlag( nControlState, value );
- #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
- styleOption.frameShape = QFrame::StyledPanel;
- #endif
-
- kapp->style()->drawPrimitive(QStyle::PE_FrameWindow, &styleOption, &painter);
+ lcl_drawFrame( widgetRect, painter, QStyle::PE_FrameWindow, nControlState, value );
}
else if (type == CTRL_WINDOW_BACKGROUND)
{
@@ -573,14 +583,21 @@ BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
break;
case CTRL_EDITBOX:
{
- styleOption.rect = QRect(0, 0, contentRect.width(), contentRect.height());
- styleOption.state = vclStateValue2StateFlag(controlState, val);
-
- int size = kapp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) - 1;
-
- contentRect.adjust( -size, -size, size, size);
- boundingRect = contentRect;
-
+ int nFontHeight = kapp->fontMetrics().height();
+ //int nFrameSize = kapp->style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ int nLayoutTop = kapp->style()->pixelMetric(QStyle::PM_LayoutTopMargin);
+ int nLayoutBottom = kapp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin);
+ int nLayoutLeft = kapp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
+ int nLayoutRight = kapp->style()->pixelMetric(QStyle::PM_LayoutRightMargin);
+
+ int nMinHeight = (nFontHeight + nLayoutTop + nLayoutBottom);
+ if( boundingRect.height() < nMinHeight )
+ {
+ int delta = nMinHeight - boundingRect.height();
+ boundingRect.adjust( 0, 0, 0, delta );
+ }
+ contentRect = boundingRect;
+ contentRect.adjust( -nLayoutLeft+1, -nLayoutTop+1, nLayoutRight-1, nLayoutBottom-1 );
retVal = true;
break;
@@ -621,7 +638,6 @@ BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
case PART_ENTIRE_CONTROL:
{
int size = kapp->style()->pixelMetric(QStyle::PM_ComboBoxFrameWidth) - 2;
- contentRect.adjust(-size,-size,size,size);
// find out the minimum size that should be used
// assume contents is a text ling
@@ -632,6 +648,11 @@ BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
if( aMinSize.height() > contentRect.height() )
contentRect.adjust( 0, 0, 0, aMinSize.height() - contentRect.height() );
boundingRect = contentRect;
+ // FIXME: why this difference between comboboxes and listboxes ?
+ // because a combobox has a sub edit and that is positioned
+ // inside the outer bordered control ?
+ if( type == CTRL_COMBOBOX )
+ contentRect.adjust(-size,-size,size,size);
retVal = true;
break;
}
@@ -647,6 +668,9 @@ BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
retVal = true;
break;
+ case PART_WINDOW:
+ retVal = true;
+ break;
}
break;
}
@@ -703,14 +727,19 @@ BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
break;
case CTRL_FRAME:
{
- if (part == PART_BORDER)
+ if( part == PART_BORDER )
{
- int size = kapp->style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
- //contentRect.adjust(size, size, size, size);
- boundingRect.adjust(-size, -size, size, size);
+ int size = kapp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
+ USHORT nStyle = val.getNumericVal();
+ if( nStyle & FRAME_DRAW_NODRAW )
+ {
+ // in this case the question is: how thick would a frame be
+ // see brdwin.cxx, decoview.cxx
+ // most probably the behavior in decoview.cxx is wrong.
+ contentRect.adjust(size, size, -size, -size);
+ }
retVal = true;
}
-
break;
}
case CTRL_RADIOBUTTON:
diff --git a/vcl/unx/kde4/main.cxx b/vcl/unx/kde4/main.cxx
index 2a48624d9d14..798990c06466 100644
--- a/vcl/unx/kde4/main.cxx
+++ b/vcl/unx/kde4/main.cxx
@@ -45,6 +45,16 @@
extern "C" {
VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule )
{
+ /* #i92121# workaround deadlocks in the X11 implementation
+ */
+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
+ /* #i90094#
+ from now on we know that an X connection will be
+ established, so protect X against itself
+ */
+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
+ XInitThreads();
+
#if QT_VERSION < 0x050000
// Qt 4.x support needs >= 4.1.0
rtl::OString aVersion( qVersion() );
diff --git a/vcl/unx/source/app/salinst.cxx b/vcl/unx/source/app/salinst.cxx
index c160ea4c2fa5..1dc2d1404009 100644
--- a/vcl/unx/source/app/salinst.cxx
+++ b/vcl/unx/source/app/salinst.cxx
@@ -35,6 +35,8 @@
#include <stdio.h>
#include <stdlib.h>
+#include <osl/module.hxx>
+
#include "salunx.h"
#include "saldata.hxx"
@@ -103,6 +105,16 @@ extern "C"
{
VCL_DLLPUBLIC SalInstance* create_SalInstance()
{
+ /* #i92121# workaround deadlocks in the X11 implementation
+ */
+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
+ /* #i90094#
+ from now on we know that an X connection will be
+ established, so protect X against itself
+ */
+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
+ XInitThreads();
+
X11SalInstance* pInstance = new X11SalInstance( new SalYieldMutex() );
// initialize SalData
@@ -403,3 +415,20 @@ void X11SalInstance::FillFontPathList( std::list< rtl::OString >& o_rFontPaths )
#endif /* SOLARIS */
}
+extern "C" { static void SAL_CALL thisModule() {} }
+
+void X11SalInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType)
+{
+ const rtl::OUString SYM_ADD_TO_RECENTLY_USED_FILE_LIST(RTL_CONSTASCII_USTRINGPARAM("add_to_recently_used_file_list"));
+ const rtl::OUString LIB_RECENT_FILE(RTL_CONSTASCII_USTRINGPARAM("librecentfile.so"));
+ typedef void (*PFUNC_ADD_TO_RECENTLY_USED_LIST)(const rtl::OUString&, const rtl::OUString&);
+
+ PFUNC_ADD_TO_RECENTLY_USED_LIST add_to_recently_used_file_list = 0;
+
+ osl::Module module;
+ module.loadRelative( &thisModule, LIB_RECENT_FILE );
+ if (module.is())
+ add_to_recently_used_file_list = (PFUNC_ADD_TO_RECENTLY_USED_LIST)module.getFunctionSymbol(SYM_ADD_TO_RECENTLY_USED_FILE_LIST);
+ if (add_to_recently_used_file_list)
+ add_to_recently_used_file_list(rFileUrl, rMimeType);
+}
diff --git a/vcl/unx/source/app/sm.cxx b/vcl/unx/source/app/sm.cxx
index 7e4e16579623..ff981b04259b 100644
--- a/vcl/unx/source/app/sm.cxx
+++ b/vcl/unx/source/app/sm.cxx
@@ -48,6 +48,7 @@
#include <saldisp.hxx>
#include <salframe.h>
#include <vcl/svapp.hxx>
+#include <vcl/window.hxx>
#include <salinst.h>
#include <osl/conditn.h>
@@ -187,6 +188,7 @@ bool SessionManagerClient::bDocSaveDone = false;
static SmProp* pSmProps = NULL;
static SmProp** ppSmProps = NULL;
static int nSmProps = 0;
+static unsigned char *pSmRestartHint = NULL;
static void BuildSmPropertyList()
@@ -195,7 +197,7 @@ static void BuildSmPropertyList()
{
ByteString aExec( SessionManagerClient::getExecName(), osl_getThreadTextEncoding() );
- nSmProps = 4;
+ nSmProps = 5;
pSmProps = new SmProp[ nSmProps ];
pSmProps[ 0 ].name = const_cast<char*>(SmCloneCommand);
@@ -243,6 +245,15 @@ static void BuildSmPropertyList()
pSmProps[ 3 ].vals->value = strdup( aUser.getStr() );
pSmProps[ 3 ].vals->length = strlen( (char *)pSmProps[ 3 ].vals->value )+1;
+ pSmProps[ 4 ].name = const_cast<char*>(SmRestartStyleHint);
+ pSmProps[ 4 ].type = const_cast<char*>(SmCARD8);
+ pSmProps[ 4 ].num_vals = 1;
+ pSmProps[ 4 ].vals = new SmPropValue;
+ pSmProps[ 4 ].vals->value = malloc(1);
+ pSmRestartHint = (unsigned char *)pSmProps[ 4 ].vals->value;
+ *pSmRestartHint = SmRestartIfRunning;
+ pSmProps[ 4 ].vals->length = 1;
+
ppSmProps = new SmProp*[ nSmProps ];
for( int i = 0; i < nSmProps; i++ )
ppSmProps[ i ] = &pSmProps[i];
@@ -257,6 +268,31 @@ bool SessionManagerClient::checkDocumentsSaved()
IMPL_STATIC_LINK( SessionManagerClient, SaveYourselfHdl, void*, EMPTYARG )
{
SMprintf( "posting save documents event shutdown = %s\n", (pThis!=0) ? "true" : "false" );
+
+ static bool bFirstShutdown=true;
+ if (pThis != 0 && bFirstShutdown) //first shutdown request
+ {
+ bFirstShutdown = false;
+ /*
+ If we have no actual frames open, e.g. we launched a quickstarter,
+ and then shutdown all our frames leaving just a quickstarter running,
+ then we don't want to launch an empty toplevel frame on the next
+ start. (The job of scheduling the restart of the quick-starter is a
+ task of the quick-starter)
+ */
+ *pSmRestartHint = SmRestartNever;
+ const std::list< SalFrame* >& rFrames = GetX11SalData()->GetDisplay()->getFrames();
+ for( std::list< SalFrame* >::const_iterator it = rFrames.begin(); it != rFrames.end(); ++it )
+ {
+ Window *pWindow = (*it)->GetWindow();
+ if (pWindow && pWindow->IsVisible())
+ {
+ *pSmRestartHint = SmRestartIfRunning;
+ break;
+ }
+ }
+ }
+
if( pOneInstance )
{
SalSessionSaveRequestEvent aEvent( pThis != 0, false );
@@ -385,7 +421,7 @@ void SessionManagerClient::saveDone()
ICEConnectionObserver::lock();
SmcSetProperties( aSmcConnection, nSmProps, ppSmProps );
SmcSaveYourselfDone( aSmcConnection, True );
- SMprintf( "sent SaveYourselfDone\n" );
+ SMprintf( "sent SaveYourselfDone SmRestartHint of %d\n", *pSmRestartHint );
bDocSaveDone = true;
ICEConnectionObserver::unlock();
}
diff --git a/vcl/unx/source/desktopdetect/desktopdetector.cxx b/vcl/unx/source/desktopdetect/desktopdetector.cxx
new file mode 100644
index 000000000000..07fb18fa8344
--- /dev/null
+++ b/vcl/unx/source/desktopdetect/desktopdetector.cxx
@@ -0,0 +1,346 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: salplug.cxx,v $
+ * $Revision: 1.30 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <svunx.h>
+#include <tools/prex.h>
+#include <X11/Xatom.h>
+#include <tools/postx.h>
+
+#include "vcl/dllapi.h"
+
+#include "rtl/ustrbuf.hxx"
+#include "osl/module.h"
+#include "osl/process.h"
+#include "osl/thread.h"
+
+#include <unistd.h>
+
+using namespace rtl;
+
+enum {
+ DESKTOP_NONE = 0,
+ DESKTOP_UNKNOWN,
+ DESKTOP_GNOME,
+ DESKTOP_KDE,
+ DESKTOP_KDE4,
+ DESKTOP_CDE
+};
+
+static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" };
+
+static bool is_gnome_desktop( Display* pDisplay )
+{
+ bool ret = false;
+
+ // warning: these checks are coincidental, GNOME does not
+ // explicitly advertise itself
+
+ if ( NULL != getenv( "GNOME_DESKTOP_SESSION_ID" ) )
+ ret = true;
+
+ if( ! ret )
+ {
+ Atom nAtom1 = XInternAtom( pDisplay, "GNOME_SM_PROXY", True );
+ Atom nAtom2 = XInternAtom( pDisplay, "NAUTILUS_DESKTOP_WINDOW_ID", True );
+ if( nAtom1 || nAtom2 )
+ {
+ int nProperties = 0;
+ Atom* pProperties = XListProperties( pDisplay, DefaultRootWindow( pDisplay ), &nProperties );
+ if( pProperties && nProperties )
+ {
+ for( int i = 0; i < nProperties; i++ )
+ if( pProperties[ i ] == nAtom1 ||
+ pProperties[ i ] == nAtom2 )
+ {
+ ret = true;
+ }
+ XFree( pProperties );
+ }
+ }
+ }
+
+ if( ! ret )
+ {
+ Atom nUTFAtom = XInternAtom( pDisplay, "UTF8_STRING", True );
+ Atom nNetWMNameAtom = XInternAtom( pDisplay, "_NET_WM_NAME", True );
+ if( nUTFAtom && nNetWMNameAtom )
+ {
+ // another, more expensive check: search for a gnome-panel
+ XLIB_Window aRoot, aParent, *pChildren = NULL;
+ unsigned int nChildren = 0;
+ XQueryTree( pDisplay, DefaultRootWindow( pDisplay ),
+ &aRoot, &aParent, &pChildren, &nChildren );
+ if( pChildren && nChildren )
+ {
+ for( unsigned int i = 0; i < nChildren && ! ret; i++ )
+ {
+ Atom nType = None;
+ int nFormat = 0;
+ unsigned long nItems = 0, nBytes = 0;
+ unsigned char* pProp = NULL;
+ XGetWindowProperty( pDisplay,
+ pChildren[i],
+ nNetWMNameAtom,
+ 0, 8,
+ False,
+ nUTFAtom,
+ &nType,
+ &nFormat,
+ &nItems,
+ &nBytes,
+ &pProp );
+ if( pProp && nType == nUTFAtom )
+ {
+ OString aWMName( (sal_Char*)pProp );
+ if( aWMName.equalsIgnoreAsciiCase( "gnome-panel" ) )
+ ret = true;
+ }
+ if( pProp )
+ XFree( pProp );
+ }
+ XFree( pChildren );
+ }
+ }
+ }
+
+ return ret;
+}
+
+static bool bWasXError = false;
+
+static inline bool WasXError()
+{
+ bool bRet = bWasXError;
+ bWasXError = false;
+ return bRet;
+}
+
+extern "C"
+{
+ static int autodect_error_handler( Display*, XErrorEvent* )
+ {
+ bWasXError = true;
+ return 0;
+ }
+
+ typedef int(* XErrorHandler)(Display*,XErrorEvent*);
+}
+
+static int KDEVersion( Display* pDisplay )
+{
+ int nRet = 0;
+
+ Atom nFullSession = XInternAtom( pDisplay, "KDE_FULL_SESSION", True );
+ Atom nKDEVersion = XInternAtom( pDisplay, "KDE_SESSION_VERSION", True );
+
+ if( nFullSession )
+ {
+ if( !nKDEVersion )
+ return 3;
+
+ Atom aRealType = None;
+ int nFormat = 8;
+ unsigned long nItems = 0;
+ unsigned long nBytesLeft = 0;
+ unsigned char* pProperty = NULL;
+ XGetWindowProperty( pDisplay,
+ DefaultRootWindow( pDisplay ),
+ nKDEVersion,
+ 0, 1,
+ False,
+ AnyPropertyType,
+ &aRealType,
+ &nFormat,
+ &nItems,
+ &nBytesLeft,
+ &pProperty );
+ if( !WasXError() && nItems != 0 && pProperty )
+ {
+ nRet = *reinterpret_cast< sal_Int32* >( pProperty );
+ }
+ if( pProperty )
+ {
+ XFree( pProperty );
+ pProperty = NULL;
+ }
+ }
+ return nRet;
+}
+
+static bool is_kde_desktop( Display* pDisplay )
+{
+ if ( NULL != getenv( "KDE_FULL_SESSION" ) )
+ {
+ const char *pVer = getenv( "KDE_SESSION_VERSION" );
+ if ( !pVer || pVer[0] == '0' )
+ {
+ return true; // does not exist => KDE3
+ }
+
+ rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "3" ) );
+ if ( aVer.equalsIgnoreAsciiCaseAscii( pVer ) )
+ {
+ return true;
+ }
+ }
+
+ if ( KDEVersion( pDisplay ) == 3 )
+ return true;
+
+ return false;
+}
+
+static bool is_kde4_desktop( Display* pDisplay )
+{
+ if ( NULL != getenv( "KDE_FULL_SESSION" ) )
+ {
+ rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "4" ) );
+
+ const char *pVer = getenv( "KDE_SESSION_VERSION" );
+ if ( pVer && aVer.equalsIgnoreAsciiCaseAscii( pVer ) )
+ return true;
+ }
+
+ if ( KDEVersion( pDisplay ) == 4 )
+ return true;
+
+ return false;
+}
+
+static bool is_cde_desktop( Display* pDisplay )
+{
+ void* pLibrary = NULL;
+
+ Atom nDtAtom = XInternAtom( pDisplay, "_DT_WM_READY", True );
+ OUString aPathName( RTL_CONSTASCII_USTRINGPARAM( "file:///usr/dt/lib/libDtSvc.so" ) );
+ if( nDtAtom && ( pLibrary = osl_loadModule( aPathName.pData, SAL_LOADMODULE_DEFAULT ) ) )
+ {
+ osl_unloadModule( (oslModule)pLibrary );
+ return true;
+ }
+
+ return false;
+}
+
+
+extern "C"
+{
+
+VCL_DLLPUBLIC rtl::OUString get_desktop_environment()
+{
+ rtl::OUStringBuffer aRet( 8 );
+ static const char *pOverride = getenv( "OOO_FORCE_DESKTOP" );
+
+ if ( pOverride && *pOverride )
+ {
+ OString aOver( pOverride );
+
+ if ( aOver.equalsIgnoreAsciiCase( "cde" ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_CDE] );
+ if ( aOver.equalsIgnoreAsciiCase( "kde4" ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_KDE4] );
+ if ( aOver.equalsIgnoreAsciiCase( "gnome" ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_GNOME] );
+ if ( aOver.equalsIgnoreAsciiCase( "kde" ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_KDE] );
+ if ( aOver.equalsIgnoreAsciiCase( "none" ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_UNKNOWN] );
+ }
+
+ if( aRet.getLength() == 0 )
+ {
+ // get display to connect to
+ const char* pDisplayStr = getenv( "DISPLAY" );
+ int nParams = osl_getCommandArgCount();
+ OUString aParam;
+ OString aBParm;
+ for( int i = 0; i < nParams; i++ )
+ {
+ osl_getCommandArg( i, &aParam.pData );
+ if( aParam.equalsAscii( "-headless" ) )
+ {
+ pDisplayStr = NULL;
+ break;
+ }
+ if( i < nParams-1 && (aParam.equalsAscii( "-display" ) || aParam.equalsAscii( "--display" )) )
+ {
+ osl_getCommandArg( i+1, &aParam.pData );
+ aBParm = OUStringToOString( aParam, osl_getThreadTextEncoding() );
+ pDisplayStr = aBParm.getStr();
+ break;
+ }
+ }
+
+ // no server at all
+ if( ! pDisplayStr || !*pDisplayStr )
+ aRet.appendAscii( desktop_strings[DESKTOP_NONE] );
+ else
+ {
+ /* #i92121# workaround deadlocks in the X11 implementation
+ */
+ static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
+ /* #i90094#
+ from now on we know that an X connection will be
+ established, so protect X against itself
+ */
+ if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
+ XInitThreads();
+
+ Display* pDisplay = XOpenDisplay( pDisplayStr );
+ if( pDisplay )
+ {
+ XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler );
+
+ if ( is_kde4_desktop( pDisplay ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_KDE4] );
+ else if ( is_gnome_desktop( pDisplay ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_GNOME] );
+ else if ( is_cde_desktop( pDisplay ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_CDE] );
+ else if ( is_kde_desktop( pDisplay ) )
+ aRet.appendAscii( desktop_strings[DESKTOP_KDE] );
+ else
+ aRet.appendAscii( desktop_strings[DESKTOP_UNKNOWN] );
+
+ // set the default handler again
+ XSetErrorHandler( pOldHdl );
+
+ XCloseDisplay( pDisplay );
+ }
+ }
+ }
+
+ return aRet.makeStringAndClear();
+}
+
+}
diff --git a/vcl/unx/source/desktopdetect/makefile.mk b/vcl/unx/source/desktopdetect/makefile.mk
new file mode 100644
index 000000000000..cc845ee34887
--- /dev/null
+++ b/vcl/unx/source/desktopdetect/makefile.mk
@@ -0,0 +1,61 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.8 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=vcl
+TARGET=dtdetect
+
+.INCLUDE : $(PRJ)$/util$/makefile.pmk
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/makefile2.pmk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(GUIBASE)"!="unx"
+
+dummy:
+ @echo "Nothing to build for GUIBASE $(GUIBASE)"
+
+.ELSE # "$(GUIBASE)"!="unx"
+
+SLOFILES=$(SLO)$/desktopdetector.obj
+
+.ENDIF # "$(GUIBASE)"!="unx"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.INCLUDE : $(PRJ)$/util$/target.pmk
diff --git a/dtrans/source/X11/X11_clipboard.cxx b/vcl/unx/source/dtrans/X11_clipboard.cxx
index ddef361e0670..0a47076f0d09 100644
--- a/dtrans/source/X11/X11_clipboard.cxx
+++ b/vcl/unx/source/dtrans/X11_clipboard.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <X11/Xatom.h>
#include <X11_clipboard.hxx>
diff --git a/dtrans/source/X11/X11_clipboard.hxx b/vcl/unx/source/dtrans/X11_clipboard.hxx
index a12064df6cbd..a12064df6cbd 100644
--- a/dtrans/source/X11/X11_clipboard.hxx
+++ b/vcl/unx/source/dtrans/X11_clipboard.hxx
diff --git a/dtrans/source/X11/X11_dndcontext.cxx b/vcl/unx/source/dtrans/X11_dndcontext.cxx
index b9d8f10efa23..59832c27c2a7 100644
--- a/dtrans/source/X11/X11_dndcontext.cxx
+++ b/vcl/unx/source/dtrans/X11_dndcontext.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <X11_dndcontext.hxx>
#include <X11_selection.hxx>
diff --git a/dtrans/source/X11/X11_dndcontext.hxx b/vcl/unx/source/dtrans/X11_dndcontext.hxx
index f2ecb7b0841b..f2ecb7b0841b 100644
--- a/dtrans/source/X11/X11_dndcontext.hxx
+++ b/vcl/unx/source/dtrans/X11_dndcontext.hxx
diff --git a/dtrans/source/X11/X11_droptarget.cxx b/vcl/unx/source/dtrans/X11_droptarget.cxx
index 4f71a0507790..153514c668a0 100644
--- a/dtrans/source/X11/X11_droptarget.cxx
+++ b/vcl/unx/source/dtrans/X11_droptarget.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <X11_selection.hxx>
diff --git a/dtrans/source/X11/X11_selection.cxx b/vcl/unx/source/dtrans/X11_selection.cxx
index 21030a220917..3f7dfc2df709 100644
--- a/dtrans/source/X11/X11_selection.cxx
+++ b/vcl/unx/source/dtrans/X11_selection.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <unistd.h>
#include <stdio.h>
@@ -293,25 +293,11 @@ void SelectionManager::initialize( const Sequence< Any >& arguments ) throw (::c
* registering us as XEventHandler on it.
*
* implementor's note:
- * <RANT>
- * Because XDND implementations send their ClientMessage events with
- * XSendEvent and event mask 0 (which is perfectly sensible)
- * these events get only sent to the connection that created
- * the window in question: the vcl display.
- *
- * So this whole service should be implemented in vcl where
- * it belongs. But as usual the dogmatics win and the dogma says:
- * "vcl bad, service good". So instead of making vcl a service
- * providing library we make a new one that is "independent" of vcl,
- * because it is not linked against it and dispatch every event of
- * the vcl event loop to here via uno mechanisms (that is copying it,
- * locking and unlocking mutexes). Well, the user has fast computers
- * these days, so why do we need performance where more memory and
- * a faster CPU will do the job ?
- * And that is why this runs under the title:
- * How NOT to implement a service
- * or the victory of dogma over common sense.
- * </RANT>
+ * FIXME:
+ * finally the clipboard and XDND service is back in the module it belongs
+ * now cleanup and sharing of resources with the normal vcl event loop
+ * needs to be added. The display used whould be that of the normal event loop
+ * and synchronization should be done via the SolarMutex.
*/
if( arguments.getLength() > 0 )
arguments.getConstArray()[0] >>= m_xDisplayConnection;
@@ -338,20 +324,8 @@ void SelectionManager::initialize( const Sequence< Any >& arguments ) throw (::c
arguments.getConstArray()[2] >>= m_xBitmapConverter;
}
- int nParams = osl_getCommandArgCount();
OUString aParam;
- bool bIsHeadless = false;
- for( int i = 0; i < nParams; i++ )
- {
- osl_getCommandArg( i, &aParam.pData );
- if( aParam.equalsAscii( "-headless" ) )
- {
- bIsHeadless = true;
- break;
- }
- }
-
- if( ! m_pDisplay && ! bIsHeadless )
+ if( ! m_pDisplay )
{
OUString aUDisplay;
if( m_xDisplayConnection.is() )
diff --git a/dtrans/source/X11/X11_selection.hxx b/vcl/unx/source/dtrans/X11_selection.hxx
index dc6c41247bbd..dc6c41247bbd 100644
--- a/dtrans/source/X11/X11_selection.hxx
+++ b/vcl/unx/source/dtrans/X11_selection.hxx
diff --git a/vcl/unx/source/dtrans/X11_service.cxx b/vcl/unx/source/dtrans/X11_service.cxx
new file mode 100644
index 000000000000..cf971a2f8eb6
--- /dev/null
+++ b/vcl/unx/source/dtrans/X11_service.cxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: X11_service.cxx,v $
+ * $Revision: 1.11 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include "salinst.h"
+
+#include <X11_clipboard.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#include <uno/dispatcher.h> // declaration of generic uno interface
+#include <uno/mapping.hxx> // mapping stuff
+#include <cppuhelper/factory.hxx>
+#include <cppuhelper/compbase1.hxx>
+
+using namespace rtl;
+using namespace cppu;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::datatransfer::clipboard;
+using namespace com::sun::star::awt;
+using namespace x11;
+
+Sequence< OUString > SAL_CALL x11::X11Clipboard_getSupportedServiceNames()
+{
+ Sequence< OUString > aRet(1);
+ aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.clipboard.SystemClipboard");
+ return aRet;
+}
+
+Sequence< OUString > SAL_CALL x11::Xdnd_getSupportedServiceNames()
+{
+ Sequence< OUString > aRet(1);
+ aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.dnd.X11DragSource");
+ return aRet;
+}
+
+Sequence< OUString > SAL_CALL x11::Xdnd_dropTarget_getSupportedServiceNames()
+{
+ Sequence< OUString > aRet(1);
+ aRet[0] = OUString::createFromAscii("com.sun.star.datatransfer.dnd.X11DropTarget");
+ return aRet;
+}
+
+// ------------------------------------------------------------------------
+
+Reference< XInterface > X11SalInstance::CreateClipboard( const Sequence< Any >& arguments )
+{
+ static std::hash_map< OUString, ::std::hash_map< Atom, Reference< XClipboard > >, ::rtl::OUStringHash > m_aInstances;
+
+ OUString aDisplayName;
+ Atom nSelection;
+
+ // extract display name from connection argument. An exception is thrown
+ // by SelectionManager.initialize() if no display connection is given.
+ if( arguments.getLength() > 0 )
+ {
+ Reference< XDisplayConnection > xConn;
+ arguments.getConstArray()[0] >>= xConn;
+
+ if( xConn.is() )
+ {
+ Any aIdentifier = xConn->getIdentifier();
+ aIdentifier >>= aDisplayName;
+ }
+ }
+
+ SelectionManager& rManager = SelectionManager::get( aDisplayName );
+ rManager.initialize( arguments );
+
+ // check if any other selection than clipboard selection is specified
+ if( arguments.getLength() > 1 )
+ {
+ OUString aSelectionName;
+
+ arguments.getConstArray()[1] >>= aSelectionName;
+ nSelection = rManager.getAtom( aSelectionName );
+ }
+ else
+ {
+ // default atom is clipboard selection
+ nSelection = rManager.getAtom( OUString::createFromAscii( "CLIPBOARD" ) );
+ }
+
+ ::std::hash_map< Atom, Reference< XClipboard > >& rMap( m_aInstances[ aDisplayName ] );
+ ::std::hash_map< Atom, Reference< XClipboard > >::iterator it = rMap.find( nSelection );
+ if( it != rMap.end() )
+ return it->second;
+
+ X11Clipboard* pClipboard = new X11Clipboard( rManager, nSelection );
+ rMap[ nSelection ] = pClipboard;
+
+ return static_cast<OWeakObject*>(pClipboard);
+}
+
+// ------------------------------------------------------------------------
+
+Reference< XInterface > X11SalInstance::CreateDragSource()
+{
+ return Reference < XInterface >( ( OWeakObject * ) new SelectionManagerHolder() );
+}
+
+// ------------------------------------------------------------------------
+
+Reference< XInterface > X11SalInstance::CreateDropTarget()
+{
+ return Reference < XInterface >( ( OWeakObject * ) new DropTarget() );
+}
+
+
diff --git a/dtrans/source/X11/X11_transferable.cxx b/vcl/unx/source/dtrans/X11_transferable.cxx
index d9dfa3a659a4..a95b87fe1c15 100644
--- a/dtrans/source/X11/X11_transferable.cxx
+++ b/vcl/unx/source/dtrans/X11_transferable.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#if OSL_DEBUG_LEVEL > 1
#include <stdio.h>
diff --git a/dtrans/source/X11/X11_transferable.hxx b/vcl/unx/source/dtrans/X11_transferable.hxx
index 8e8367f666e2..8e8367f666e2 100644
--- a/dtrans/source/X11/X11_transferable.hxx
+++ b/vcl/unx/source/dtrans/X11_transferable.hxx
diff --git a/dtrans/source/X11/bmp.cxx b/vcl/unx/source/dtrans/bmp.cxx
index 372dad10b696..49219bfb0e2a 100644
--- a/dtrans/source/X11/bmp.cxx
+++ b/vcl/unx/source/dtrans/bmp.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <unistd.h>
#include <cstdio>
diff --git a/dtrans/source/X11/bmp.hxx b/vcl/unx/source/dtrans/bmp.hxx
index baf04ac31d90..baf04ac31d90 100644
--- a/dtrans/source/X11/bmp.hxx
+++ b/vcl/unx/source/dtrans/bmp.hxx
diff --git a/dtrans/source/X11/config.cxx b/vcl/unx/source/dtrans/config.cxx
index f2f8a0f19b90..2402fb4452c3 100644
--- a/dtrans/source/X11/config.cxx
+++ b/vcl/unx/source/dtrans/config.cxx
@@ -29,7 +29,7 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_dtrans.hxx"
+#include "precompiled_vcl.hxx"
#include <cstdio>
#include <unotools/configitem.hxx>
diff --git a/dtrans/source/X11/copydata_curs.h b/vcl/unx/source/dtrans/copydata_curs.h
index 21a095521939..21a095521939 100644
--- a/dtrans/source/X11/copydata_curs.h
+++ b/vcl/unx/source/dtrans/copydata_curs.h
diff --git a/dtrans/source/X11/copydata_mask.h b/vcl/unx/source/dtrans/copydata_mask.h
index 25db64d9bfee..25db64d9bfee 100644
--- a/dtrans/source/X11/copydata_mask.h
+++ b/vcl/unx/source/dtrans/copydata_mask.h
diff --git a/dtrans/source/X11/linkdata_curs.h b/vcl/unx/source/dtrans/linkdata_curs.h
index 01ea8678acd2..01ea8678acd2 100644
--- a/dtrans/source/X11/linkdata_curs.h
+++ b/vcl/unx/source/dtrans/linkdata_curs.h
diff --git a/dtrans/source/X11/linkdata_mask.h b/vcl/unx/source/dtrans/linkdata_mask.h
index b4207ad40dcf..b4207ad40dcf 100644
--- a/dtrans/source/X11/linkdata_mask.h
+++ b/vcl/unx/source/dtrans/linkdata_mask.h
diff --git a/dtrans/source/X11/makefile.mk b/vcl/unx/source/dtrans/makefile.mk
index 219033cb706d..6af3a7c75048 100644
--- a/dtrans/source/X11/makefile.mk
+++ b/vcl/unx/source/dtrans/makefile.mk
@@ -29,15 +29,13 @@
#
#*************************************************************************
-PRJ=..$/..
+PRJ=..$/..$/..
-PRJNAME=dtrans
+PRJNAME=vcl
TARGET=dtransX11
TARGETTYPE=GUI
ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST=$(TARGET)
-LIBTARGET=NO
# --- Settings -----------------------------------------------------
@@ -67,28 +65,6 @@ SLOFILES=\
$(SLO)$/bmp.obj \
$(SLO)$/config.obj
-SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
-
-.IF "$(OS)"=="MACOSX"
-SHL1STDLIBS= $(LIBSTLPORT) $(CPPUHELPERLIB)
-.ELSE
-SHL1STDLIBS= $(CPPUHELPERLIB)
-.ENDIF
-
-SHL1STDLIBS+= \
- $(UNOTOOLSLIB) \
- $(CPPULIB) \
- $(SALLIB) \
- -lX11
-
-SHL1DEPN=
-SHL1IMPLIB= i$(SHL1TARGET)
-SHL1OBJS= $(SLOFILES)
-
-SHL1VERSIONMAP=exports.map
-SHL1DEF=$(MISC)$/$(SHL1TARGET).def
-DEF1NAME=$(SHL1TARGET)
-
.ENDIF # "$(OS)"=="MACOSX"
# --- Targets ------------------------------------------------------
diff --git a/dtrans/source/X11/movedata_curs.h b/vcl/unx/source/dtrans/movedata_curs.h
index 36845d5e9d1e..36845d5e9d1e 100644
--- a/dtrans/source/X11/movedata_curs.h
+++ b/vcl/unx/source/dtrans/movedata_curs.h
diff --git a/dtrans/source/X11/movedata_mask.h b/vcl/unx/source/dtrans/movedata_mask.h
index facca718b8bf..facca718b8bf 100644
--- a/dtrans/source/X11/movedata_mask.h
+++ b/vcl/unx/source/dtrans/movedata_mask.h
diff --git a/dtrans/source/X11/nodrop_curs.h b/vcl/unx/source/dtrans/nodrop_curs.h
index 725b0fccf91b..725b0fccf91b 100644
--- a/dtrans/source/X11/nodrop_curs.h
+++ b/vcl/unx/source/dtrans/nodrop_curs.h
diff --git a/dtrans/source/X11/nodrop_mask.h b/vcl/unx/source/dtrans/nodrop_mask.h
index ef67a2bc2642..ef67a2bc2642 100644
--- a/dtrans/source/X11/nodrop_mask.h
+++ b/vcl/unx/source/dtrans/nodrop_mask.h
diff --git a/vcl/unx/source/fontmanager/fontcache.cxx b/vcl/unx/source/fontmanager/fontcache.cxx
index 4932f7a771e0..524a365ee20b 100644
--- a/vcl/unx/source/fontmanager/fontcache.cxx
+++ b/vcl/unx/source/fontmanager/fontcache.cxx
@@ -7,7 +7,6 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: fontcache.cxx,v $
- * $Revision: 1.26 $
*
* This file is part of OpenOffice.org.
*
@@ -50,7 +49,7 @@
#endif
#define FONTCACHEFILE "/user/psprint/pspfontcache"
-#define CACHE_MAGIC "PspFontCacheFile format 3"
+#define CACHE_MAGIC "PspFontCacheFile format 4"
using namespace std;
using namespace rtl;
diff --git a/vcl/unx/source/fontmanager/fontmanager.cxx b/vcl/unx/source/fontmanager/fontmanager.cxx
index 995abb5fb89f..99f19ba2fc31 100644
--- a/vcl/unx/source/fontmanager/fontmanager.cxx
+++ b/vcl/unx/source/fontmanager/fontmanager.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fontmanager.cxx,v $
- * $Revision: 1.81.22.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -41,7 +38,8 @@
#include "vcl/fontmanager.hxx"
#include "vcl/fontcache.hxx"
-#include "vcl/helper.hxx"
+#include "vcl/fontcache.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/strhelper.hxx"
#include "vcl/ppdparser.hxx"
#include "vcl/svdata.hxx"
@@ -377,6 +375,15 @@ PrintFontManager::Type1FontFile::~Type1FontFile()
// -------------------------------------------------------------------------
+PrintFontManager::TrueTypeFontFile::TrueTypeFontFile()
+: PrintFont( fonttype::TrueType )
+, m_nDirectory( 0 )
+, m_nCollectionEntry(-1)
+, m_nTypeFlags( TYPEFLAG_INVALID )
+{}
+
+// -------------------------------------------------------------------------
+
PrintFontManager::TrueTypeFontFile::~TrueTypeFontFile()
{
}
@@ -1353,7 +1360,7 @@ bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, co
}
else if( aExt.EqualsIgnoreCaseAscii( "ttf" )
|| aExt.EqualsIgnoreCaseAscii( "tte" ) // #i33947# for Gaiji support
- || aExt.EqualsIgnoreCaseAscii( "otf" ) ) // #112957# allow GLYF-OTF
+ || aExt.EqualsIgnoreCaseAscii( "otf" ) ) // check for TTF- and PS-OpenType too
{
TrueTypeFontFile* pFont = new TrueTypeFontFile();
pFont->m_nDirectory = nDirID;
@@ -2625,6 +2632,10 @@ void PrintFontManager::fillPrintFontInfo( PrintFont* pFont, FastPrintFontInfo& r
rInfo.m_aEncoding = pFont->m_aEncoding;
rInfo.m_eEmbeddedbitmap = pFont->m_eEmbeddedbitmap;
rInfo.m_eAntialias = pFont->m_eAntialias;
+
+ rInfo.m_bEmbeddable = (pFont->m_eType == fonttype::Type1);
+ rInfo.m_bSubsettable = (pFont->m_eType == fonttype::TrueType); // TODO: rename to SfntType
+
rInfo.m_aAliases.clear();
for( ::std::list< int >::iterator it = pFont->m_aAliases.begin(); it != pFont->m_aAliases.end(); ++it )
rInfo.m_aAliases.push_back( m_pAtoms->getString( ATOM_FAMILYNAME, *it ) );
@@ -3054,7 +3065,7 @@ bool PrintFontManager::isFontDownloadingAllowed( fontID nFont ) const
if( pFont && pFont->m_eType == fonttype::TrueType )
{
TrueTypeFontFile* pTTFontFile = static_cast<TrueTypeFontFile*>(pFont);
- if( pTTFontFile->m_nTypeFlags & 0x80000000 )
+ if( pTTFontFile->m_nTypeFlags & TYPEFLAG_INVALID )
{
TrueTypeFont* pTTFont = NULL;
ByteString aFile = getFontFile( pFont );
@@ -3068,7 +3079,7 @@ bool PrintFontManager::isFontDownloadingAllowed( fontID nFont ) const
}
}
- unsigned int nCopyrightFlags = pTTFontFile->m_nTypeFlags & 0x0e;
+ unsigned int nCopyrightFlags = pTTFontFile->m_nTypeFlags & TYPEFLAG_COPYRIGHT_MASK;
// font embedding is allowed if either
// no restriction at all (bit 1 clear)
@@ -3610,7 +3621,9 @@ bool PrintFontManager::getAlternativeFamilyNames( fontID nFont, ::std::list< OUS
// -------------------------------------------------------------------------
+// TODO: move most of this stuff into the central font-subsetting code
bool PrintFontManager::createFontSubset(
+ FontSubsetInfo& rInfo,
fontID nFont,
const OUString& rOutFile,
sal_Int32* pGlyphIDs,
@@ -3621,27 +3634,31 @@ bool PrintFontManager::createFontSubset(
)
{
PrintFont* pFont = getFont( nFont );
- if( !pFont || pFont->m_eType != fonttype::TrueType )
+ if( !pFont )
return false;
- OUString aSysPath;
- if( osl_File_E_None != osl_getSystemPathFromFileURL( rOutFile.pData, &aSysPath.pData ) )
+ switch( pFont->m_eType )
+ {
+ case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break;
+ case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break;
+ default:
+ return false;
+ }
+ // TODO: remove when Type1 subsetting gets implemented
+ if( pFont->m_eType != fonttype::TrueType )
return false;
- rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
- ByteString aFromFile = getFontFile( pFont );
- ByteString aToFile( OUStringToOString( aSysPath, aEncoding ) );
-
+ // reshuffle array of requested glyphs to make sure glyph0==notdef
sal_uInt8 pEnc[256];
sal_uInt16 pGID[256];
sal_uInt8 pOldIndex[256];
-
memset( pEnc, 0, sizeof( pEnc ) );
memset( pGID, 0, sizeof( pGID ) );
memset( pOldIndex, 0, sizeof( pOldIndex ) );
+ if( nGlyphs > 256 )
+ return false;
int nChar = 1;
- int i;
- for( i = 0; i < nGlyphs; i++ )
+ for( int i = 0; i < nGlyphs; i++ )
{
if( pNewEncoding[i] == 0 )
{
@@ -3660,21 +3677,70 @@ bool PrintFontManager::createFontSubset(
}
nGlyphs = nChar; // either input value or increased by one
- if( nGlyphs > 256 )
- return false;
+ // prepare system name for read access for subset source file
+ // TODO: since this file is usually already mmapped there is no need to open it again
+ const ByteString aFromFile = getFontFile( pFont );
- TrueTypeFont* pTTFont = NULL;
+ TrueTypeFont* pTTFont = NULL; // TODO: rename to SfntFont
TrueTypeFontFile* pTTFontFile = static_cast< TrueTypeFontFile* >(pFont);
if( OpenTTFontFile( aFromFile.GetBuffer(), pTTFontFile->m_nCollectionEntry < 0 ? 0 : pTTFontFile->m_nCollectionEntry, &pTTFont ) != SF_OK )
return false;
+ // prepare system name for write access for subset file target
+ OUString aSysPath;
+ if( osl_File_E_None != osl_getSystemPathFromFileURL( rOutFile.pData, &aSysPath.pData ) )
+ return false;
+ const rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
+ const ByteString aToFile( OUStringToOString( aSysPath, aEncoding ) );
+
+ // do CFF subsetting if possible
+ int nCffLength = 0;
+ const sal_uInt8* pCffBytes = NULL;
+ if( GetSfntTable( pTTFont, O_CFF, &pCffBytes, &nCffLength ) )
+ {
+ rInfo.LoadFont( FontSubsetInfo::CFF_FONT, pCffBytes, nCffLength );
+#if 1 // TODO: remove 16bit->long conversion when related methods handle non-16bit glyphids
+ long aRequestedGlyphs[256];
+ for( int i = 0; i < nGlyphs; ++i )
+ aRequestedGlyphs[i] = pGID[i];
+#endif
+ // create subset file at requested path
+ FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" );
+ // create font subset
+ const char* pGlyphSetName = NULL; // TODO: better name?
+ const bool bOK = rInfo.CreateFontSubset(
+ FontSubsetInfo::TYPE1_PFB,
+ pOutFile, pGlyphSetName,
+ aRequestedGlyphs, pEnc, nGlyphs, pWidths );
+ fclose( pOutFile );
+ // cleanup before early return
+ CloseTTFont( pTTFont );
+ return bOK;
+ }
+
+ // do TTF->Type42 or Type3 subsetting
+ // fill in font info
+ psp::PrintFontInfo aFontInfo;
+ if( ! getFontInfo( nFont, aFontInfo ) )
+ return false;
+
+ rInfo.m_nAscent = aFontInfo.m_nAscend;
+ rInfo.m_nDescent = aFontInfo.m_nDescend;
+ rInfo.m_aPSName = getPSName( nFont );
+
+ int xMin, yMin, xMax, yMax;
+ getFontBoundingBox( nFont, xMin, yMin, xMax, yMax );
+ rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) );
+ rInfo.m_nCapHeight = yMax; // Well ...
+
+ // fill in glyph advance widths
TTSimpleGlyphMetrics* pMetrics = GetTTSimpleGlyphMetrics( pTTFont,
pGID,
nGlyphs,
bVertical ? 1 : 0 );
if( pMetrics )
{
- for( i = 0; i < nGlyphs; i++ )
+ for( int i = 0; i < nGlyphs; i++ )
pWidths[pOldIndex[i]] = pMetrics[i].adv;
free( pMetrics );
}
diff --git a/vcl/unx/source/gdi/cdeint.cxx b/vcl/unx/source/gdi/cdeint.cxx
index 4d2a6dba78ca..3794737b293e 100644
--- a/vcl/unx/source/gdi/cdeint.cxx
+++ b/vcl/unx/source/gdi/cdeint.cxx
@@ -216,6 +216,7 @@ void CDEIntegrator::GetSystemLook( AllSettings& rSettings )
aStyleSettings.SetDialogTextColor( aDeactive );
aStyleSettings.SetMenuTextColor( aDeactive );
+ aStyleSettings.SetMenuBarTextColor( aDeactive );
aStyleSettings.SetButtonTextColor( aDeactive );
aStyleSettings.SetRadioCheckTextColor( aDeactive );
aStyleSettings.SetGroupTextColor( aDeactive );
diff --git a/vcl/unx/source/gdi/makefile.mk b/vcl/unx/source/gdi/makefile.mk
index 8f0faf863af2..bdd400baa8ad 100644
--- a/vcl/unx/source/gdi/makefile.mk
+++ b/vcl/unx/source/gdi/makefile.mk
@@ -90,6 +90,10 @@ ENVCFLAGS+=-DUSE_CDE
CFLAGS+=-DXRENDER_LINK
.ENDIF
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CFLAGS+=-DENABLE_GRAPHITE
+.ENDIF
+
.ENDIF # "$(GUIBASE)"!="unx"
# --- Targets ------------------------------------------------------
diff --git a/vcl/unx/source/gdi/pspgraphics.cxx b/vcl/unx/source/gdi/pspgraphics.cxx
index e8dfe391dc86..009b14c56062 100644
--- a/vcl/unx/source/gdi/pspgraphics.cxx
+++ b/vcl/unx/source/gdi/pspgraphics.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: pspgraphics.cxx,v $
- * $Revision: 1.33 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -40,6 +37,7 @@
#include "vcl/glyphcache.hxx"
#include "vcl/impfont.hxx"
#include "vcl/outfont.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/svapp.hxx"
#include "vcl/salprn.hxx"
#include "vcl/sysdata.hxx"
@@ -51,6 +49,11 @@
#include <sys/stat.h>
#include <sys/types.h>
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_serverfont.hxx>
+#endif
+
using namespace psp;
using namespace rtl;
@@ -699,9 +702,30 @@ static void DrawPrinterLayout( const SalLayout& rLayout, ::psp::PrinterGfx& rGfx
Point aPos;
long nUnitsPerPixel = rLayout.GetUnitsPerPixel();
- const sal_Unicode* pText = bIsPspServerFontLayout ? static_cast<const PspServerFontLayout&>(rLayout).getTextPtr() : NULL;
- int nMinCharPos = bIsPspServerFontLayout ? static_cast<const PspServerFontLayout&>(rLayout).getMinCharPos() : 0;
- int nMaxCharPos = bIsPspServerFontLayout ? static_cast<const PspServerFontLayout&>(rLayout).getMaxCharPos() : 0;
+ const sal_Unicode* pText = NULL;
+ int nMinCharPos = 0;
+ int nMaxCharPos = 0;
+ if (bIsPspServerFontLayout)
+ {
+ const PspServerFontLayout * pPspLayout = dynamic_cast<const PspServerFontLayout*>(&rLayout);
+#ifdef ENABLE_GRAPHITE
+ const GraphiteServerFontLayout * pGrLayout = dynamic_cast<const GraphiteServerFontLayout*>(&rLayout);
+#endif
+ if (pPspLayout)
+ {
+ pText = pPspLayout->getTextPtr();
+ nMinCharPos = pPspLayout->getMinCharPos();
+ nMaxCharPos = pPspLayout->getMaxCharPos();
+ }
+#ifdef ENABLE_GRAPHITE
+ else if (pGrLayout)
+ {
+ pText = pGrLayout->getTextPtr();
+ nMinCharPos = pGrLayout->getMinCharPos();
+ nMaxCharPos = pGrLayout->getMaxCharPos();
+ }
+#endif
+ }
for( int nStart = 0;; )
{
int nGlyphCount = rLayout.GetNextGlyphs( nMaxGlyphs, aGlyphAry, aPos, nStart, aWidthAry, bIsPspServerFontLayout ? aCharPosAry : NULL );
@@ -749,16 +773,13 @@ void PspGraphics::DrawServerFontLayout( const ServerFontLayout& rLayout )
ImplFontCharMap* PspGraphics::GetImplFontCharMap() const
{
// TODO: get ImplFontCharMap directly from fonts
- int nPairCount = 0;
- if( m_pServerFont[0] )
- nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL );
- if( !nPairCount )
+ if( !m_pServerFont[0] )
return NULL;
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- if( m_pServerFont[0] )
- m_pServerFont[0]->GetFontCodeRanges( pCodePairs );
- return new ImplFontCharMap( nPairCount, pCodePairs );
+ CmapResult aCmapResult;
+ if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
USHORT PspGraphics::SetFont( ImplFontSelectData *pEntry, int nFallbackLevel )
@@ -961,7 +982,21 @@ SalLayout* PspGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel
if( m_pServerFont[ nFallbackLevel ]
&& !(rArgs.mnFlags & SAL_LAYOUT_DISABLE_GLYPH_PROCESSING) )
- pLayout = new PspServerFontLayout( *m_pPrinterGfx, *m_pServerFont[nFallbackLevel], rArgs );
+ {
+#ifdef ENABLE_GRAPHITE
+ // Is this a Graphite font?
+ if (GraphiteFontAdaptor::IsGraphiteEnabledFont(*m_pServerFont[nFallbackLevel]))
+ {
+ sal_Int32 xdpi, ydpi;
+ GetResolution(xdpi, ydpi);
+ GraphiteFontAdaptor * pGrfont = new GraphiteFontAdaptor( *m_pServerFont[nFallbackLevel], xdpi, ydpi);
+ if (!pGrfont) return NULL;
+ pLayout = new GraphiteServerFontLayout(pGrfont);
+ }
+ else
+#endif
+ pLayout = new PspServerFontLayout( *m_pPrinterGfx, *m_pServerFont[nFallbackLevel], rArgs );
+ }
else
pLayout = new PspFontLayout( *m_pPrinterGfx );
@@ -976,7 +1011,7 @@ BOOL PspGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
@@ -986,7 +1021,16 @@ BOOL PspGraphics::CreateFontSubset(
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
//--------------------------------------------------------------------------
@@ -1041,50 +1085,6 @@ void PspGraphics::GetGlyphWidths( const ImplFontData* pFont,
// static helpers of PspGraphics
-bool PspGraphics::DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo )
-{
- psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- psp::PrintFontInfo aFontInfo;
-
- if( ! rMgr.getFontInfo( aFont, aFontInfo ) )
- return false;
-
- // fill in font info
- switch( aFontInfo.m_eType )
- {
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
- default:
- return false;
- }
- rInfo.m_nAscent = aFontInfo.m_nAscend;
- rInfo.m_nDescent = aFontInfo.m_nDescend;
- rInfo.m_aPSName = rMgr.getPSName( aFont );
-
- int xMin, yMin, xMax, yMax;
- rMgr.getFontBoundingBox( aFont, xMin, yMin, xMax, yMax );
-
- if( ! rMgr.createFontSubset( aFont,
- rToFile,
- pGlyphIDs,
- pEncoding,
- pWidths,
- nGlyphs
- ) )
- return false;
-
- rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) );
- rInfo.m_nCapHeight = yMax; // Well ...
-
- return true;
-}
-
const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen )
{
psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
@@ -1096,8 +1096,8 @@ const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnico
// fill in font info
switch( aFontInfo.m_eType )
{
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
+ case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break;
+ case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break;
default:
return NULL;
}
@@ -1275,6 +1275,8 @@ ImplDevFontAttributes PspGraphics::Info2DevFontAttributes( const psp::FastPrintF
aDFA.meWidthType = ToFontWidth (rInfo.m_eWidth);
aDFA.mePitch = ToFontPitch (rInfo.m_ePitch);
aDFA.mbSymbolFlag = (rInfo.m_aEncoding == RTL_TEXTENCODING_SYMBOL);
+ aDFA.mbSubsettable = rInfo.m_bSubsettable;
+ aDFA.mbEmbeddable = rInfo.m_bEmbeddable;
switch (rInfo.m_eEmbeddedbitmap)
{
@@ -1307,26 +1309,18 @@ ImplDevFontAttributes PspGraphics::Info2DevFontAttributes( const psp::FastPrintF
case psp::fonttype::Builtin:
aDFA.mnQuality = 1024;
aDFA.mbDevice = true;
- aDFA.mbSubsettable = false;
- aDFA.mbEmbeddable = false;
break;
case psp::fonttype::TrueType:
aDFA.mnQuality = 512;
aDFA.mbDevice = false;
- aDFA.mbSubsettable = true;
- aDFA.mbEmbeddable = false;
break;
case psp::fonttype::Type1:
aDFA.mnQuality = 0;
aDFA.mbDevice = false;
- aDFA.mbSubsettable = false;
- aDFA.mbEmbeddable = true;
break;
default:
aDFA.mnQuality = 0;
aDFA.mbDevice = false;
- aDFA.mbSubsettable = false;
- aDFA.mbEmbeddable = false;
break;
}
diff --git a/vcl/unx/source/gdi/salgdi.cxx b/vcl/unx/source/gdi/salgdi.cxx
index 6695d4abeb21..34f2dfd4b935 100644
--- a/vcl/unx/source/gdi/salgdi.cxx
+++ b/vcl/unx/source/gdi/salgdi.cxx
@@ -119,6 +119,12 @@ X11SalGraphics::X11SalGraphics()
nTextPixel_ = 0;
nTextColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black
+#ifdef ENABLE_GRAPHITE
+ // check if graphite fonts have been disabled
+ static const char* pDisableGraphiteStr = getenv( "SAL_DISABLE_GRAPHITE" );
+ bDisableGraphite_ = pDisableGraphiteStr ? (pDisableGraphiteStr[0]!='0') : FALSE;
+#endif
+
pBrushGC_ = NULL;
nBrushPixel_ = 0;
nBrushColor_ = MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ); // White
@@ -1170,11 +1176,11 @@ typedef std::multiset< int, TrapezoidYCompare > VerticalTrapSet;
} // end of anonymous namespace
// draw a poly-polygon
-bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, double fTransparency)
+bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rOrigPolyPoly, double fTransparency)
{
// nothing to do for empty polypolygons
- const int nPolygonCount = rPolyPoly.count();
- if( nPolygonCount <= 0 )
+ const int nOrigPolyCount = rOrigPolyPoly.count();
+ if( nOrigPolyCount <= 0 )
return TRUE;
// nothing to do if everything is transparent
@@ -1203,28 +1209,22 @@ bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly
// don't bother with polygons outside of visible area
const basegfx::B2DRange aViewRange( 0, 0, GetGraphicsWidth(), GetGraphicsHeight() );
- const basegfx::B2DRange aPolyRange = basegfx::tools::getRange( rPolyPoly );
+ const basegfx::B2DRange aPolyRange = basegfx::tools::getRange( rOrigPolyPoly );
const bool bNeedViewClip = !aPolyRange.isInside( aViewRange );
if( !aPolyRange.overlaps( aViewRange ) )
return true;
// convert the polypolygon to trapezoids
- // first convert the B2DPolyPolygon to HalfTrapezoids
- // #i100922# try to prevent priority-queue reallocations by reservering enough
+ // prepare the polypolygon for the algorithm below:
+ // - clip it against the view range
+ // - make sure it contains no self-intersections
+ // while we are at it guess the number of involved polygon points
int nHTQueueReserve = 0;
- for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx )
- {
- const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx );
- const int nPointCount = aOuterPolygon.count();
- nHTQueueReserve += aOuterPolygon.areControlPointsUsed() ? 8 * nPointCount : nPointCount;
- }
- nHTQueueReserve = ((4*nHTQueueReserve) | 0x1FFF) + 1;
- HTQueue aHTQueue;
- aHTQueue.reserve( nHTQueueReserve );
- for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx )
+ basegfx::B2DPolyPolygon aGoodPolyPoly;
+ for( int nOrigPolyIdx = 0; nOrigPolyIdx < nOrigPolyCount; ++nOrigPolyIdx )
{
- const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx );
+ const ::basegfx::B2DPolygon aOuterPolygon = rOrigPolyPoly.getB2DPolygon( nOrigPolyIdx );
// render-trapezoids should be inside the view => clip polygon against view range
basegfx::B2DPolyPolygon aClippedPolygon( aOuterPolygon );
@@ -1232,33 +1232,55 @@ bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly
{
aClippedPolygon = basegfx::tools::clipPolygonOnRange( aOuterPolygon, aViewRange, true, false );
DBG_ASSERT( aClippedPolygon.count(), "polygon confirmed to overlap with view should not get here" );
- if( !aClippedPolygon.count() )
- continue;
}
+ const int nClippedPolyCount = aClippedPolygon.count();
+ if( !nClippedPolyCount )
+ continue;
- // render-trapezoids have linear edges => get rid of bezier segments
- if( aClippedPolygon.areControlPointsUsed() )
- aClippedPolygon = ::basegfx::tools::adaptiveSubdivideByDistance( aClippedPolygon, 0.125 );
-
- // test and remove self intersections
- // TODO: make code intersection save, then remove this test
- basegfx::B2DPolyPolygon aInnerPolyPoly(basegfx::tools::solveCrossovers( aClippedPolygon));
- const int nInnerPolyCount = aInnerPolyPoly.count();
- for( int nInnerPolyIdx = 0; nInnerPolyIdx < nInnerPolyCount; ++nInnerPolyIdx )
+ // #i103259# polypoly.solveCrossover() fails to remove self-intersections
+ // but polygon.solveCrossover() works. Use it to build the intersection-free polypolygon
+ // TODO: if the self-intersection prevention is too expensive make the trap-algorithm tolerate intersections
+ for( int nClippedPolyIdx = 0; nClippedPolyIdx < nClippedPolyCount; ++nClippedPolyIdx )
{
- ::basegfx::B2DPolygon aInnerPolygon = aInnerPolyPoly.getB2DPolygon( nInnerPolyIdx );
- const int nPointCount = aInnerPolygon.count();
- if( !nPointCount )
- continue;
+ ::basegfx::B2DPolygon aUnsolvedPolygon = aClippedPolygon.getB2DPolygon( nClippedPolyIdx );
+ basegfx::B2DPolyPolygon aSolvedPolyPoly( basegfx::tools::solveCrossovers( aUnsolvedPolygon) );
+ const int nSolvedPolyCount = aSolvedPolyPoly.count();
+ for( int nSolvedPolyIdx = 0; nSolvedPolyIdx < nSolvedPolyCount; ++nSolvedPolyIdx )
+ {
+ // build the intersection-free polypolygon one by one
+ const ::basegfx::B2DPolygon aSolvedPolygon = aSolvedPolyPoly.getB2DPolygon( nSolvedPolyIdx );
+ aGoodPolyPoly.append( aSolvedPolygon );
+ // and while we are at it use the conviently available point count to guess the number of needed half-traps
+ const int nPointCount = aSolvedPolygon.count();
+ nHTQueueReserve += aSolvedPolygon.areControlPointsUsed() ? 8 * nPointCount : nPointCount;
+ }
+ }
+ }
+ // #i100922# try to prevent priority-queue reallocations by reservering enough
+ nHTQueueReserve = ((4*nHTQueueReserve) | 0x1FFF) + 1;
+ HTQueue aHTQueue;
+ aHTQueue.reserve( nHTQueueReserve );
- aHTQueue.reserve( aHTQueue.size() + 8 * nPointCount );
+ // first convert the B2DPolyPolygon to HalfTrapezoids
+ const int nGoodPolyCount = aGoodPolyPoly.count();
+ for( int nGoodPolyIdx = 0; nGoodPolyIdx < nGoodPolyCount; ++nGoodPolyIdx )
+ {
+ ::basegfx::B2DPolygon aInnerPolygon = aGoodPolyPoly.getB2DPolygon( nGoodPolyIdx );
+
+ // render-trapezoids have linear edges => get rid of bezier segments
+ if( aInnerPolygon.areControlPointsUsed() )
+ aInnerPolygon = ::basegfx::tools::adaptiveSubdivideByDistance( aInnerPolygon, 0.125 );
+ const int nPointCount = aInnerPolygon.count();
+ if( nPointCount >= 3 )
+ {
// convert polygon point pairs to HalfTrapezoids
// connect the polygon point with the first one if needed
XPointFixed aOldXPF = { 0, 0 };
XPointFixed aNewXPF;
for( int nPointIdx = 0; nPointIdx <= nPointCount; ++nPointIdx, aOldXPF = aNewXPF )
{
+ // auto-close the polygon if needed
const int k = (nPointIdx < nPointCount) ? nPointIdx : 0;
const ::basegfx::B2DPoint& aPoint = aInnerPolygon.getB2DPoint( k );
@@ -1490,7 +1512,6 @@ bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const :
// should use ImplLineConverter normally)
return false;
}
-
const XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
if( !rRenderPeer.AreTrapezoidsSupported() )
return false;
@@ -1546,3 +1567,4 @@ bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const :
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
diff --git a/vcl/unx/source/gdi/salgdi3.cxx b/vcl/unx/source/gdi/salgdi3.cxx
index d1a60cda4097..5d6cd464376a 100644
--- a/vcl/unx/source/gdi/salgdi3.cxx
+++ b/vcl/unx/source/gdi/salgdi3.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salgdi3.cxx,v $
- * $Revision: 1.157.12.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -82,6 +79,11 @@
#include <hash_set>
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_serverfont.hxx>
+#endif
+
struct cairo_surface_t;
struct cairo_t;
struct cairo_font_face_t;
@@ -1450,21 +1452,17 @@ void X11SalGraphics::DrawStringUCS2MB( ExtendedFontStruct& rFont,
ImplFontCharMap* X11SalGraphics::GetImplFontCharMap() const
{
// TODO: get ImplFontCharMap directly from fonts
- int nPairCount = 0;
- if( mpServerFont[0] )
- nPairCount = mpServerFont[0]->GetFontCodeRanges( NULL );
- else if( mXFont[0] )
- nPairCount = mXFont[0]->GetFontCodeRanges( NULL );
-
- if( !nPairCount )
+ if( !mpServerFont[0] )
+#if 0 // RIP XLFD fonts
+ if( mXFont[0] )
+ // TODO?: nPairCount = mXFont[0]->GetFontCodeRanges( NULL );
+#endif
return NULL;
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- if( mpServerFont[0] )
- mpServerFont[0]->GetFontCodeRanges( pCodePairs );
- else if( mXFont[0] )
- mXFont[0]->GetFontCodeRanges( pCodePairs );
- return new ImplFontCharMap( nPairCount, pCodePairs );
+ CmapResult aCmapResult;
+ if( !mpServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
// ----------------------------------------------------------------------------
@@ -1681,11 +1679,29 @@ BOOL X11SalGraphics::GetGlyphOutline( long nGlyphIndex,
SalLayout* X11SalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel )
{
- GenericSalLayout* pLayout = NULL;
+ SalLayout* pLayout = NULL;
if( mpServerFont[ nFallbackLevel ]
&& !(rArgs.mnFlags & SAL_LAYOUT_DISABLE_GLYPH_PROCESSING) )
- pLayout = new ServerFontLayout( *mpServerFont[ nFallbackLevel ] );
+ {
+#ifdef ENABLE_GRAPHITE
+ // Is this a Graphite font?
+ if (!bDisableGraphite_ &&
+ GraphiteFontAdaptor::IsGraphiteEnabledFont(*mpServerFont[nFallbackLevel]))
+ {
+ sal_Int32 xdpi, ydpi;
+
+ xdpi = GetDisplay()->GetResolution().A();
+ ydpi = GetDisplay()->GetResolution().B();
+
+ GraphiteFontAdaptor * pGrfont = new GraphiteFontAdaptor( *mpServerFont[nFallbackLevel], xdpi, ydpi);
+ if (!pGrfont) return NULL;
+ pLayout = new GraphiteServerFontLayout(pGrfont);
+ }
+ else
+#endif
+ pLayout = new ServerFontLayout( *mpServerFont[ nFallbackLevel ] );
+ }
else if( mXFont[ nFallbackLevel ] )
pLayout = new X11FontLayout( *mXFont[ nFallbackLevel ] );
else
@@ -1727,21 +1743,26 @@ BOOL X11SalGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
-#ifndef _USE_PRINT_EXTENSION_
// in this context the pFont->GetFontId() is a valid PSP
// font since they are the only ones left after the PDF
// export has filtered its list of subsettable fonts (for
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
-#else
- return FALSE;
-#endif
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
//--------------------------------------------------------------------------
diff --git a/vcl/unx/source/plugadapt/salplug.cxx b/vcl/unx/source/plugadapt/salplug.cxx
index 8a1ed05b8e25..14de25b13e4d 100644
--- a/vcl/unx/source/plugadapt/salplug.cxx
+++ b/vcl/unx/source/plugadapt/salplug.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salplug.cxx,v $
- * $Revision: 1.30 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -31,18 +28,14 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_vcl.hxx"
-#include <osl/module.h>
-#include <osl/process.h>
+#include "osl/module.h"
+#include "osl/process.h"
-#include <rtl/ustrbuf.hxx>
+#include "rtl/ustrbuf.hxx"
-#include <svunx.h>
-#include <tools/prex.h>
-#include <X11/Xatom.h>
-#include <tools/postx.h>
-#include <vcl/salinst.hxx>
-#include <saldata.hxx>
+#include "vcl/salinst.hxx"
+#include "saldata.hxx"
#include <cstdio>
#include <unistd.h>
@@ -130,292 +123,45 @@ static SalInstance* tryInstance( const OUString& rModuleBase )
return pInst;
}
-static bool is_gnome_desktop( Display* pDisplay )
+static const rtl::OUString& get_desktop_environment()
{
- bool ret = false;
-
- // warning: these checks are coincidental, GNOME does not
- // explicitly advertise itself
-
- if ( NULL != getenv( "GNOME_DESKTOP_SESSION_ID" ) )
- ret = true;
-
- if( ! ret )
- {
- Atom nAtom1 = XInternAtom( pDisplay, "GNOME_SM_PROXY", True );
- Atom nAtom2 = XInternAtom( pDisplay, "NAUTILUS_DESKTOP_WINDOW_ID", True );
- if( nAtom1 || nAtom2 )
- {
- int nProperties = 0;
- Atom* pProperties = XListProperties( pDisplay, DefaultRootWindow( pDisplay ), &nProperties );
- if( pProperties && nProperties )
- {
- for( int i = 0; i < nProperties; i++ )
- if( pProperties[ i ] == nAtom1 ||
- pProperties[ i ] == nAtom2 )
- {
- ret = true;
- }
- XFree( pProperties );
- }
- }
- }
-
- if( ! ret )
+ static rtl::OUString aRet;
+ if( ! aRet.getLength() )
{
- Atom nUTFAtom = XInternAtom( pDisplay, "UTF8_STRING", True );
- Atom nNetWMNameAtom = XInternAtom( pDisplay, "_NET_WM_NAME", True );
- if( nUTFAtom && nNetWMNameAtom )
- {
- // another, more expensive check: search for a gnome-panel
- XLIB_Window aRoot, aParent, *pChildren = NULL;
- unsigned int nChildren = 0;
- XQueryTree( pDisplay, DefaultRootWindow( pDisplay ),
- &aRoot, &aParent, &pChildren, &nChildren );
- if( pChildren && nChildren )
- {
- for( unsigned int i = 0; i < nChildren && ! ret; i++ )
- {
- Atom nType = None;
- int nFormat = 0;
- unsigned long nItems = 0, nBytes = 0;
- unsigned char* pProp = NULL;
- XGetWindowProperty( pDisplay,
- pChildren[i],
- nNetWMNameAtom,
- 0, 8,
- False,
- nUTFAtom,
- &nType,
- &nFormat,
- &nItems,
- &nBytes,
- &pProp );
- if( pProp && nType == nUTFAtom )
- {
- OString aWMName( (sal_Char*)pProp );
- if( aWMName.equalsIgnoreAsciiCase( "gnome-panel" ) )
- ret = true;
- }
- if( pProp )
- XFree( pProp );
- }
- XFree( pChildren );
- }
- }
- }
-
- return ret;
-}
-
-static bool bWasXError = false;
-
-static inline bool WasXError()
-{
- bool bRet = bWasXError;
- bWasXError = false;
- return bRet;
-}
-
-extern "C"
-{
- static int autodect_error_handler( Display*, XErrorEvent* )
- {
- bWasXError = true;
- return 0;
- }
-
- typedef int(* XErrorHandler)(Display*,XErrorEvent*);
-}
-
-static int KDEVersion( Display* pDisplay )
-{
- int nRet = 0;
-
- Atom nFullSession = XInternAtom( pDisplay, "KDE_FULL_SESSION", True );
- Atom nKDEVersion = XInternAtom( pDisplay, "KDE_SESSION_VERSION", True );
-
- if( nFullSession )
- {
- if( !nKDEVersion )
- return 3;
-
- Atom aRealType = None;
- int nFormat = 8;
- unsigned long nItems = 0;
- unsigned long nBytesLeft = 0;
- unsigned char* pProperty = NULL;
- XGetWindowProperty( pDisplay,
- DefaultRootWindow( pDisplay ),
- nKDEVersion,
- 0, 1,
- False,
- AnyPropertyType,
- &aRealType,
- &nFormat,
- &nItems,
- &nBytesLeft,
- &pProperty );
- if( !WasXError() && nItems != 0 && pProperty )
- {
- nRet = *reinterpret_cast< sal_Int32* >( pProperty );
- }
- if( pProperty )
- {
- XFree( pProperty );
- pProperty = NULL;
- }
- }
- return nRet;
-}
-
-static bool is_kde_desktop( Display* pDisplay )
-{
- if ( NULL != getenv( "KDE_FULL_SESSION" ) )
- {
- const char *pVer = getenv( "KDE_SESSION_VERSION" );
- if ( !pVer || pVer[0] == '0' )
- {
- return true; // does not exist => KDE3
- }
-
- rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "3" ) );
- if ( aVer.equalsIgnoreAsciiCaseAscii( pVer ) )
+ OUStringBuffer aModName( 128 );
+ aModName.appendAscii( SAL_DLLPREFIX"desktop_detector" );
+ aModName.appendAscii( SAL_DLLPOSTFIX );
+ aModName.appendAscii( SAL_DLLEXTENSION );
+ OUString aModule = aModName.makeStringAndClear();
+
+ oslModule aMod = osl_loadModuleRelative(
+ reinterpret_cast< oslGenericFunction >( &tryInstance ), aModule.pData,
+ SAL_LOADMODULE_DEFAULT );
+ if( aMod )
{
- return true;
+ rtl::OUString (*pSym)() = (rtl::OUString(*)())
+ osl_getAsciiFunctionSymbol( aMod, "get_desktop_environment" );
+ if( pSym )
+ aRet = pSym();
}
+ osl_unloadModule( aMod );
}
-
- if ( KDEVersion( pDisplay ) == 3 )
- return true;
-
- return false;
-}
-
-static bool is_kde4_desktop( Display* pDisplay )
-{
- if ( NULL != getenv( "KDE_FULL_SESSION" ) )
- {
- rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "4" ) );
-
- const char *pVer = getenv( "KDE_SESSION_VERSION" );
- if ( pVer && aVer.equalsIgnoreAsciiCaseAscii( pVer ) )
- return true;
- }
-
- if ( KDEVersion( pDisplay ) == 4 )
- return true;
-
- return false;
-}
-
-static bool is_cde_desktop( Display* pDisplay )
-{
- void* pLibrary = NULL;
-
- Atom nDtAtom = XInternAtom( pDisplay, "_DT_WM_READY", True );
- OUString aPathName( RTL_CONSTASCII_USTRINGPARAM( "file:///usr/dt/lib/libDtSvc.so" ) );
- if( nDtAtom && ( pLibrary = osl_loadModule( aPathName.pData, SAL_LOADMODULE_DEFAULT ) ) )
- {
- osl_unloadModule( (oslModule)pLibrary );
- return true;
- }
-
- return false;
-}
-
-
-static const char * get_desktop_environment()
-{
- static const char *pRet = NULL;
- static const char *pOverride = getenv( "OOO_FORCE_DESKTOP" );
-
- if ( pOverride && *pOverride )
- {
- OString aOver( pOverride );
-
- if ( aOver.equalsIgnoreAsciiCase( "cde" ) )
- pRet = desktop_strings[DESKTOP_CDE];
- if ( aOver.equalsIgnoreAsciiCase( "kde" ) )
- pRet = desktop_strings[DESKTOP_KDE];
- if ( aOver.equalsIgnoreAsciiCase( "kde4" ) )
- pRet = desktop_strings[DESKTOP_KDE4];
- if ( aOver.equalsIgnoreAsciiCase( "gnome" ) )
- pRet = desktop_strings[DESKTOP_GNOME];
- if ( aOver.equalsIgnoreAsciiCase( "none" ) )
- pRet = desktop_strings[DESKTOP_UNKNOWN];
- }
-
- if ( NULL == pRet )
- {
- // get display to connect to
- const char* pDisplayStr = getenv( "DISPLAY" );
- int nParams = osl_getCommandArgCount();
- OUString aParam;
- OString aBParm;
- for( int i = 0; i < nParams; i++ )
- {
- osl_getCommandArg( i, &aParam.pData );
- if( aParam.equalsAscii( "-headless" ) )
- {
- pDisplayStr = NULL;
- break;
- }
- if( i < nParams-1 && (aParam.equalsAscii( "-display" ) || aParam.equalsAscii( "--display" )) )
- {
- osl_getCommandArg( i+1, &aParam.pData );
- aBParm = OUStringToOString( aParam, osl_getThreadTextEncoding() );
- pDisplayStr = aBParm.getStr();
- break;
- }
- }
-
- // no server at all
- if( ! pDisplayStr || !*pDisplayStr )
- pRet = desktop_strings[DESKTOP_NONE];
- else
- {
- Display* pDisplay = XOpenDisplay( pDisplayStr );
- if( pDisplay )
- {
- XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler );
-
- if ( is_kde4_desktop( pDisplay ) )
- pRet = desktop_strings[DESKTOP_KDE4];
- else if ( is_kde_desktop( pDisplay ) )
- pRet = desktop_strings[DESKTOP_KDE];
- else if ( is_gnome_desktop( pDisplay ) )
- pRet = desktop_strings[DESKTOP_GNOME];
- else if ( is_cde_desktop( pDisplay ) )
- pRet = desktop_strings[DESKTOP_CDE];
- else
- pRet = desktop_strings[DESKTOP_UNKNOWN];
-
- // set the default handler again
- XSetErrorHandler( pOldHdl );
-
- XCloseDisplay( pDisplay );
- }
- }
- }
-
- return pRet;
+ return aRet;
}
-
static const char* autodetect_plugin()
{
- const char * desktop = get_desktop_environment();
+ const rtl::OUString& desktop( get_desktop_environment() );
const char * pRet = "gen";
// no server at all: dummy plugin
- if ( desktop == desktop_strings[DESKTOP_NONE] )
+ if ( desktop.equalsAscii( desktop_strings[DESKTOP_NONE] ) )
pRet = "svp";
- else if ( desktop == desktop_strings[DESKTOP_GNOME] )
+ else if ( desktop.equalsAscii( desktop_strings[DESKTOP_GNOME] ) )
pRet = "gtk";
- else if( desktop == desktop_strings[DESKTOP_KDE] )
+ else if( desktop.equalsAscii( desktop_strings[DESKTOP_KDE] ) )
pRet = "kde";
- else if( desktop == desktop_strings[DESKTOP_KDE4] )
+ else if( desktop.equalsAscii( desktop_strings[DESKTOP_KDE4] ) )
pRet = "kde4";
else
{
@@ -455,19 +201,6 @@ SalInstance *CreateSalInstance()
if( !(pUsePlugin && *pUsePlugin) )
pInst = check_headless_plugin();
- if( ! pInst )
- {
- /* #i92121# workaround deadlocks in the X11 implementation
- */
- static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
- /* #i90094#
- from now on we know that an X connection will be
- established, so protect X against itself
- */
- if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
- XInitThreads();
- }
-
if( ! pInst && !(pUsePlugin && *pUsePlugin) )
pUsePlugin = autodetect_plugin();
@@ -527,8 +260,7 @@ void SalAbort( const XubString& rErrorText )
const OUString& SalGetDesktopEnvironment()
{
- static OUString aRet = OStringToOUString(OString(get_desktop_environment()), RTL_TEXTENCODING_ASCII_US);
- return aRet;
+ return get_desktop_environment();
}
SalData::SalData() :
diff --git a/vcl/unx/source/printer/ppdparser.cxx b/vcl/unx/source/printer/ppdparser.cxx
index 1caf64ef7e2c..95bc7bca41ca 100644
--- a/vcl/unx/source/printer/ppdparser.cxx
+++ b/vcl/unx/source/printer/ppdparser.cxx
@@ -293,8 +293,14 @@ void PPDParser::initPPDFiles()
}
}
-void PPDParser::getKnownPPDDrivers( std::list< rtl::OUString >& o_rDrivers )
+void PPDParser::getKnownPPDDrivers( std::list< rtl::OUString >& o_rDrivers, bool bRefresh )
{
+ if( bRefresh )
+ {
+ delete pAllPPDFiles;
+ pAllPPDFiles = NULL;
+ }
+
initPPDFiles();
o_rDrivers.clear();
diff --git a/vcl/unx/source/printergfx/glyphset.cxx b/vcl/unx/source/printergfx/glyphset.cxx
index 2a35e975cbab..156517d98220 100644
--- a/vcl/unx/source/printergfx/glyphset.cxx
+++ b/vcl/unx/source/printergfx/glyphset.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: glyphset.cxx,v $
- * $Revision: 1.24 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -38,6 +35,7 @@
#include "vcl/printergfx.hxx"
#include "vcl/fontmanager.hxx"
+#include "vcl/fontsubset.hxx"
#include "osl/thread.h"
@@ -787,8 +785,32 @@ GlyphSet::PSUploadEncoding(osl::File* pOutFile, PrinterGfx &rGfx)
return sal_True;
}
+static void CreatePSUploadableFont( TrueTypeFont* pSrcFont, FILE* pTmpFile,
+ const char* pGlyphSetName, int nGlyphCount,
+ /*const*/ sal_uInt16* pRequestedGlyphs, /*const*/ sal_uChar* pEncoding,
+ bool bAllowType42, bool /*bAllowCID*/ )
+{
+ // match the font-subset to the printer capabilities
+ // TODO: allow CFF for capable printers
+ int nTargetMask = FontSubsetInfo::TYPE1_PFA | FontSubsetInfo::TYPE3_FONT;
+ if( bAllowType42 )
+ nTargetMask |= FontSubsetInfo::TYPE42_FONT;
+
+ FontSubsetInfo aInfo;
+ aInfo.LoadFont( pSrcFont );
+
+#if 1 // TODO: remove 16bit->long conversion when input args has been changed
+ long aRequestedGlyphs[256];
+ for( int i = 0; i < nGlyphCount; ++i )
+ aRequestedGlyphs[i] = pRequestedGlyphs[i];
+#endif
+
+ aInfo.CreateFontSubset( nTargetMask, pTmpFile, pGlyphSetName,
+ aRequestedGlyphs, pEncoding, nGlyphCount, NULL );
+}
+
sal_Bool
-GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, std::list< OString >& rSuppliedFonts )
+GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAllowType42, std::list< OString >& rSuppliedFonts )
{
// only for truetype fonts
if (meBaseType != fonttype::TrueType)
@@ -811,6 +833,7 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
// of the glyph in the output file
sal_uChar pEncoding[256];
sal_uInt16 pTTGlyphMapping[256];
+ const bool bAllowCID = false; // TODO: nPSLanguageLevel>=3
// loop thru all the font subsets
sal_Int32 nCharSetID;
@@ -838,13 +861,8 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
// create the current subset
OString aCharSetName = GetCharSetName(nCharSetID);
fprintf( pTmpFile, "%%%%BeginResource: font %s\n", aCharSetName.getStr() );
- if( bAsType42 )
- CreateT42FromTTGlyphs (pTTFont, pTmpFile, aCharSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aCharSet).size() );
- else
- CreateT3FromTTGlyphs (pTTFont, pTmpFile, aCharSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aCharSet).size(),
- 0 /* 0 = horizontal, 1 = vertical */ );
+ CreatePSUploadableFont( pTTFont, pTmpFile, aCharSetName.getStr(), (*aCharSet).size(),
+ pTTGlyphMapping, pEncoding, bAllowType42, bAllowCID );
fprintf( pTmpFile, "%%%%EndResource\n" );
rSuppliedFonts.push_back( aCharSetName );
}
@@ -872,13 +890,8 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
// create the current subset
OString aGlyphSetName = GetGlyphSetName(nGlyphSetID);
fprintf( pTmpFile, "%%%%BeginResource: font %s\n", aGlyphSetName.getStr() );
- if( bAsType42 )
- CreateT42FromTTGlyphs (pTTFont, pTmpFile, aGlyphSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aGlyphSet).size() );
- else
- CreateT3FromTTGlyphs (pTTFont, pTmpFile, aGlyphSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aGlyphSet).size(),
- 0 /* 0 = horizontal, 1 = vertical */ );
+ CreatePSUploadableFont( pTTFont, pTmpFile, aGlyphSetName.getStr(), (*aGlyphSet).size(),
+ pTTGlyphMapping, pEncoding, bAllowType42, bAllowCID );
fprintf( pTmpFile, "%%%%EndResource\n" );
rSuppliedFonts.push_back( aGlyphSetName );
}
@@ -903,5 +916,3 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
return sal_True;
}
-
-
diff --git a/vcl/unx/source/printergfx/text_gfx.cxx b/vcl/unx/source/printergfx/text_gfx.cxx
index e9c173682f87..00e3ab5f44c2 100644
--- a/vcl/unx/source/printergfx/text_gfx.cxx
+++ b/vcl/unx/source/printergfx/text_gfx.cxx
@@ -199,7 +199,7 @@ void PrinterGfx::drawGlyphs(
void PrinterGfx::DrawGlyphs(
const Point& rPoint,
- sal_uInt32* pGlyphIds,
+ sal_GlyphId* pGlyphIds,
sal_Unicode* pUnicodes,
sal_Int16 nLen,
sal_Int32* pDeltaArray
@@ -256,8 +256,8 @@ void PrinterGfx::DrawGlyphs(
for( sal_Int16 i = 0; i < nLen; i++ )
{
- sal_Int32 nRot = ((pGlyphIds[i] >> 24) & 3);
- if( nRot == 0 )
+ const sal_GlyphId nRot = pGlyphIds[i] & GF_ROTMASK;
+ if( nRot == GF_NONE )
{
pTempUnicodes[nTempLen] = pUnicodes[i];
pTempGlyphIds[nTempLen] = pGlyphIds[i];
@@ -282,20 +282,20 @@ void PrinterGfx::DrawGlyphs(
sal_Int32 nRotAngle = 0;
switch( nRot )
{
- case 3:
+ case GF_ROTR:
nRotAngle = 2700;
aRotPoint = Point( -nAscend*nTextWidth/nTextHeight, -nDescend*nTextWidth/nTextHeight - nOffset );
break;
- case 2:
+ case GF_VERT:
nRotAngle = 1800;
aRotPoint = Point( -nOffset, (nAscend+nDescend) );
break;
- case 1:
+ case GF_ROTL:
nRotAngle = 900;
aRotPoint = Point( -nDescend*nTextWidth/nTextHeight, nOffset + nAscend*nTextWidth/nTextHeight );
break;
}
- sal_uInt32 nRotGlyphId = pGlyphIds[i];
+ sal_GlyphId nRotGlyphId = pGlyphIds[i];
sal_Unicode nRotUnicode = pUnicodes[i];
sal_Int32 nRotDelta = 0;
diff --git a/vcl/unx/source/window/salframe.cxx b/vcl/unx/source/window/salframe.cxx
index 04eb9cd32771..6219b50d6ec3 100644
--- a/vcl/unx/source/window/salframe.cxx
+++ b/vcl/unx/source/window/salframe.cxx
@@ -1212,7 +1212,12 @@ void X11SalFrame::Show( BOOL bVisible, BOOL bNoActivate )
XLIB_Time nUserTime = 0;
if( ! bNoActivate && (nStyle_ & (SAL_FRAME_STYLE_OWNERDRAWDECORATION|SAL_FRAME_STYLE_TOOLWINDOW)) == 0 )
- nUserTime = pDisplay_->GetLastUserEventTime();
+ {
+ if( GetDisplay()->getWMAdaptor()->getWindowManagerName().EqualsAscii("Metacity") )
+ nUserTime = pDisplay_->GetLastUserEventTime( true );
+ else
+ nUserTime = pDisplay_->GetLastUserEventTime();
+ }
GetDisplay()->getWMAdaptor()->setUserTime( this, nUserTime );
// actually map the window
diff --git a/vcl/util/makefile.mk b/vcl/util/makefile.mk
index f022031d7987..c6aacf146ef9 100644
--- a/vcl/util/makefile.mk
+++ b/vcl/util/makefile.mk
@@ -6,10 +6,6 @@
#
# OpenOffice.org - a multi-platform office productivity suite
#
-# $RCSfile: makefile.mk,v $
-#
-# $Revision: 1.111.36.3 $
-#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
@@ -163,6 +159,9 @@ LIB1FILES+= \
$(SLB)$/salwin.lib \
$(SLB)$/salgdi.lib \
$(SLB)$/salapp.lib
+.IF "$(GUIBASE)" == "aqua"
+LIB1FILES+= $(SLB)$/dtransaqua.lib
+.ENDIF
.ENDIF
SHL1TARGET= vcl$(DLLPOSTFIX)
@@ -185,12 +184,23 @@ SHL1STDLIBS+=\
$(ICUDATALIB) \
$(ICULELIB) \
$(JVMACCESSLIB)
+
+.IF "$(GUI)" == "UNX"
+.IF "$(ENABLE_GRAPHITE)" != ""
+.IF "$(SYSTEM_GRAPHITE)" == "YES"
+SHL1STDLIBS+= $(GRAPHITE_LIBS)
+.ELSE
+SHL1STDLIBS+= $(SOLARVERSION)/$(INPATH)/lib$(UPDMINOREXT)/libgraphite.a
+.ENDIF
+.ENDIF
+.ENDIF
SHL1USE_EXPORTS=name
.IF "$(GUIBASE)"=="aqua"
SHL1STDLIBS+= \
$(BASEBMPLIB) \
- -lAppleRemote$(DLLPOSTFIX)
+ -lAppleRemote$(DLLPOSTFIX) \
+ -framework QuickTime
LIB1FILES+= \
$(SLB)$/sala11y.lib
@@ -199,12 +209,16 @@ LIB1FILES+= \
.IF "$(USE_BUILTIN_RASTERIZER)"!=""
LIB1FILES += $(SLB)$/glyphs.lib
SHL1STDLIBS+= $(FREETYPELIB)
+.ELSE
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+ LIB1FILES += $(SLB)$/glyphs.lib
+.ENDIF
.ENDIF # USE_BUILTIN_RASTERIZER
SHL1LIBS= $(LIB1TARGET)
.IF "$(GUI)"!="UNX"
.IF "$(COM)"!="GCC"
-SHL1OBJS= $(SLO)$/salshl.obj
+#SHL1OBJS= $(SLO)$/salshl.obj
.ENDIF
.ENDIF
@@ -224,6 +238,14 @@ DEFLIB1NAME =vcl
.IF "$(GUI)" == "WNT"
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+.IF "$(COM)" == "GCC"
+SHL1STDLIBS += -lgraphite
+.ELSE
+SHL1STDLIBS += graphite_dll.lib
+.ENDIF
+.ENDIF
+
SHL1STDLIBS += $(UWINAPILIB) \
$(GDI32LIB) \
$(GDIPLUSLIB) \
@@ -251,9 +273,20 @@ STDSHL1 += ft2lib.lib
# UNX sal plugins
.IF "$(GUI)" == "UNX" && "$(GUIBASE)" != "aqua"
+# desktop detector
+LIB7TARGET=$(SLB)$/idet
+LIB7FILES=$(SLB)$/dtdetect.lib
+SHL7TARGET=desktop_detector$(DLLPOSTFIX)
+SHL7STDLIBS=\
+ $(SALLIB) \
+ $(X11LINK_DYNAMIC)
+SHL7IMPLIB=idet
+SHL7LIBS=$(LIB7TARGET)
+
# basic pure X11 plugin
LIB2TARGET=$(SLB)$/ipure_x
LIB2FILES= \
+ $(SLB)$/dtransX11.lib \
$(SLB)$/printergfx.lib \
$(SLB)$/salwin.lib \
$(SLB)$/salgdi.lib \
@@ -270,6 +303,9 @@ SHL2STDLIBS=\
$(TOOLSLIB) \
$(VOSLIB) \
$(BASEGFXLIB) \
+ $(UNOTOOLSLIB) \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
$(SALLIB)
# prepare linking of Xinerama
@@ -297,7 +333,7 @@ SHL2STDLIBS+=`pkg-config --libs xrender`
.IF "$(GUIBASE)"=="unx"
SHL2STDLIBS += -lXext -lSM -lICE -lX11
-.IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD"
+.IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD" && "$(OS)"!="NETBSD"
# needed by salprnpsp.cxx
SHL2STDLIBS+= -ldl
.ENDIF
@@ -345,7 +381,8 @@ SHL4STDLIBS+=\
$(CPPUHELPERLIB) \
$(CPPULIB) \
$(VOSLIB) \
- $(SALLIB)
+ $(SALLIB) \
+ $(X11LINK_DYNAMIC)
.IF "$(ENABLE_RANDR)" != ""
.IF "$(XRANDR_DLOPEN)" == "FALSE"
@@ -373,7 +410,8 @@ SHL5STDLIBS+=\
$(VCLLIB) \
$(TOOLSLIB) \
$(VOSLIB) \
- $(SALLIB)
+ $(SALLIB) \
+ $(X11LINK_DYNAMIC)
.IF "$(ENABLE_RANDR)" != ""
.IF "$(XRANDR_DLOPEN)" == "FALSE"
@@ -402,7 +440,8 @@ SHL6STDLIBS+=\
$(PSPLIB) \
$(TOOLSLIB) \
$(VOSLIB) \
- $(SALLIB)
+ $(SALLIB) \
+ $(X11LINK_DYNAMIC)
.IF "$(ENABLE_RANDR)" != ""
.IF "$(XRANDR_DLOPEN)" == "FALSE"
diff --git a/vcl/util/makefile2.pmk b/vcl/util/makefile2.pmk
index 0e57d7aeb80b..63b2889bc15d 100644
--- a/vcl/util/makefile2.pmk
+++ b/vcl/util/makefile2.pmk
@@ -34,6 +34,5 @@ CDEFS += -DVCL_DLLIMPLEMENTATION
VISIBILITY_HIDDEN=TRUE
.IF "$(GUIBASE)"=="aqua"
-OBJCXXFLAGS=-x objective-c++ -fobjc-exceptions
CFLAGSCXX+=$(OBJCXXFLAGS)
.ENDIF # "$(GUIBASE)"=="aqua"
diff --git a/vcl/win/inc/salgdi.h b/vcl/win/inc/salgdi.h
index 0475ea4a193e..c7ceb68199b9 100644
--- a/vcl/win/inc/salgdi.h
+++ b/vcl/win/inc/salgdi.h
@@ -81,6 +81,9 @@ public:
bool SupportsArabic() const { return mbHasArabicSupport; }
bool AliasSymbolsHigh() const { return mbAliasSymbolsHigh; }
bool AliasSymbolsLow() const { return mbAliasSymbolsLow; }
+#ifdef ENABLE_GRAPHITE
+ bool SupportsGraphite() const { return mbHasGraphiteSupport; }
+#endif
ImplFontCharMap* GetImplFontCharMap() const;
const Ucs2SIntMap* GetEncodingVector() const { return mpEncodingVector; }
@@ -97,6 +100,9 @@ private:
mutable bool mbDisableGlyphApi;
mutable bool mbHasKoreanRange;
mutable bool mbHasCJKSupport;
+#ifdef ENABLE_GRAPHITE
+ mutable bool mbHasGraphiteSupport;
+#endif
mutable bool mbHasArabicSupport;
mutable ImplFontCharMap* mpUnicodeMap;
mutable const Ucs2SIntMap* mpEncodingVector;
diff --git a/vcl/win/inc/salinst.h b/vcl/win/inc/salinst.h
index 26afe892b9a3..33a1a941ed49 100644
--- a/vcl/win/inc/salinst.h
+++ b/vcl/win/inc/salinst.h
@@ -88,6 +88,7 @@ public:
virtual void DestroyMenuItem( SalMenuItem* );
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
+ virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
static int WorkaroundExceptionHandlingInUSER32Lib(int nExcept, LPEXCEPTION_POINTERS pExceptionInfo);
};
diff --git a/vcl/win/source/app/salinst.cxx b/vcl/win/source/app/salinst.cxx
index d57cdd48eed2..2b5ac6d3162d 100644
--- a/vcl/win/source/app/salinst.cxx
+++ b/vcl/win/source/app/salinst.cxx
@@ -39,7 +39,7 @@
#ifdef __MINGW32__
#include <excpt.h>
#endif
-
+#include <osl/file.hxx>
#include <vos/mutex.hxx>
#include <tools/debug.hxx>
#include <wincomp.hxx>
@@ -65,11 +65,13 @@
#if defined _MSC_VER
#pragma warning(push, 1)
+#pragma warning( disable: 4917 )
#endif
#include <GdiPlus.h>
#include <GdiPlusEnums.h>
#include <GdiPlusColor.h>
+#include <Shlobj.h>
#if defined _MSC_VER
#pragma warning(pop)
@@ -456,10 +458,10 @@ void InitSalData()
{
SalData* pSalData = new SalData;
CoInitialize(0);
-
- // init GDIPlus
- static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
- Gdiplus::GdiplusStartup(&pSalData->gdiplusToken, &gdiplusStartupInput, NULL);
+
+ // init GDIPlus
+ static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
+ Gdiplus::GdiplusStartup(&pSalData->gdiplusToken, &gdiplusStartupInput, NULL);
}
@@ -471,7 +473,7 @@ void DeInitSalData()
// deinit GDIPlus
if(pSalData)
{
- Gdiplus::GdiplusShutdown(pSalData->gdiplusToken);
+ Gdiplus::GdiplusShutdown(pSalData->gdiplusToken);
}
delete pSalData;
@@ -1089,6 +1091,26 @@ void* WinSalInstance::GetConnectionIdentifier( ConnectionIdentifierType& rReturn
// -----------------------------------------------------------------------
+/** Add a file to the system shells recent document list if there is any.
+ This function may have no effect under Unix because there is no
+ standard API among the different desktop managers.
+
+ @param aFileUrl
+ The file url of the document.
+*/
+void WinSalInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& /*rMimeType*/)
+{
+ rtl::OUString system_path;
+ osl::FileBase::RC rc = osl::FileBase::getSystemPathFromFileURL(rFileUrl, system_path);
+
+ OSL_ENSURE(osl::FileBase::E_None == rc, "Invalid file url");
+
+ if (osl::FileBase::E_None == rc)
+ SHAddToRecentDocs(SHARD_PATHW, system_path.getStr());
+}
+
+// -----------------------------------------------------------------------
+
SalTimer* WinSalInstance::CreateSalTimer()
{
return new WinSalTimer();
diff --git a/vcl/win/source/gdi/MAKEFILE.MK b/vcl/win/source/gdi/MAKEFILE.MK
index a6d84d41f3ea..3d8fd904b35b 100644
--- a/vcl/win/source/gdi/MAKEFILE.MK
+++ b/vcl/win/source/gdi/MAKEFILE.MK
@@ -64,6 +64,10 @@ SLOFILES= $(SLO)$/salgdi.obj \
EXCEPTIONSFILES= $(SLO)$/salprn.obj
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CFLAGS+=-DENABLE_GRAPHITE
+.ENDIF
+
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
diff --git a/vcl/win/source/gdi/salgdi3.cxx b/vcl/win/source/gdi/salgdi3.cxx
index 99f276faa964..73f4d8320acc 100644
--- a/vcl/win/source/gdi/salgdi3.cxx
+++ b/vcl/win/source/gdi/salgdi3.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salgdi3.cxx,v $
- * $Revision: 1.95.14.5 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -47,6 +44,7 @@
#include "vcl/svapp.hxx"
#include "vcl/outfont.hxx"
#include "vcl/font.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/sallayout.hxx"
#include "rtl/logfile.hxx"
@@ -74,6 +72,11 @@
#include <algorithm>
#endif
+#ifdef ENABLE_GRAPHITE
+#include <graphite/GrClient.h>
+#include <graphite/WinFont.h>
+#endif
+
#include <vector>
#include <set>
#include <map>
@@ -551,13 +554,10 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXA& rE
aDFA.mbEmbeddable = false;
aDFA.mbSubsettable = false;
- if( (rMetric.tmPitchAndFamily & TMPF_TRUETYPE) != 0 )
- if( (rMetric.tmPitchAndFamily & TMPF_DEVICE) == 0 )
- // TODO: implement type1 or CFF subsetting
- if( 0 == (rMetric.ntmFlags & (NTM_PS_OPENTYPE | NTM_TYPE1) ) )
- aDFA.mbSubsettable = true;
- // for now we can only embed Type1 fonts
- if( 0 != (rMetric.ntmFlags & NTM_TYPE1 ) )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
+ || 0 != (rMetric.tmPitchAndFamily & TMPF_TRUETYPE))
+ aDFA.mbSubsettable = true;
+ else if( 0 != (rMetric.tmPitchAndFamily & NTM_TYPE1) ) // TODO: implement subsetting for type1 too
aDFA.mbEmbeddable = true;
// heuristics for font quality
@@ -566,7 +566,7 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXA& rE
aDFA.mnQuality = 0;
if( rMetric.tmPitchAndFamily & TMPF_TRUETYPE )
aDFA.mnQuality += 50;
- if( rMetric.ntmFlags & NTM_TT_OPENTYPE )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) )
aDFA.mnQuality += 10;
if( aDFA.mbSubsettable )
aDFA.mnQuality += 200;
@@ -633,13 +633,10 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXW& rE
aDFA.mbEmbeddable = false;
aDFA.mbSubsettable = false;
- if( (rMetric.tmPitchAndFamily & TMPF_TRUETYPE) != 0 )
- if( (rMetric.tmPitchAndFamily & TMPF_DEVICE) == 0 )
- // TODO: implement type1 or CFF subsetting
- if( 0 == (rMetric.ntmFlags & (NTM_PS_OPENTYPE | NTM_TYPE1) ) )
- aDFA.mbSubsettable = true;
- // for now we can only embed Type1 fonts
- if( rMetric.ntmFlags & NTM_TYPE1 )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
+ || 0 != (rMetric.tmPitchAndFamily & TMPF_TRUETYPE))
+ aDFA.mbSubsettable = true;
+ else if( 0 != (rMetric.tmPitchAndFamily & NTM_TYPE1) ) // TODO: implement subsetting for type1 too
aDFA.mbEmbeddable = true;
// heuristics for font quality
@@ -648,7 +645,7 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXW& rE
aDFA.mnQuality = 0;
if( rMetric.tmPitchAndFamily & TMPF_TRUETYPE )
aDFA.mnQuality += 50;
- if( rMetric.ntmFlags & NTM_TT_OPENTYPE )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) )
aDFA.mnQuality += 10;
if( aDFA.mbSubsettable )
aDFA.mnQuality += 200;
@@ -807,6 +804,9 @@ ImplWinFontData::ImplWinFontData( const ImplDevFontAttributes& rDFS,
mbDisableGlyphApi( false ),
mbHasKoreanRange( false ),
mbHasCJKSupport( false ),
+#ifdef ENABLE_GRAPHITE
+ mbHasGraphiteSupport( false ),
+#endif
mbHasArabicSupport ( false ),
mbAliasSymbolsLow( false ),
mbAliasSymbolsHigh( false ),
@@ -865,6 +865,13 @@ void ImplWinFontData::UpdateFromHDC( HDC hDC ) const
ReadCmapTable( hDC );
ReadOs2Table( hDC );
+#ifdef ENABLE_GRAPHITE
+ static const char* pDisableGraphiteText = getenv( "SAL_DISABLE_GRAPHITE" );
+ if( !pDisableGraphiteText || (pDisableGraphiteText[0] == '0') )
+ {
+ mbHasGraphiteSupport = gr::WinFont::FontHasGraphiteTables(hDC);
+ }
+#endif
// even if the font works some fonts have problems with the glyph API
// => the heuristic below tries to figure out which fonts have the problem
@@ -993,27 +1000,25 @@ void ImplWinFontData::ReadGsubTable( HDC hDC ) const
void ImplWinFontData::ReadCmapTable( HDC hDC ) const
{
- CmapResult aResult;
- aResult.mnPairCount = 0;
- aResult.mpPairCodes = NULL;
- aResult.mpStartGlyphs = NULL;
- aResult.mbSymbolic = (meWinCharSet == SYMBOL_CHARSET);
- aResult.mbRecoded = true;
+ if( mpUnicodeMap != NULL )
+ return;
+ bool bIsSymbolFont = (meWinCharSet == SYMBOL_CHARSET);
// get the CMAP table from the font which is selected into the DC
const DWORD nCmapTag = CalcTag( "cmap" );
const RawFontData aRawFontData( hDC, nCmapTag );
// parse the CMAP table if available
- if( aRawFontData.get() )
+ if( aRawFontData.get() ) {
+ CmapResult aResult;
ParseCMAP( aRawFontData.get(), aRawFontData.size(), aResult );
+ mbDisableGlyphApi |= aResult.mbRecoded;
+ aResult.mbSymbolic = bIsSymbolFont;
+ if( aResult.mnRangeCount > 0 )
+ mpUnicodeMap = new ImplFontCharMap( aResult );
+ }
- mbDisableGlyphApi |= aResult.mbRecoded;
-
- if( aResult.mnPairCount > 0 )
- mpUnicodeMap = new ImplFontCharMap( aResult.mnPairCount,
- aResult.mpPairCodes, aResult.mpStartGlyphs );
- else
- mpUnicodeMap = ImplFontCharMap::GetDefaultMap();
+ if( !mpUnicodeMap )
+ mpUnicodeMap = ImplFontCharMap::GetDefaultMap( bIsSymbolFont );
}
// =======================================================================
@@ -2547,6 +2552,8 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
const ImplFontData* pFont, long* pGlyphIDs, sal_uInt8* pEncoding,
sal_Int32* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rInfo )
{
+ // TODO: use more of the central font-subsetting code, move stuff there if needed
+
// create matching ImplFontSelectData
// we need just enough to get to the font file data
// use height=1000 for easier debugging (to match psprint's font units)
@@ -2554,10 +2561,14 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
// TODO: much better solution: move SetFont and restoration of old font to caller
ScopedFont aOldFont(*this);
- float fScale = 0.0;
+ float fScale = 1.0;
HFONT hOldFont = 0;
ImplDoSetFont( &aIFSD, fScale, hOldFont );
+ ImplWinFontData* pWinFontData = (ImplWinFontData*)aIFSD.mpFontData;
+ pWinFontData->UpdateFromHDC( mhDC );
+/*const*/ ImplFontCharMap* pImplFontCharMap = pWinFontData->GetImplFontCharMap();
+
#if OSL_DEBUG_LEVEL > 1
// get font metrics
TEXTMETRICA aWinMetric;
@@ -2568,8 +2579,42 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
DBG_ASSERT( aWinMetric.tmPitchAndFamily & TMPF_TRUETYPE, "can only subset TT font" );
#endif
+ rtl::OUString aSysPath;
+ if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
+ return FALSE;
+ const rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
+ const ByteString aToFile( aSysPath.getStr(), (xub_StrLen)aSysPath.getLength(), aThreadEncoding );
+
+ // check if the font has a CFF-table
+ const DWORD nCffTag = CalcTag( "CFF " );
+ const RawFontData aRawCffData( mhDC, nCffTag );
+ if( aRawCffData.get() )
+ {
+ long nRealGlyphIds[ 256 ];
+ for( int i = 0; i < nGlyphCount; ++i )
+ {
+ // TODO: remap notdef glyph if needed
+ // TODO: use GDI's GetGlyphIndices instead? Does it handle GSUB properly?
+ sal_uInt32 nGlyphIdx = pGlyphIDs[i] & GF_IDXMASK;
+ if( pGlyphIDs[i] & GF_ISCHAR ) // remaining pseudo-glyphs need to be translated
+ nGlyphIdx = pImplFontCharMap->GetGlyphIndex( nGlyphIdx );
+ if( (pGlyphIDs[i] & (GF_ROTMASK|GF_GSUB)) != 0) // TODO: vertical substitution
+ {/*####*/}
+
+ nRealGlyphIds[i] = nGlyphIdx;
+ }
+
+ // provide a font subset from the CFF-table
+ FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" );
+ rInfo.LoadFont( FontSubsetInfo::CFF_FONT, aRawCffData.get(), aRawCffData.size() );
+ bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, NULL,
+ nRealGlyphIds, pEncoding, nGlyphCount, pGlyphWidths );
+ fclose( pOutFile );
+ return bRC;
+ }
+
// get raw font file data
- const RawFontData xRawFontData( mhDC );
+ const RawFontData xRawFontData( mhDC, NULL );
if( !xRawFontData.get() )
return FALSE;
@@ -2585,7 +2630,7 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
TTGlobalFontInfo aTTInfo;
::GetTTGlobalFontInfo( aSftTTF.get(), &aTTInfo );
- rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;
+ rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF;
rInfo.m_aPSName = ImplSalGetUniString( aTTInfo.psname );
rInfo.m_nAscent = +aTTInfo.winAscent;
rInfo.m_nDescent = -aTTInfo.winDescent;
@@ -2593,7 +2638,7 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
Point( aTTInfo.xMax, aTTInfo.yMax ) );
rInfo.m_nCapHeight = aTTInfo.yMax; // Well ...
- // subset glyphs and get their properties
+ // subset TTF-glyphs and get their properties
// take care that subset fonts require the NotDef glyph in pos 0
int nOrigCount = nGlyphCount;
USHORT aShortIDs[ 256 ];
@@ -2649,11 +2694,6 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
free( pMetrics );
// write subset into destination file
- rtl::OUString aSysPath;
- if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
- return FALSE;
- rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
- ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) );
nRC = ::CreateTTFromTTGlyphs( aSftTTF.get(), aToFile.GetBuffer(), aShortIDs,
aTempEncs, nGlyphCount, 0, NULL, 0 );
return (nRC == SF_OK);
@@ -2683,7 +2723,7 @@ const void* WinSalGraphics::GetEmbedFontData( const ImplFontData* pFont,
TEXTMETRICA aTm;
if( !::GetTextMetricsA( mhDC, &aTm ) )
*pDataLen = 0;
- rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;
+ rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1;
WCHAR aFaceName[64];
int nFNLen = ::GetTextFaceW( mhDC, 64, aFaceName );
// #i59854# strip eventual null byte
@@ -2876,3 +2916,4 @@ SystemFontData WinSalGraphics::GetSysFontData( int nFallbacklevel ) const
}
//--------------------------------------------------------------------------
+
diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index 8d9347e7e352..1b80bf578530 100755..100644
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -71,6 +71,17 @@
typedef std::hash_map<int,int> IntMap;
typedef std::set<int> IntSet;
+// Graphite headers
+#ifdef ENABLE_GRAPHITE
+#include <i18npool/mslangid.hxx>
+#include <graphite/GrClient.h>
+#include <graphite/WinFont.h>
+#include <graphite/Segment.h>
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_cache.hxx>
+#include <vcl/graphite_features.hxx>
+#endif
+
#define DROPPED_OUTGLYPH 0xFFFF
using namespace rtl;
@@ -1757,6 +1768,8 @@ bool UniscribeLayout::GetItemSubrange( const VisualItem& rVisualItem,
if( nMaxGlyphPos < n )
nMaxGlyphPos = n;
}
+ if (nMaxGlyphPos > rVisualItem.mnEndGlyphPos)
+ nMaxGlyphPos = rVisualItem.mnEndGlyphPos - 1;
// extend the glyph range to account for all glyphs in referenced clusters
if( !rVisualItem.IsRTL() ) // LTR-item
@@ -1907,7 +1920,7 @@ int UniscribeLayout::GetNextGlyphs( int nLen, sal_GlyphId* pGlyphs, Point& rPos,
// calculate the absolute position of the first result glyph in pixel units
const GOFFSET aGOffset = mpGlyphOffsets[ nStart ];
- Point aRelativePos( nXOffset + aGOffset.du, aGOffset.dv );
+ Point aRelativePos( nXOffset + aGOffset.du, -aGOffset.dv );
rPos = GetDrawPosition( aRelativePos );
// fill the result arrays
@@ -2041,11 +2054,25 @@ void UniscribeLayout::MoveGlyph( int nStartx8, long nNewXPos )
long nDelta = nNewXPos - pVI->mnXOffset;
if( nStart > nMinGlyphPos )
{
- // move the glyph by expanding its left glyph
- int i;
+ // move the glyph by expanding its left glyph but ignore dropped glyphs
+ int i, nLastUndropped = nMinGlyphPos - 1;
for( i = nMinGlyphPos; i < nStart; ++i )
- nDelta -= mpGlyphAdvances[ i ];
- mpGlyphAdvances[ i-1 ] += nDelta;
+ {
+ if (mpOutGlyphs[i] != DROPPED_OUTGLYPH)
+ {
+ nDelta -= (mpJustifications)? mpJustifications[ i ] : mpGlyphAdvances[ i ];
+ nLastUndropped = i;
+ }
+ }
+ if (nLastUndropped >= nMinGlyphPos)
+ {
+ mpGlyphAdvances[ nLastUndropped ] += nDelta;
+ if (mpJustifications) mpJustifications[ nLastUndropped ] += nDelta;
+ }
+ else
+ {
+ pVI->mnXOffset += nDelta;
+ }
}
else
{
@@ -2066,11 +2093,18 @@ void UniscribeLayout::DropGlyph( int nStartx8 )
--nStart;
else // nStart<=0 for first visible glyph
{
- const VisualItem* pVI = mpVisualItems;
+ VisualItem* pVI = mpVisualItems;
for( int i = mnItemCount, nDummy; --i >= 0; ++pVI )
if( GetItemSubrange( *pVI, nStart, nDummy ) )
break;
DBG_ASSERT( nStart <= mnGlyphCount, "USPLayout::DropG overflow" );
+ int nOffset = 0;
+ int j = pVI->mnMinGlyphPos;
+ while (mpOutGlyphs[j] == DROPPED_OUTGLYPH) j++;
+ if (j == nStart)
+ {
+ pVI->mnXOffset += ((mpJustifications)? mpJustifications[nStart] : mpGlyphAdvances[nStart]);
+ }
}
mpOutGlyphs[ nStart ] = DROPPED_OUTGLYPH;
@@ -2127,11 +2161,12 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ )
}
// handle dropped glyphs at start of visual item
- int nEndGlyphPos;
- GetItemSubrange( rVI, i, nEndGlyphPos );
+ int nMinGlyphPos, nEndGlyphPos, nOrigMinGlyphPos = rVI.mnMinGlyphPos;
+ GetItemSubrange( rVI, nMinGlyphPos, nEndGlyphPos );
+ i = nMinGlyphPos;
while( (mpOutGlyphs[i] == cDroppedGlyph) && (i < nEndGlyphPos) )
{
- rVI.mnXOffset += pGlyphWidths[ i ];
+ //rVI.mnXOffset += pGlyphWidths[ i ];
rVI.mnMinGlyphPos = ++i;
}
@@ -2141,6 +2176,17 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ )
rVI.mnEndGlyphPos = 0;
continue;
}
+ // If there are still glyphs in the cluster and mnMinGlyphPos
+ // has changed then we need to remove the dropped glyphs at start
+ // to correct logClusters, which is unsigned and relative to the
+ // item start.
+ if (rVI.mnMinGlyphPos != nOrigMinGlyphPos)
+ {
+ // drop any glyphs in the visual item outside the range
+ for (i = nOrigMinGlyphPos; i < nMinGlyphPos; i++)
+ mpOutGlyphs[ i ] = cDroppedGlyph;
+ rVI.mnMinGlyphPos = i = nOrigMinGlyphPos;
+ }
// handle dropped glyphs in the middle of visual item
for(; i < nEndGlyphPos; ++i )
@@ -2157,9 +2203,10 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ )
mpGlyphAdvances[ j ] = mpGlyphAdvances[ i ];
if( mpJustifications )
mpJustifications[ j ] = mpJustifications[ i ];
- int k = mpGlyphs2Chars[ i ];
+ const int k = mpGlyphs2Chars[ i ];
mpGlyphs2Chars[ j ] = k;
- mpLogClusters[ k ] = sal::static_int_cast<WORD>(j++);
+ const int nRelGlyphPos = (j++) - rVI.mnMinGlyphPos;
+ mpLogClusters[ k ] = static_cast<WORD>(nRelGlyphPos);
}
rVI.mnEndGlyphPos = j;
@@ -2751,6 +2798,234 @@ bool UniscribeLayout::IsKashidaPosValid ( int nCharPos ) const
#endif // USE_UNISCRIBE
+#ifdef ENABLE_GRAPHITE
+
+class GraphiteLayoutWinImpl : public GraphiteLayout
+{
+public:
+ GraphiteLayoutWinImpl(const gr::Font & font, ImplWinFontEntry & rFont)
+ throw()
+ : GraphiteLayout(font), mrFont(rFont) {};
+ virtual ~GraphiteLayoutWinImpl() throw() {};
+ virtual sal_GlyphId getKashidaGlyph(int & rWidth);
+private:
+ ImplWinFontEntry & mrFont;
+};
+
+sal_GlyphId GraphiteLayoutWinImpl::getKashidaGlyph(int & rWidth)
+{
+ rWidth = mrFont.GetMinKashidaWidth();
+ return mrFont.GetMinKashidaGlyph();
+}
+
+// This class uses the SIL Graphite engine to provide complex text layout services to the VCL
+// @author tse
+//
+class GraphiteWinLayout : public WinLayout
+{
+private:
+ mutable gr::WinFont mpFont;
+ grutils::GrFeatureParser * mpFeatures;
+ mutable GraphiteLayoutWinImpl maImpl;
+public:
+ GraphiteWinLayout(HDC hDC, const ImplWinFontData& rWFD, ImplWinFontEntry& rWFE);
+
+ static bool IsGraphiteEnabledFont(HDC hDC) throw();
+
+ // used by upper layers
+ virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout
+ virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting after fallback etc.
+ // virtual void InitFont() const;
+ virtual void DrawText( SalGraphics& ) const;
+
+ // methods using string indexing
+ virtual int GetTextBreak( long nMaxWidth, long nCharExtra=0, int nFactor=1 ) const;
+ virtual long FillDXArray( long* pDXArray ) const;
+
+ virtual void GetCaretPositions( int nArraySize, long* pCaretXArray ) const;
+
+ // methods using glyph indexing
+ virtual int GetNextGlyphs(int nLen, sal_GlyphId* pGlyphIdxAry, ::Point & rPos, int&,
+ long* pGlyphAdvAry = 0, int* pCharPosAry = 0 ) const;
+
+ // used by glyph+font+script fallback
+ virtual void MoveGlyph( int nStart, long nNewXPos );
+ virtual void DropGlyph( int nStart );
+ virtual void Simplify( bool bIsBase );
+ ~GraphiteWinLayout() { delete mpFeatures; mpFeatures = NULL; };
+protected:
+ virtual void ReplaceDC(gr::Segment & segment) const;
+ virtual void RestoreDC(gr::Segment & segment) const;
+};
+
+bool GraphiteWinLayout::IsGraphiteEnabledFont(HDC hDC) throw()
+{
+ return gr::WinFont::FontHasGraphiteTables(hDC);
+}
+
+GraphiteWinLayout::GraphiteWinLayout(HDC hDC, const ImplWinFontData& rWFD, ImplWinFontEntry& rWFE) throw()
+ : WinLayout(hDC, rWFD, rWFE), mpFont(hDC),
+ maImpl(mpFont, rWFE)
+{
+ const rtl::OString aLang = MsLangId::convertLanguageToIsoByteString( rWFE.maFontSelData.meLanguage );
+ rtl::OString name = rtl::OUStringToOString(
+ rWFE.maFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 );
+ sal_Int32 nFeat = name.indexOf(grutils::GrFeatureParser::FEAT_PREFIX) + 1;
+ if (nFeat > 0)
+ {
+ rtl::OString aFeat = name.copy(nFeat, name.getLength() - nFeat);
+ mpFeatures = new grutils::GrFeatureParser(mpFont, aFeat.getStr(), aLang.getStr());
+ }
+ else
+ {
+ mpFeatures = new grutils::GrFeatureParser(mpFont, aLang.getStr());
+ }
+ maImpl.SetFeatures(mpFeatures);
+}
+
+void GraphiteWinLayout::ReplaceDC(gr::Segment & segment) const
+{
+ COLORREF color = GetTextColor(mhDC);
+ dynamic_cast<gr::WinFont&>(segment.getFont()).replaceDC(mhDC);
+ SetTextColor(mhDC, color);
+}
+
+void GraphiteWinLayout::RestoreDC(gr::Segment & segment) const
+{
+ dynamic_cast<gr::WinFont&>(segment.getFont()).restoreDC();
+}
+
+bool GraphiteWinLayout::LayoutText( ImplLayoutArgs & args)
+{
+ HFONT hUnRotatedFont;
+ if (args.mnOrientation)
+ {
+ // Graphite gets very confused if the font is rotated
+ LOGFONTW aLogFont;
+ ::GetObjectW( mhFont, sizeof(LOGFONTW), &aLogFont);
+ aLogFont.lfEscapement = 0;
+ aLogFont.lfOrientation = 0;
+ hUnRotatedFont = ::CreateFontIndirectW( &aLogFont);
+ ::SelectFont(mhDC, hUnRotatedFont);
+ }
+ WinLayout::AdjustLayout(args);
+ mpFont.replaceDC(mhDC);
+ maImpl.SetFontScale(WinLayout::mfFontScale);
+ //bool succeeded = maImpl.LayoutText(args);
+#ifdef GRCACHE
+ GrSegRecord * pSegRecord = NULL;
+ gr::Segment * pSegment = maImpl.CreateSegment(args, &pSegRecord);
+#else
+ gr::Segment * pSegment = maImpl.CreateSegment(args);
+#endif
+ bool bSucceeded = false;
+ if (pSegment)
+ {
+ // replace the DC on the font within the segment
+ ReplaceDC(*pSegment);
+ // create glyph vectors
+#ifdef GRCACHE
+ bSucceeded = maImpl.LayoutGlyphs(args, pSegment, pSegRecord);
+#else
+ bSucceeded = maImpl.LayoutGlyphs(args, pSegment);
+#endif
+ // restore original DC
+ RestoreDC(*pSegment);
+#ifdef GRCACHE
+ if (pSegRecord) pSegRecord->unlock();
+ else delete pSegment;
+#else
+ delete pSegment;
+#endif
+ }
+ mpFont.restoreDC();
+ if (args.mnOrientation)
+ {
+ // restore the rotated font
+ ::SelectFont(mhDC, mhFont);
+ ::DeleteObject(hUnRotatedFont);
+ }
+ return bSucceeded;
+}
+
+void GraphiteWinLayout::AdjustLayout(ImplLayoutArgs& rArgs)
+{
+ WinLayout::AdjustLayout(rArgs);
+ maImpl.DrawBase() = WinLayout::maDrawBase;
+ maImpl.DrawOffset() = WinLayout::maDrawOffset;
+ if ( (rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL) && rArgs.mpDXArray)
+ {
+ mrWinFontEntry.InitKashidaHandling(mhDC);
+ }
+ maImpl.AdjustLayout(rArgs);
+}
+
+void GraphiteWinLayout::DrawText(SalGraphics &sal_graphics) const
+{
+ HFONT hOrigFont = DisableFontScaling();
+ HDC aHDC = static_cast<WinSalGraphics&>(sal_graphics).mhDC;
+ maImpl.DrawBase() = WinLayout::maDrawBase;
+ maImpl.DrawOffset() = WinLayout::maDrawOffset;
+ const int MAX_GLYPHS = 2;
+ sal_GlyphId glyphIntStr[MAX_GLYPHS];
+ WORD glyphWStr[MAX_GLYPHS];
+ int glyphIndex = 0;
+ Point aPos(0,0);
+ int nGlyphs = 0;
+ do
+ {
+ nGlyphs = maImpl.GetNextGlyphs(1, glyphIntStr, aPos, glyphIndex);
+ if (nGlyphs < 1)
+ break;
+ std::copy(glyphIntStr, glyphIntStr + nGlyphs, glyphWStr);
+ ::ExtTextOutW(aHDC, aPos.X(), aPos.Y(), ETO_GLYPH_INDEX,
+ NULL, (LPCWSTR)&(glyphWStr), nGlyphs, NULL);
+ } while (nGlyphs);
+ if( hOrigFont )
+ DeleteFont( SelectFont( mhDC, hOrigFont ) );
+}
+
+int GraphiteWinLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+{
+ mpFont.replaceDC(mhDC);
+ int nBreak = maImpl.GetTextBreak(nMaxWidth, nCharExtra, nFactor);
+ mpFont.restoreDC();
+ return nBreak;
+}
+
+long GraphiteWinLayout::FillDXArray( long* pDXArray ) const
+{
+ return maImpl.FillDXArray(pDXArray);
+}
+
+void GraphiteWinLayout::GetCaretPositions( int nArraySize, long* pCaretXArray ) const
+{
+ maImpl.GetCaretPositions(nArraySize, pCaretXArray);
+}
+
+int GraphiteWinLayout::GetNextGlyphs( int length, sal_GlyphId* glyph_out,
+ ::Point & pos_out, int &glyph_slot, long * glyph_adv, int *char_index) const
+{
+ maImpl.DrawBase() = WinLayout::maDrawBase;
+ maImpl.DrawOffset() = WinLayout::maDrawOffset;
+ return maImpl.GetNextGlyphs(length, glyph_out, pos_out, glyph_slot, glyph_adv, char_index);
+}
+
+void GraphiteWinLayout::MoveGlyph( int glyph_idx, long new_x_pos )
+{
+ maImpl.MoveGlyph(glyph_idx, new_x_pos);
+}
+
+void GraphiteWinLayout::DropGlyph( int glyph_idx )
+{
+ maImpl.DropGlyph(glyph_idx);
+}
+
+void GraphiteWinLayout::Simplify( bool is_base )
+{
+ maImpl.Simplify(is_base);
+}
+#endif // ENABLE_GRAPHITE
// =======================================================================
SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel )
@@ -2766,6 +3041,11 @@ SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLe
if( !(rArgs.mnFlags & SAL_LAYOUT_COMPLEX_DISABLED)
&& (aUspModule || (bUspEnabled && InitUSP())) ) // CTL layout engine
{
+#ifdef ENABLE_GRAPHITE
+ if (rFontFace.SupportsGraphite())
+ pWinLayout = new GraphiteWinLayout(mhDC, rFontFace, rFontInstance);
+ else
+#endif // ENABLE_GRAPHITE
// script complexity is determined in upper layers
pWinLayout = new UniscribeLayout( mhDC, rFontFace, rFontInstance );
// NOTE: it must be guaranteed that the WinSalGraphics lives longer than
@@ -2788,7 +3068,12 @@ SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLe
BYTE eCharSet = ANSI_CHARSET;
if( mpLogFont )
eCharSet = mpLogFont->lfCharSet;
- pWinLayout = new SimpleWinLayout( mhDC, eCharSet, rFontFace, rFontInstance );
+#ifdef ENABLE_GRAPHITE
+ if (rFontFace.SupportsGraphite())
+ pWinLayout = new GraphiteWinLayout(mhDC, rFontFace, rFontInstance);
+ else
+#endif // ENABLE_GRAPHITE
+ pWinLayout = new SimpleWinLayout( mhDC, eCharSet, rFontFace, rFontInstance );
}
if( mfFontScale != 1.0 )
diff --git a/vcl/win/source/window/MAKEFILE.MK b/vcl/win/source/window/MAKEFILE.MK
index 17e73db1e75e..67cb1bf3e080 100644
--- a/vcl/win/source/window/MAKEFILE.MK
+++ b/vcl/win/source/window/MAKEFILE.MK
@@ -60,6 +60,10 @@ SLOFILES= \
EXCEPTIONSFILES= $(SLO)$/salframe.obj
.ENDIF
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CFLAGS+=-DENABLE_GRAPHITE
+.ENDIF
+
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx
index 3ffc358bd76d..4a49d83918da 100644
--- a/vcl/win/source/window/salframe.cxx
+++ b/vcl/win/source/window/salframe.cxx
@@ -440,11 +440,11 @@ SalFrame* ImplSalCreateFrame( WinSalInstance* pInst,
nExSysStyle |= WS_EX_TOOLWINDOW;
pFrame->mbFloatWin = TRUE;
- if ( pEnvTransparentFloats && bLayeredAPI == 1 /*&& !(nSalFrameStyle & SAL_FRAME_STYLE_MOVEABLE) */)
+ if ( (bLayeredAPI == 1) && (pEnvTransparentFloats /* does not work remote! || (nSalFrameStyle & SAL_FRAME_STYLE_FLOAT_FOCUSABLE) */ ) )
nExSysStyle |= WS_EX_LAYERED;
}
- if( nSalFrameStyle & SAL_FRAME_STYLE_TOOLTIP )
+ if( (nSalFrameStyle & SAL_FRAME_STYLE_TOOLTIP) || (nSalFrameStyle & SAL_FRAME_STYLE_FLOAT_FOCUSABLE) )
nExSysStyle |= WS_EX_TOPMOST;
// init frame data
@@ -2930,6 +2930,7 @@ void WinSalFrame::UpdateSettings( AllSettings& rSettings )
aStyleSettings.SetUseFlatBorders( FALSE );
aStyleSettings.SetUseFlatMenues( FALSE );
aStyleSettings.SetMenuTextColor( ImplWinColorToSal( GetSysColor( COLOR_MENUTEXT ) ) );
+ aStyleSettings.SetMenuBarTextColor( ImplWinColorToSal( GetSysColor( COLOR_MENUTEXT ) ) );
aStyleSettings.SetActiveColor( ImplWinColorToSal( GetSysColor( COLOR_ACTIVECAPTION ) ) );
aStyleSettings.SetActiveTextColor( ImplWinColorToSal( GetSysColor( COLOR_CAPTIONTEXT ) ) );
aStyleSettings.SetDeactiveColor( ImplWinColorToSal( GetSysColor( COLOR_INACTIVECAPTION ) ) );
diff --git a/vcl/workben/makefile.mk b/vcl/workben/makefile.mk
index 34316356a1a6..0b89f031651d 100644
--- a/vcl/workben/makefile.mk
+++ b/vcl/workben/makefile.mk
@@ -140,6 +140,7 @@ APP5STDLIBS+=-lsocket
.ENDIF
.INCLUDE : target.mk
+.IF "$(L10N_framework)"==""
ALLTAR : $(BIN)$/applicat.rdb
@@ -151,4 +152,4 @@ $(BIN)$/applicat.rdb : makefile.mk $(UNOUCRRDB)
$(REGCOMP) -register -r applicat.rdb \
-c i18nsearch.uno$(DLLPOST) \
-c i18npool.uno$(DLLPOST)
-
+.ENDIF